| 86 | }; |
| 87 | |
| 88 | TEST_F(ConfigDictValidationTest, ConvertExpectedOutputs) { |
| 89 | const std::string json = ReadFile(testcasesPath_); |
| 90 | rapidjson::Document doc; |
| 91 | doc.Parse<rapidjson::kParseCommentsFlag | |
| 92 | rapidjson::kParseTrailingCommasFlag>(json.c_str()); |
| 93 | ASSERT_FALSE(doc.HasParseError()); |
| 94 | ASSERT_TRUE(doc.IsObject()); |
| 95 | ASSERT_TRUE(doc.HasMember("cases")); |
| 96 | const auto& cases = doc["cases"]; |
| 97 | ASSERT_TRUE(cases.IsArray()); |
| 98 | |
| 99 | size_t checkedCases = 0; |
| 100 | for (auto& testcase : cases.GetArray()) { |
| 101 | ASSERT_TRUE(testcase.IsObject()); |
| 102 | ASSERT_TRUE(testcase.HasMember("input")); |
| 103 | ASSERT_TRUE(testcase["input"].IsString()); |
| 104 | const std::string input = testcase["input"].GetString(); |
| 105 | const std::string id = |
| 106 | testcase.HasMember("id") && testcase["id"].IsString() |
| 107 | ? testcase["id"].GetString() |
| 108 | : "(unknown id)"; |
| 109 | ASSERT_TRUE(testcase.HasMember("expected")); |
| 110 | const auto& expectedObj = testcase["expected"]; |
| 111 | ASSERT_TRUE(expectedObj.IsObject()); |
| 112 | if (!expectedObj.HasMember(configName_.c_str())) { |
| 113 | continue; |
| 114 | } |
| 115 | const auto& expectedValue = expectedObj[configName_.c_str()]; |
| 116 | ASSERT_TRUE(expectedValue.IsString()) |
| 117 | << "config=" << configName_ << " case=" << id; |
| 118 | const std::string expected = expectedValue.GetString(); |
| 119 | SimpleConverter& converter = GetConverter(configName_); |
| 120 | EXPECT_EQ(expected, converter.Convert(input)) |
| 121 | << "config=" << configName_ << " case=" << id; |
| 122 | ++checkedCases; |
| 123 | } |
| 124 | EXPECT_GT(checkedCases, 0) << "No testcases found for config=" << configName_; |
| 125 | } |
| 126 | |
| 127 | } // namespace |
| 128 | } // namespace opencc |
nothing calls this directly
no test coverage detected