diff options
author | Roland Reichwein <mail@reichwein.it> | 2023-02-26 08:54:17 +0100 |
---|---|---|
committer | Roland Reichwein <mail@reichwein.it> | 2023-02-26 08:54:17 +0100 |
commit | c9fa963e71258c5adfb71cf1996cd1bcb33df0bb (patch) | |
tree | a40d2260bf03ea5adfca798aef5d49d6a1984cad /tests/test-diff.cpp |
Start with copy of whiteboard
Diffstat (limited to 'tests/test-diff.cpp')
-rw-r--r-- | tests/test-diff.cpp | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/tests/test-diff.cpp b/tests/test-diff.cpp new file mode 100644 index 0000000..d09c58e --- /dev/null +++ b/tests/test-diff.cpp @@ -0,0 +1,199 @@ +#include <gtest/gtest.h> + +#include <filesystem> +#include <string> +#include <system_error> + +#include <stdlib.h> + +#include <boost/property_tree/ptree.hpp> + +#include "libreichwein/file.h" + +#include "diff.h" + +namespace fs = std::filesystem; +namespace pt = boost::property_tree; +using namespace Reichwein; + +class DiffTest: public ::testing::Test +{ +protected: + DiffTest(){ + } + + ~DiffTest(){ + } +}; + +TEST_F(DiffTest, constructor) +{ + // empty constructor + { + Diff d{}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data/></diff>"); + } + + // constructor via xml diff + { + EXPECT_THROW(Diff d{""}, std::exception); + } + { + EXPECT_THROW(Diff d{"<diff><begin></begin></diff>"}, std::exception); + EXPECT_THROW(Diff d{"<diff><end>0</end><data>abc</data></diff>"}, std::exception); + EXPECT_THROW(Diff d{"<diff><start>0</start><data>abc</data></diff>"}, std::exception); + EXPECT_THROW(Diff d{"<diff><start>0</start><end>0</end></diff>"}, std::exception); + EXPECT_THROW(Diff d{"<diff><start>5</start><end>0</end><data>abc</data></diff>"}, std::exception); + EXPECT_THROW(Diff d{"<diff><start></start><end>0</end><data>abc</data></diff>"}, std::exception); + } + + { + Diff d{"<diff><start>0</start><end>0</end><data>abc</data></diff>"}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data>abc</data></diff>"); + } + + { + Diff d{"<diff><start>5</start><end>5</end><data>abc</data></diff>"}; + EXPECT_EQ(d.get_xml(), "<diff><start>5</start><end>5</end><data>abc</data></diff>"); + } + + { + Diff d{"<diff><start>5</start><end>50</end><data>abc</data></diff>"}; + EXPECT_EQ(d.get_xml(), "<diff><start>5</start><end>50</end><data>abc</data></diff>"); + } + + // constructor via ptree + { + pt::ptree ptree; + EXPECT_THROW(Diff d{ptree}, std::exception); + + ptree.put("diff.start", 0); + ptree.put("diff.end", 0); + ptree.put("diff.data", "abc"); + Diff d{ptree}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data>abc</data></diff>"); + } + + // constructor via versions + { + Diff d{"", ""}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data/></diff>"); + } + { + Diff d{"a", "a"}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data/></diff>"); + } + { + Diff d{"a", "b"}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>1</end><data>b</data></diff>"); + } + { + Diff d{"0a1", "0b1"}; + EXPECT_EQ(d.get_xml(), "<diff><start>1</start><end>2</end><data>b</data></diff>"); + } + { + Diff d{"0abc1", "00b01"}; + EXPECT_EQ(d.get_xml(), "<diff><start>1</start><end>4</end><data>0b0</data></diff>"); + } + { + Diff d{"0ab1", "00b01"}; + EXPECT_EQ(d.get_xml(), "<diff><start>1</start><end>3</end><data>0b0</data></diff>"); + } + { + Diff d{"0abc1", "00b1"}; + EXPECT_EQ(d.get_xml(), "<diff><start>1</start><end>4</end><data>0b</data></diff>"); + } + { + Diff d{"0abc1", ""}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>5</end><data/></diff>"); + } + { + Diff d{"bc1", "0abc1"}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data>0a</data></diff>"); + } + { + Diff d{"0abc1", "0ab"}; + EXPECT_EQ(d.get_xml(), "<diff><start>3</start><end>5</end><data/></diff>"); + } + { + Diff d{"0abc1", "0abc123"}; + EXPECT_EQ(d.get_xml(), "<diff><start>5</start><end>5</end><data>23</data></diff>"); + } + { + Diff d{"0abc1", "010abc1"}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>0</end><data>01</data></diff>"); + } + { + Diff d{"0abc1", "0ac1"}; + EXPECT_EQ(d.get_xml(), "<diff><start>2</start><end>3</end><data/></diff>"); + } + { + Diff d{"0abc1", "0abxc1"}; + EXPECT_EQ(d.get_xml(), "<diff><start>3</start><end>3</end><data>x</data></diff>"); + } + { + Diff d{"abc", "c"}; + EXPECT_EQ(d.get_xml(), "<diff><start>0</start><end>2</end><data/></diff>"); + } + { + Diff d{"aaaa", "aa"}; + EXPECT_EQ(d.get_xml(), "<diff><start>2</start><end>4</end><data/></diff>"); + } + { + Diff d{"baaaa", "baa"}; + EXPECT_EQ(d.get_xml(), "<diff><start>3</start><end>5</end><data/></diff>"); + } + { + Diff d{"baaaab", "baab"}; + EXPECT_EQ(d.get_xml(), "<diff><start>1</start><end>3</end><data/></diff>"); + } + { + Diff d{"baaaab", "baaaaaaab"}; + EXPECT_EQ(d.get_xml(), "<diff><start>1</start><end>1</end><data>aaa</data></diff>"); + } +} + +TEST_F(DiffTest, empty) +{ + { + Diff d; + EXPECT_TRUE(d.empty()); + } + + { + Diff d{"<diff><start>1</start><end>3</end><data/></diff>"}; + EXPECT_FALSE(d.empty()); + } + + { + Diff d{"<diff><start>1</start><end>1</end><data/></diff>"}; + EXPECT_TRUE(d.empty()); + } + + { + Diff d{"<diff><start>1</start><end>1</end><data>abc</data></diff>"}; + EXPECT_FALSE(d.empty()); + } + + { + Diff d{"<diff><start>0</start><end>0</end><data/></diff>"}; + EXPECT_TRUE(d.empty()); + } +} + +TEST_F(DiffTest, diff_create) +{ + const char* result {diff_create("0abc1", "0ab")}; + + EXPECT_EQ(std::string(result), "<diff><start>3</start><end>5</end><data/></diff>"); + free((void*)result); // this will be done by javascript side in real scenario +} + +TEST_F(DiffTest, diff_apply) +{ + const char* result {diff_apply("0abc1", "<diff><start>3</start><end>5</end><data/></diff>")}; + + EXPECT_EQ(std::string(result), "0ab"); + free((void*)result); // this will be done by javascript side in real scenario +} + |