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