From edb48b28727299d116d3a108afd0022ae3dc75f0 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sat, 22 Dec 2018 17:43:42 +0900 Subject: [PATCH] add test_error_detection to check it detects error --- tests/CMakeLists.txt | 3 +- tests/test_error_detection.cpp | 199 +++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 tests/test_error_detection.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e9eabba..2e12fe9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -26,7 +26,8 @@ set(TEST_NAMES test_from_toml test_parse_file test_parse_unicode - ) + test_error_detection +) CHECK_CXX_COMPILER_FLAG("-Wall" COMPILER_SUPPORTS_WALL) CHECK_CXX_COMPILER_FLAG("-Wpedantic" COMPILER_SUPPORTS_WPEDANTIC) diff --git a/tests/test_error_detection.cpp b/tests/test_error_detection.cpp new file mode 100644 index 0000000..da6b71f --- /dev/null +++ b/tests/test_error_detection.cpp @@ -0,0 +1,199 @@ +#define BOOST_TEST_MODULE "test_error_detection" +#ifdef UNITTEST_FRAMEWORK_LIBRARY_EXIST +#include +#else +#define BOOST_TEST_NO_LIB +#include +#endif +#include +#include +#include + +BOOST_AUTO_TEST_CASE(test_detect_empty_key) +{ + std::istringstream stream(std::string("= \"value\"")); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_empty_key"); + } + catch(const toml::syntax_error& syn) + { + // to see the error message + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_missing_value) +{ + std::istringstream stream(std::string("a =")); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_missing_value"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_too_many_value) +{ + std::istringstream stream(std::string("a = 1 = \"value\"")); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_too_many_value"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_duplicate_table) +{ + std::istringstream stream(std::string( + "[table]\n" + "a = 42\n" + "[table]\n" + "b = 42\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_duplicate_table"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_conflict_array_table) +{ + std::istringstream stream(std::string( + "[[table]]\n" + "a = 42\n" + "[table]\n" + "b = 42\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_conflict_array_table"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_conflict_table_array) +{ + std::istringstream stream(std::string( + "[table]\n" + "a = 42\n" + "[[table]]\n" + "b = 42\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_conflict_table_array"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_duplicate_value) +{ + std::istringstream stream(std::string( + "a = 1\n" + "a = 2\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_duplicate_value"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_conflicting_value) +{ + std::istringstream stream(std::string( + "a.b = 1\n" + "a.b.c = 2\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_conflicting_value"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_inhomogeneous_array) +{ + std::istringstream stream(std::string( + "a = [1, 1.0]\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_inhomogeneous_array"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} + +BOOST_AUTO_TEST_CASE(test_detect_appending_array_of_table) +{ + std::istringstream stream(std::string( + "a = [{b = 1}]\n" + "[[a]]\n" + "b = 2\n" + )); + bool exception_thrown = false; + try + { + toml::parse(stream, "test_detect_appending_array_of_table"); + } + catch(const toml::syntax_error& syn) + { + std::cerr << syn.what() << std::endl; + exception_thrown = true; + } + BOOST_CHECK(exception_thrown); +} +