1 #include "TestChangesDatabase.h"
2 
3 #include <TextChanges.h>
4 #include <TextChange.h>
5 
testInsert()6 void TestChangesDatabase::testInsert()
7 {
8     TextChanges changes;
9     changes.inserted(100, "foobar");
10     const TextChange *change = changes.first();
11     QVERIFY(change);
12     QVERIFY(change->next() == 0);
13     QCOMPARE(change->before(), QString());
14     QCOMPARE(change->after(), QString("foobar"));
15     QCOMPARE(change->position(), 100);
16     QCOMPARE(change->length(), 6);
17 
18     changes.inserted(200, "lfjsdlkfjsldk");
19     QVERIFY(change->previous() == 0);
20     QVERIFY(change->next() != 0);
21     QCOMPARE(change->position(), 100);
22     const TextChange *change2 = change->next();
23     QVERIFY(change2->previous() == change);
24     QVERIFY(change2->next() == 0);
25     QVERIFY(change->previous() == 0);
26     QVERIFY(change->next() == change2);
27     QCOMPARE(change2->position(), 200);
28     QCOMPARE(change->after(), QString("foobar"));
29     QCOMPARE(change2->after(), QString("lfjsdlkfjsldk"));
30 
31     changes.inserted(20, "sldkfnvlqwepoiz");
32     const TextChange *change3 = changes.first();
33     QCOMPARE(change3, change->previous());
34     QCOMPARE(change3->next(), change);
35     QCOMPARE(change3->position(), 20);
36     QCOMPARE(change->position(), 115);
37     QCOMPARE(change2->position(), 215);
38     QCOMPARE(change3->formerPosition(), 20);
39     QCOMPARE(change->formerPosition(), 100);
40     QCOMPARE(change2->formerPosition(), 200);
41 }
42 
testRemove()43 void TestChangesDatabase::testRemove()
44 {
45     TextChanges changes;
46     changes.changed(100, "foobar", "");
47     const TextChange *change = changes.first();
48     QVERIFY(change);
49     QVERIFY(change->next() == 0);
50     QCOMPARE(change->before(), QString("foobar"));
51     QCOMPARE(change->after(), QString());
52     QCOMPARE(change->position(), 100);
53     QCOMPARE(change->length(), -6);
54 
55     changes.changed(200, "sldkjfnvs", "");
56     QVERIFY(change->next());
57     const TextChange *change2 = change->next();
58     QCOMPARE(change2->previous(), change);
59     QCOMPARE(change->next(), change2);
60     QCOMPARE(change->position(), 100);
61     QVERIFY(change2->next() == 0);
62     QVERIFY(change->previous() == 0);
63     QCOMPARE(change2->position(), 200);
64 
65     changes.changed(20, "lskejf", "");
66     const TextChange *change3 = changes.first();
67     QCOMPARE(change3->next(), change);
68     QCOMPARE(change->previous(), change3);
69     QCOMPARE(change3->position(), 20);
70     QCOMPARE(change->position(), 94);
71     QCOMPARE(change2->position(), 194);
72     QCOMPARE(change3->formerPosition(), 20);
73     QCOMPARE(change->formerPosition(), 100);
74     QCOMPARE(change2->formerPosition(), 200);
75 }
76 
testSplit()77 void TestChangesDatabase::testSplit()
78 {
79     TextChanges changes;
80     // test the insertion of a big change and then the revert of a part of that change.
81 }
82 
testMerge()83 void TestChangesDatabase::testMerge()
84 {
85     TextChanges changes;
86     changes.inserted(1, "a");
87 
88     const TextChange *change = changes.first();
89     QVERIFY(change);
90     QVERIFY(change->previous() == 0);
91     QVERIFY(change->next() == 0);
92     QCOMPARE(change->length(), 1);
93     QCOMPARE(change->after(), QString("a"));
94 
95     changes.inserted(2, "b");
96     QVERIFY(change->next() == 0);
97     QCOMPARE(change->length(), 2);
98     QCOMPARE(change->after(), QString("ab"));
99     changes.inserted(3, "c");
100     QVERIFY(change->next() == 0);
101     QCOMPARE(change->length(), 3);
102     QCOMPARE(change->after(), QString("abc"));
103     changes.inserted(4, "d");
104     QVERIFY(change->next() == 0);
105     QCOMPARE(change->length(), 4);
106     QCOMPARE(change->after(), QString("abcd"));
107     changes.inserted(2, "x");
108     QVERIFY(change->next() == 0);
109     QCOMPARE(change->length(), 5);
110     QCOMPARE(change->after(), QString("axbcd"));
111 
112     changes.changed(2, "x", "ka");
113     QVERIFY(change->next() == 0);
114     QEXPECT_FAIL("", "rest of functionality not implemented yet", Abort);
115     QCOMPARE(change->length(), 6);
116     QCOMPARE(change->after(), QString("akabcd"));
117 
118     // TODO test the insertion of 2 changes and then the insertion of a 3th that makes it 1 change total
119 
120     changes.inserted(8, "klm");
121     // means we now have;  'akabcd..klm'
122     QVERIFY(change->next() != 0);
123     changes.changed(6, "xykl", "baz");
124     // means we now have;  'akabcdbazm'
125     QVERIFY(change->next() == 0);
126     QCOMPARE(change->after(), QString("akabcdbazm"));
127 }
128 
129 QTEST_MAIN(TestChangesDatabase)
130