diff --git a/src/chimera.cpp b/src/chimera.cpp index 74d7224..2175184 100644 --- a/src/chimera.cpp +++ b/src/chimera.cpp @@ -91,7 +91,7 @@ int run(int argc, const char **argv) std::cout << "Chimera " << CHIMERA_MAJOR_VERSION << "." << CHIMERA_MINOR_VERSION << "." << CHIMERA_PATCH_VERSION << "\n\n"; - exit(0); + return 0; } } diff --git a/test/emulator.cpp b/test/emulator.cpp index 6a862e4..18d4363 100644 --- a/test/emulator.cpp +++ b/test/emulator.cpp @@ -61,7 +61,7 @@ Emulator::Emulator() } //============================================================================== -void Emulator::Run() +bool Emulator::Run() { std::vector args; args.push_back(""); @@ -92,13 +92,11 @@ void Emulator::Run() } std::vector argv = convertArgs(args); - chimera::run(static_cast(argv.size()), argv.data()); - - exit(0); + return chimera::run(static_cast(argv.size()), argv.data()) == 0; } //============================================================================== -void Emulator::Run(const std::string &args) +bool Emulator::Run(const std::string &args) { std::vector args_splits = split(args, " "); std::vector argv; @@ -106,48 +104,40 @@ void Emulator::Run(const std::string &args) for (auto &arg : args_splits) argv.push_back(arg.data()); - chimera::run(static_cast(argv.size()), argv.data()); - - exit(0); + return chimera::run(static_cast(argv.size()), argv.data()) == 0; } //============================================================================== -void Emulator::RunHelp() +bool Emulator::RunHelp() { int argc = 2; std::vector argv; argv.push_back(""); argv.push_back("--help"); - chimera::run(argc, argv.data()); - - exit(0); + return chimera::run(argc, argv.data()) == 0; } //============================================================================== -void Emulator::RunHelpList() +bool Emulator::RunHelpList() { int argc = 2; std::vector argv; argv.push_back(""); argv.push_back("--help-list"); - chimera::run(argc, argv.data()); - - exit(0); + return chimera::run(argc, argv.data()) == 0; } //============================================================================== -void Emulator::RunVersion() +bool Emulator::RunVersion() { int argc = 2; std::vector argv; argv.push_back(""); argv.push_back("--version"); - chimera::run(argc, argv.data()); - - exit(0); + return chimera::run(argc, argv.data()) == 0; } //============================================================================== diff --git a/test/emulator.h b/test/emulator.h index f0fc1e3..04997c9 100644 --- a/test/emulator.h +++ b/test/emulator.h @@ -15,13 +15,13 @@ class Emulator public: Emulator(); - void Run(); + bool Run(); - static void Run(const std::string &args); + static bool Run(const std::string &args); - static void RunHelp(); - static void RunHelpList(); - static void RunVersion(); + static bool RunHelp(); + static bool RunHelpList(); + static bool RunVersion(); void SetSource(const std::string &filename); void SetSources(const std::vector &filenames); diff --git a/test/test_emulator.cpp b/test/test_emulator.cpp index 4499f73..72211f7 100644 --- a/test/test_emulator.cpp +++ b/test/test_emulator.cpp @@ -9,15 +9,17 @@ TEST(Emulator, GeneralOptions) { testing::internal::CaptureStdout(); + // EXPECT_EXIT is used to continue running the rest of the tests. This is + // because ClangTool exits right after it prints help. Note that this makes + // the breakpoints don't work in executing the test s in EXPECT_EXIT. EXPECT_EXIT(Emulator::RunHelp(), ::testing::ExitedWithCode(0), ".*"); EXPECT_EXIT(Emulator::Run("--help"), ::testing::ExitedWithCode(0), ".*"); - EXPECT_EXIT(Emulator::RunHelpList(), ::testing::ExitedWithCode(0), ".*"); EXPECT_EXIT(Emulator::Run("--help-list"), ::testing::ExitedWithCode(0), ".*"); - EXPECT_EXIT(Emulator::RunVersion(), ::testing::ExitedWithCode(0), ".*"); - EXPECT_EXIT(Emulator::Run("--version"), ::testing::ExitedWithCode(0), ".*"); + EXPECT_TRUE(Emulator::RunVersion()); + EXPECT_TRUE(Emulator::Run("--version")); std::string output = testing::internal::GetCapturedStdout(); } @@ -30,9 +32,7 @@ TEST(Emulator, 01_Function) e.SetConfigurationFile("01_function/function_pybind11.yaml"); e.SetBinding("pybind11"); - // EXPECT_EXIT is necessary to continue to run subsequent tests, but it - // doesn't stop at the breakpoints. For debugging use e.Run() instead. - EXPECT_EXIT(e.Run(), ::testing::ExitedWithCode(0), ".*"); + EXPECT_TRUE(e.Run()); } //============================================================================== @@ -43,9 +43,7 @@ TEST(Emulator, 02_Class) e.SetConfigurationFile("02_class/class.yaml"); e.SetBinding("pybind11"); - // EXPECT_EXIT is necessary to continue to run subsequent tests, but it - // doesn't stop at the breakpoints. For debugging use e.Run() instead. - EXPECT_EXIT(e.Run(), ::testing::ExitedWithCode(0), ".*"); + EXPECT_TRUE(e.Run()); } //============================================================================== @@ -56,9 +54,7 @@ TEST(Emulator, 04_Enumeration) e.SetConfigurationFile("04_enumeration/enumeration.yaml"); e.SetBinding("pybind11"); - // EXPECT_EXIT is necessary to continue to run subsequent tests, but it - // doesn't stop at the breakpoints. For debugging use e.Run() instead. - EXPECT_EXIT(e.Run(), ::testing::ExitedWithCode(0), ".*"); + EXPECT_TRUE(e.Run()); } //============================================================================== @@ -69,9 +65,7 @@ TEST(Emulator, 20_Eigen) e.SetConfigurationFile("20_eigen/eigen_pybind11.yaml"); e.SetBinding("pybind11"); - // EXPECT_EXIT is necessary to continue to run subsequent tests, but it - // doesn't stop at the breakpoints. For debugging use e.Run() instead. - EXPECT_EXIT(e.Run(), ::testing::ExitedWithCode(0), ".*"); + EXPECT_TRUE(e.Run()); } //============================================================================== @@ -86,7 +80,5 @@ TEST(Emulator, issue228) "issue228_template_type_alias_pybind11.yaml"); e.SetBinding("pybind11"); - // EXPECT_EXIT is necessary to continue to run subsequent tests, but it - // doesn't stop at the breakpoints. For debugging use e.Run() instead. - EXPECT_EXIT(e.Run(), ::testing::ExitedWithCode(0), ".*"); + EXPECT_TRUE(e.Run()); }