#include "ConfigTestBase.hpp"
#include "ConversionInspection.hpp"
#include "Segments.hpp"
#include "SimpleConverter.hpp"
#include "TestUtilsUTF8.hpp"
namespace opencc {
class SegmentsToVectorTest : public ::testing::Test {};
TEST_F(SegmentsToVectorTest, ManagedSegments) {
Segments segs;
segs.AddSegment(std::string("hello"));
segs.AddSegment(std::string("world"));
const auto vec = segs.ToVector();
ASSERT_EQ(2u, vec.size());
EXPECT_EQ("hello", vec[0]);
EXPECT_EQ("world", vec[1]);
}
TEST_F(SegmentsToVectorTest, UnmanagedSegments) {
const char* a = "foo";
const char* b = "bar";
Segments segs;
segs.AddSegment(a);
segs.AddSegment(b);
const auto vec = segs.ToVector();
ASSERT_EQ(2u, vec.size());
EXPECT_EQ("foo", vec[0]);
EXPECT_EQ("bar", vec[1]);
}
TEST_F(SegmentsToVectorTest, MixedSegments) {
const char* a = "unmanaged";
Segments segs;
segs.AddSegment(a);
segs.AddSegment(std::string("managed"));
segs.AddSegment(a);
const auto vec = segs.ToVector();
ASSERT_EQ(3u, vec.size());
EXPECT_EQ("unmanaged", vec[0]);
EXPECT_EQ("managed", vec[1]);
EXPECT_EQ("unmanaged", vec[2]);
}
TEST_F(SegmentsToVectorTest, EmptySegments) {
Segments segs;
const auto vec = segs.ToVector();
EXPECT_TRUE(vec.empty());
}
class ConversionInspectionTest : public ConfigTestBase {
protected:
ConversionInspectionTest() {}
};
TEST_F(ConversionInspectionTest, OutputMatchesConvert) {
const SimpleConverter converter(CONFIG_TEST_JSON_PATH);
const std::string text = utf8("燕燕于飞差池其羽之子于归远送于野");
const ConversionInspectionResult result = converter.Inspect(text);
const std::string converted = converter.Convert(text);
EXPECT_EQ(converted, result.output);
}
TEST_F(ConversionInspectionTest, InputPreserved) {
const SimpleConverter converter(CONFIG_TEST_JSON_PATH);
const std::string text = utf8("燕燕于飞差池其羽之子于归远送于野");
const ConversionInspectionResult result = converter.Inspect(text);
EXPECT_EQ(text, result.input);
}
TEST_F(ConversionInspectionTest, SegmentsNonEmpty) {
const SimpleConverter converter(CONFIG_TEST_JSON_PATH);
const std::string text = utf8("燕燕于飞差池其羽之子于归远送于野");
const ConversionInspectionResult result = converter.Inspect(text);
EXPECT_FALSE(result.segments.empty());
std::string joined;
for (const auto& s : result.segments) {
joined += s;
}
EXPECT_EQ(text, joined);
}
TEST_F(ConversionInspectionTest, StagesCountMatchesChain) {
const SimpleConverter converter(CONFIG_TEST_JSON_PATH);
const std::string text = utf8("燕燕于飞差池其羽之子于归远送于野");
const ConversionInspectionResult result = converter.Inspect(text);
EXPECT_EQ(1u, result.stages.size());
}
TEST_F(ConversionInspectionTest, StageIndexStartsAtOne) {
const SimpleConverter converter(CONFIG_TEST_JSON_PATH);
const std::string text = utf8("燕燕于飞差池其羽之子于归远送于野");
const ConversionInspectionResult result = converter.Inspect(text);
ASSERT_FALSE(result.stages.empty());
EXPECT_EQ(1u, result.stages[0].index);
}
TEST_F(ConversionInspectionTest, EmptyInput) {
const SimpleConverter converter(CONFIG_TEST_JSON_PATH);
const ConversionInspectionResult result = converter.Inspect("");
EXPECT_EQ("", result.input);
EXPECT_EQ("", result.output);
std::string joined;
for (const auto& s : result.segments) {
joined += s;
}
EXPECT_EQ("", joined);
}
}