#include #include #include #include #include #include "libreichwein/file.h" #include "diff.h" namespace fs = std::filesystem; using namespace Reichwein; class DiffTest: public ::testing::Test { protected: DiffTest(){ } ~DiffTest(){ } }; TEST_F(DiffTest, constructor) { // empty constructor { Diff d{}; EXPECT_EQ(d.get_xml(), "00"); } // constructor via xml diff { EXPECT_THROW(Diff d{""}, std::exception); } { EXPECT_THROW(Diff d{""}, std::exception); EXPECT_THROW(Diff d{"0abc"}, std::exception); EXPECT_THROW(Diff d{"0abc"}, std::exception); EXPECT_THROW(Diff d{"00"}, std::exception); EXPECT_THROW(Diff d{"50abc"}, std::exception); EXPECT_THROW(Diff d{"0abc"}, std::exception); } { Diff d{"00abc"}; EXPECT_EQ(d.get_xml(), "00abc"); } { Diff d{"55abc"}; EXPECT_EQ(d.get_xml(), "55abc"); } { Diff d{"550abc"}; EXPECT_EQ(d.get_xml(), "550abc"); } // constructor via versions { Diff d{"", ""}; EXPECT_EQ(d.get_xml(), "00"); } { Diff d{"a", "a"}; EXPECT_EQ(d.get_xml(), "00"); } { Diff d{"a", "b"}; EXPECT_EQ(d.get_xml(), "01b"); } { Diff d{"0a1", "0b1"}; EXPECT_EQ(d.get_xml(), "12b"); } { Diff d{"0abc1", "00b01"}; EXPECT_EQ(d.get_xml(), "140b0"); } { Diff d{"0ab1", "00b01"}; EXPECT_EQ(d.get_xml(), "130b0"); } { Diff d{"0abc1", "00b1"}; EXPECT_EQ(d.get_xml(), "140b"); } { Diff d{"0abc1", ""}; EXPECT_EQ(d.get_xml(), "05"); } { Diff d{"bc1", "0abc1"}; EXPECT_EQ(d.get_xml(), "000a"); } { Diff d{"0abc1", "0ab"}; EXPECT_EQ(d.get_xml(), "35"); } { Diff d{"0abc1", "0abc123"}; EXPECT_EQ(d.get_xml(), "5523"); } { Diff d{"0abc1", "010abc1"}; EXPECT_EQ(d.get_xml(), "0001"); } { Diff d{"0abc1", "0ac1"}; EXPECT_EQ(d.get_xml(), "23"); } { Diff d{"0abc1", "0abxc1"}; EXPECT_EQ(d.get_xml(), "33x"); } { Diff d{"abc", "c"}; EXPECT_EQ(d.get_xml(), "02"); } } TEST_F(DiffTest, diff_create) { const char* result {diff_create("0abc1", "0ab")}; EXPECT_EQ(std::string(result), "35"); free((void*)result); // this will be done by javascript side in real scenario } TEST_F(DiffTest, diff_apply) { const char* result {diff_apply("0abc1", "35")}; EXPECT_EQ(std::string(result), "0ab"); free((void*)result); // this will be done by javascript side in real scenario }