summaryrefslogtreecommitdiffhomepage
path: root/tests/test-diff.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-diff.cpp')
-rw-r--r--tests/test-diff.cpp199
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
+}
+