You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2018/12/24 05:06:35 UTC
svn commit: r1849670 - in /subversion/trunk/subversion/bindings/cxx:
include/ include/svnxx/ src/ src/aprwrap/ src/private/ tests/
Author: brane
Date: Mon Dec 24 05:06:35 2018
New Revision: 1849670
URL: http://svn.apache.org/viewvc?rev=1849670&view=rev
Log:
Implement SVN++ library initialisation and teardown.
[in subversion/bindings/cxx]
* include/svnxx/init.hpp: New.
* include/svnxx.hpp: Include svnxx/init.hpp.
* src/private/init-private.hpp: New.
* src/init.cpp: New. Implementation of class init.
* src/aprwrap/pool.hpp: Don't undefine Subversion's symbols.
* src/aprwrap/impl.cpp
(Pool::get_root_pool): Just forward to class init.
* tests/fixture_init.hpp: New; test suite fixture for library initialisation.
* tests/test_aprwrap_arrays.cpp,
tests/test_aprwrap_const_arrays.cpp,
tests/test_aprwrap_hashes.cpp,
tests/test_aprwrap_pools.cpp,
tests/test_exceptions.cpp: Use the new init fixture.
* tests/test_init.cpp: New; tests for library initialisation and teardown.
* tests/svnxx-tests.cpp:
(initialize_apr_library): Removed. Test suites are now responsible for
their own initialisation, using the new init fixture.
Added:
subversion/trunk/subversion/bindings/cxx/include/svnxx/init.hpp (with props)
subversion/trunk/subversion/bindings/cxx/src/init.cpp (with props)
subversion/trunk/subversion/bindings/cxx/src/private/init-private.hpp (with props)
subversion/trunk/subversion/bindings/cxx/tests/fixture_init.hpp (with props)
subversion/trunk/subversion/bindings/cxx/tests/test_init.cpp (with props)
Modified:
subversion/trunk/subversion/bindings/cxx/include/svnxx.hpp
subversion/trunk/subversion/bindings/cxx/src/aprwrap/impl.cpp
subversion/trunk/subversion/bindings/cxx/src/aprwrap/pool.hpp
subversion/trunk/subversion/bindings/cxx/tests/svnxx-tests.cpp
subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp
subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_const_arrays.cpp
subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_hashes.cpp
subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_pools.cpp
subversion/trunk/subversion/bindings/cxx/tests/test_exceptions.cpp
Modified: subversion/trunk/subversion/bindings/cxx/include/svnxx.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/include/svnxx.hpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/include/svnxx.hpp (original)
+++ subversion/trunk/subversion/bindings/cxx/include/svnxx.hpp Mon Dec 24 05:06:35 2018
@@ -29,6 +29,7 @@
#define SVNXX_HPP
// Expose the whole API and alias the default version namespace
+#include "svnxx/init.hpp"
#include "svnxx/exception.hpp"
#include "svnxx/tristate.hpp"
Added: subversion/trunk/subversion/bindings/cxx/include/svnxx/init.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/include/svnxx/init.hpp?rev=1849670&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/include/svnxx/init.hpp (added)
+++ subversion/trunk/subversion/bindings/cxx/include/svnxx/init.hpp Mon Dec 24 05:06:35 2018
@@ -0,0 +1,63 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVNXX_INIT_HPP
+#define SVNXX_INIT_HPP
+
+#include <memory>
+
+namespace apache {
+namespace subversion {
+namespace svnxx {
+
+namespace detail {
+// Forward declaration of the private API context.
+class context;
+} // namespace detail
+
+/**
+ * @brief SVN++ initialization.
+ *
+ * The @c init class takes care of library initialization and
+ * teardown and maintains shared (global) internal state. You must
+ * create an @c init object before you can use the SVN++ API. It is
+ * safe to create create any number of these objects.
+ */
+class init
+{
+public:
+ init();
+
+private:
+ std::shared_ptr<detail::context> context;
+};
+
+} // namespace svnxx
+} // namespace subversion
+} // namespace apache
+
+#endif // SVNXX_INIT_HPP
Propchange: subversion/trunk/subversion/bindings/cxx/include/svnxx/init.hpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/trunk/subversion/bindings/cxx/src/aprwrap/impl.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/aprwrap/impl.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/src/aprwrap/impl.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/src/aprwrap/impl.cpp Mon Dec 24 05:06:35 2018
@@ -21,13 +21,11 @@
* @endcopyright
*/
-#include <mutex>
-
-#include "svn_private_config.h"
-
#include "pool.hpp"
#include "hash.hpp"
+#include "../private/init-private.hpp"
+
namespace apache {
namespace subversion {
namespace svnxx {
@@ -39,18 +37,8 @@ namespace apr {
apr_pool_t* Pool::get_root_pool()
{
- static std::once_flag atomic_init_flag;
- static apr_pool_t* root_pool = nullptr;
-
- std::call_once(
- atomic_init_flag,
- []()
- {
- const auto allocator = svn_pool_create_allocator(true);
- root_pool = svn_pool_create_ex(nullptr, allocator);
- });
-
- return root_pool;
+ auto ctx = detail::context::get();
+ return ctx->get_root_pool();
}
//
Modified: subversion/trunk/subversion/bindings/cxx/src/aprwrap/pool.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/aprwrap/pool.hpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/src/aprwrap/pool.hpp (original)
+++ subversion/trunk/subversion/bindings/cxx/src/aprwrap/pool.hpp Mon Dec 24 05:06:35 2018
@@ -30,8 +30,6 @@
#include "svnxx/noncopyable.hpp"
#include "svn_pools.h"
-#undef TRUE
-#undef FALSE
namespace apache {
namespace subversion {
Added: subversion/trunk/subversion/bindings/cxx/src/init.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/init.cpp?rev=1849670&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/src/init.cpp (added)
+++ subversion/trunk/subversion/bindings/cxx/src/init.cpp Mon Dec 24 05:06:35 2018
@@ -0,0 +1,89 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#include <sstream>
+
+#include "private/init-private.hpp"
+
+#include <apr_general.h>
+#include "svn_pools.h"
+
+namespace apache {
+namespace subversion {
+namespace svnxx {
+
+init::init()
+ : context(detail::context::create())
+{}
+
+namespace detail {
+
+std::mutex context::guard;
+context::weak_ptr context::self;
+
+context::ptr context::create()
+{
+ std::unique_lock<std::mutex> lock(guard);
+ auto ctx = self.lock();
+ if (!ctx)
+ {
+ // Work around the private constructor: since this struct is
+ // defined within a class member, the the private constructor
+ // is accessible and std::make_shared won't complain about it.
+ struct make_shared_hack : public context {};
+ ctx = std::make_shared<make_shared_hack>();
+ self = ctx;
+ }
+ return ctx;
+}
+
+context::context()
+{
+ const auto status = apr_initialize();
+ if (status)
+ {
+ char errbuf[120];
+ std::stringstream message;
+ message << "APR initialization failed: "
+ << apr_strerror(status, errbuf, sizeof(errbuf) - 1);
+ throw std::runtime_error(message.str());
+ }
+
+ const auto allocator = svn_pool_create_allocator(true);
+ root_pool = svn_pool_create_ex(nullptr, allocator);
+
+ // TODO: Check root pool for null.
+ // TODO: Change allocation-failed handler?
+}
+
+context::~context()
+{
+ std::unique_lock<std::mutex> lock(guard);
+ apr_terminate();
+ root_pool = nullptr;
+}
+
+} // namespace detail
+} // namespace svnxx
+} // namespace subversion
+} // namespace apache
Propchange: subversion/trunk/subversion/bindings/cxx/src/init.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: subversion/trunk/subversion/bindings/cxx/src/private/init-private.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/private/init-private.hpp?rev=1849670&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/src/private/init-private.hpp (added)
+++ subversion/trunk/subversion/bindings/cxx/src/private/init-private.hpp Mon Dec 24 05:06:35 2018
@@ -0,0 +1,89 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVNXX_PRIVATE_INIT_HPP
+#define SVNXX_PRIVATE_INIT_HPP
+
+#include <memory>
+#include <mutex>
+#include <stdexcept>
+
+#include <apr_pools.h>
+
+#include "svnxx/init.hpp"
+#include "svnxx/noncopyable.hpp"
+
+#include "svn_private_config.h"
+
+namespace apache {
+namespace subversion {
+namespace svnxx {
+namespace detail {
+
+class context : noncopyable
+{
+public:
+ using ptr = std::shared_ptr<context>;
+ using weak_ptr = std::weak_ptr<context>;
+
+ ~context();
+
+ static ptr create();
+ static ptr get()
+ {
+ auto ctx = self.lock();
+ if (!ctx)
+ {
+ throw std::logic_error(
+ _("The SVN++ library is not initialized."
+ " Did you forget to create an instance of "
+ " the apache::subversion::svnxx::init class?"));
+ }
+ return ctx;
+ }
+
+ apr_pool_t* get_root_pool() const noexcept
+ {
+ return root_pool;
+ }
+
+private:
+ // Thou shalt not create contexts other than through the factory.
+ context();
+
+ apr_pool_t* root_pool{nullptr};
+
+ static std::mutex guard;
+ static weak_ptr self;
+};
+
+} // namespace detail
+} // namespace svnxx
+} // namespace subversion
+} // namespace apache
+
+#endif // SVNXX_PRIVATE_INIT_HPP
Propchange: subversion/trunk/subversion/bindings/cxx/src/private/init-private.hpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: subversion/trunk/subversion/bindings/cxx/tests/fixture_init.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/fixture_init.hpp?rev=1849670&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/fixture_init.hpp (added)
+++ subversion/trunk/subversion/bindings/cxx/tests/fixture_init.hpp Mon Dec 24 05:06:35 2018
@@ -0,0 +1,38 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+
+#ifndef __cplusplus
+#error "This is a C++ header file."
+#endif
+
+#ifndef SVNXX_TEST_FIXTURE_INIT_HPP
+#define SVNXX_TEST_FIXTURE_INIT_HPP
+
+#include "svnxx/init.hpp"
+
+namespace {
+struct init
+{
+ apache::subversion::svnxx::init fixturizer;
+};
+} // anonymous namespace
+
+#endif // SVNXX_TEST_FIXTURE_INIT_HPP
Propchange: subversion/trunk/subversion/bindings/cxx/tests/fixture_init.hpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/trunk/subversion/bindings/cxx/tests/svnxx-tests.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/svnxx-tests.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/svnxx-tests.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/tests/svnxx-tests.cpp Mon Dec 24 05:06:35 2018
@@ -22,35 +22,6 @@
#define BOOST_TEST_MODULE svnxx
#include <boost/test/unit_test.hpp>
-#include <iostream>
-#include <stdexcept>
-
-#include <apr_general.h>
-
-
-struct initialize_apr_library
-{
- initialize_apr_library()
- {
- const auto status = apr_initialize();
- if (status)
- {
- char errbuf[512];
- std::cerr << "APR initialization failed: "
- << apr_strerror(status, errbuf, sizeof(errbuf) - 1)
- << std::endl;
- throw std::runtime_error("APR initialization failed");
- }
- }
- ~initialize_apr_library()
- {
- apr_terminate();
- }
-};
-
-BOOST_GLOBAL_FIXTURE(initialize_apr_library);
-
-
int main (int argc, char* argv[])
{
return boost::unit_test::unit_test_main(&init_unit_test, argc, argv);
Modified: subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_arrays.cpp Mon Dec 24 05:06:35 2018
@@ -26,9 +26,12 @@
#include "../src/aprwrap.hpp"
+#include "fixture_init.hpp"
+
#include "test_aprwrap_array_helpers.hpp"
-BOOST_AUTO_TEST_SUITE(aprwrap_arrays);
+BOOST_AUTO_TEST_SUITE(aprwrap_arrays,
+ * boost::unit_test::fixture<init>());
BOOST_AUTO_TEST_CASE(create_array)
{
Modified: subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_const_arrays.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_const_arrays.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_const_arrays.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_const_arrays.cpp Mon Dec 24 05:06:35 2018
@@ -26,9 +26,12 @@
#include "../src/aprwrap.hpp"
+#include "fixture_init.hpp"
+
#include "test_aprwrap_array_helpers.hpp"
-BOOST_AUTO_TEST_SUITE(aprwrap_const_arrayw);
+BOOST_AUTO_TEST_SUITE(aprwrap_const_arrayw,
+ * boost::unit_test::fixture<init>());
BOOST_AUTO_TEST_CASE(wrap_array)
{
Modified: subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_hashes.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_hashes.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_hashes.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_hashes.cpp Mon Dec 24 05:06:35 2018
@@ -26,7 +26,10 @@
#include "../src/aprwrap.hpp"
-BOOST_AUTO_TEST_SUITE(aprwrap_hashes);
+#include "fixture_init.hpp"
+
+BOOST_AUTO_TEST_SUITE(aprwrap_hashes,
+ * boost::unit_test::fixture<init>());
BOOST_AUTO_TEST_CASE(string_hash)
{
Modified: subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_pools.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_pools.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_pools.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_aprwrap_pools.cpp Mon Dec 24 05:06:35 2018
@@ -26,7 +26,10 @@
#include "../src/aprwrap.hpp"
-BOOST_AUTO_TEST_SUITE(aprwrap_pools);
+#include "fixture_init.hpp"
+
+BOOST_AUTO_TEST_SUITE(aprwrap_pools,
+ * boost::unit_test::fixture<init>());
BOOST_AUTO_TEST_CASE(initialize_global_pool)
{
Modified: subversion/trunk/subversion/bindings/cxx/tests/test_exceptions.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_exceptions.cpp?rev=1849670&r1=1849669&r2=1849670&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_exceptions.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_exceptions.cpp Mon Dec 24 05:06:35 2018
@@ -29,10 +29,9 @@
#include "svnxx.hpp"
#include "../src/private.hpp"
-//#include <apr.h>
#include "svn_error.h"
-#undef TRUE
-#undef FALSE
+
+#include "fixture_init.hpp"
namespace {
svn_error_t* make_error_test_error()
@@ -48,7 +47,8 @@ svn_error_t* make_error_test_error()
}
} // anonymous namespace
-BOOST_AUTO_TEST_SUITE(exceptions);
+BOOST_AUTO_TEST_SUITE(exceptions,
+ * boost::unit_test::fixture<init>());
BOOST_AUTO_TEST_CASE(catch_error)
{
Added: subversion/trunk/subversion/bindings/cxx/tests/test_init.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/tests/test_init.cpp?rev=1849670&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/tests/test_init.cpp (added)
+++ subversion/trunk/subversion/bindings/cxx/tests/test_init.cpp Mon Dec 24 05:06:35 2018
@@ -0,0 +1,64 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ */
+#include <boost/test/unit_test.hpp>
+
+#include "../src/private/init-private.hpp"
+
+namespace svn = ::apache::subversion::svnxx;
+namespace detail = ::apache::subversion::svnxx::detail;
+
+BOOST_AUTO_TEST_SUITE(init);
+
+BOOST_AUTO_TEST_CASE(context_with_init)
+{
+ svn::init svnxx_initialized;
+ BOOST_TEST(detail::context::get());
+}
+
+BOOST_AUTO_TEST_CASE(context_without_init)
+{
+ BOOST_CHECK_THROW(detail::context::get(), std::logic_error);
+}
+
+BOOST_AUTO_TEST_CASE(init_scope)
+{
+ {
+ svn::init svnxx_initialized;
+ BOOST_TEST(detail::context::get());
+ }
+ BOOST_CHECK_THROW(detail::context::get(), std::logic_error);
+}
+
+BOOST_AUTO_TEST_CASE(multi_init_same_context)
+{
+ svn::init svnxx_initialized_first;
+ const auto ctx = detail::context::get();
+ BOOST_REQUIRE(ctx);
+
+ {
+ svn::init svnxx_initialized_second;
+ BOOST_TEST(ctx == detail::context::get());
+ }
+
+ BOOST_TEST(ctx == detail::context::get());
+}
+
+BOOST_AUTO_TEST_SUITE_END();
Propchange: subversion/trunk/subversion/bindings/cxx/tests/test_init.cpp
------------------------------------------------------------------------------
svn:eol-style = native