diff options
Diffstat (limited to 'akregator/src/mk4storage/metakit/tests/tstore2.cpp')
-rw-r--r-- | akregator/src/mk4storage/metakit/tests/tstore2.cpp | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/tests/tstore2.cpp b/akregator/src/mk4storage/metakit/tests/tstore2.cpp new file mode 100644 index 00000000..371ffcca --- /dev/null +++ b/akregator/src/mk4storage/metakit/tests/tstore2.cpp @@ -0,0 +1,326 @@ +// tstore2.cpp -- Regression test program, storage tests, part 2 +// $Id$ +// This is part of Metakit, see http://www.equi4.com/metakit/ + +#include "regress.h" + +void TestStores2() +{ + B(s10, Stream storage, 0) W(s10a); W(s10b); W(s10c); + { + // s10a is original + // s10b is a copy, random access + // s10c is a serialized copy + c4_StringProp p1 ("p1"); + c4_ViewProp p2 ("p2"); + c4_IntProp p3 ("p3"); + { + c4_Storage s1 ("s10a", 1); + s1.SetStructure("a[p1:S,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + v1.Add(p1 ["one"]); + v1.Add(p1 ["two"]); + c4_View v2 = p2 (v1[0]); + v2.Add(p3 [1]); + v2 = p2 (v1[1]); + v2.Add(p3 [11]); + v2.Add(p3 [22]); + v1.InsertAt(1, p1 ["three"]); + v2 = p2 (v1[1]); + v2.Add(p3 [111]); + v2.Add(p3 [222]); + v2.Add(p3 [333]); + s1.Commit(); + } + { + c4_Storage s1 ("s10a", 0); + c4_Storage s2 ("s10b", 1); + s2.SetStructure("a[p1:S,p2[p3:I]]"); + s2.View("a") = s1.View("a"); + s2.Commit(); + } + { + c4_Storage s3 ("s10b", 0); + + c4_FileStream fs1 (fopen("s10c", "wb"), true); + s3.SaveTo(fs1); + } + { + c4_Storage s1 ("s10c", 0); // new after 2.01: serialized is no longer special + + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 3); + c4_View v2 = p2 (v1[0]); + A(v2.GetSize() == 1); + c4_View v3 = p2 (v1[1]); + A(v3.GetSize() == 3); + c4_View v4 = p2 (v1[2]); + A(v4.GetSize() == 2); + } + { + c4_Storage s1; + + c4_FileStream fs1 (fopen("s10c", "rb"), true); + s1.LoadFrom(fs1); + + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 3); + c4_View v2 = p2 (v1[0]); + A(v2.GetSize() == 1); + c4_View v3 = p2 (v1[1]); + A(v3.GetSize() == 3); + c4_View v4 = p2 (v1[2]); + A(v4.GetSize() == 2); + } + { + c4_Storage s1 ("s10c", 1); + + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 3); + c4_View v2 = p2 (v1[0]); + A(v2.GetSize() == 1); + c4_View v3 = p2 (v1[1]); + A(v3.GetSize() == 3); + c4_View v4 = p2 (v1[2]); + A(v4.GetSize() == 2); + v1.Add(p1 ["four"]); + s1.Commit(); + } + { + c4_Storage s1 ("s10c", 0); + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 4); + c4_View v2 = p2 (v1[0]); + A(v2.GetSize() == 1); + c4_View v3 = p2 (v1[1]); + A(v3.GetSize() == 3); + c4_View v4 = p2 (v1[2]); + A(v4.GetSize() == 2); + c4_View v5 = p2 (v1[3]); + A(v5.GetSize() == 0); + } + } D(s10a); D(s10b); D(s10c); R(s10a); R(s10b); R(s10c); E; + + B(s11, Commit and rollback, 0) W(s11a); + { + c4_IntProp p1 ("p1"); + { + c4_Storage s1 ("s11a", 1); + s1.SetStructure("a[p1:I]"); + c4_View v1 = s1.View("a"); + v1.Add(p1 [123]); + s1.Commit(); + } + { + c4_Storage s1 ("s11a", 0); + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 123); + v1.InsertAt(0, p1 [234]); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 234); + A(p1 (v1[1]) == 123); + s1.Rollback(); + // 19990916 - semantics changed, still 2 rows, but 0 props + A(v1.GetSize() == 2); + A(v1.NumProperties() == 0); + v1 = s1.View("a"); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 123); + } + } D(s11a); R(s11a); E; + + B(s12, Remove subview, 0) W(s12a); + { + c4_IntProp p1 ("p1"), p3 ("p3"); + c4_ViewProp p2 ("p2"); + { + c4_Storage s1 ("s12a", 1); + s1.SetStructure("a[p1:I,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + c4_View v2; + v2.Add(p3 [234]); + v1.Add(p1 [123] + p2 [v2]); + s1.Commit(); + } + { + c4_Storage s1 ("s12a", 1); + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 123); + c4_View v2 = p2 (v1[0]); + A(v2.GetSize() == 1); + A(p3 (v2[0]) == 234); + v1.RemoveAt(0); + A(v1.GetSize() == 0); + s1.Commit(); + A(v1.GetSize() == 0); + } + } D(s12a); R(s12a); E; + + B(s13, Remove middle subview, 0) W(s13a); + { + c4_IntProp p1 ("p1"), p3 ("p3"); + c4_ViewProp p2 ("p2"); + { + c4_Storage s1 ("s13a", 1); + s1.SetStructure("a[p1:I,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + + c4_View v2a; + v2a.Add(p3 [234]); + v1.Add(p1 [123] + p2 [v2a]); + + c4_View v2b; + v2b.Add(p3 [345]); + v2b.Add(p3 [346]); + v1.Add(p1 [124] + p2 [v2b]); + + c4_View v2c; + v2c.Add(p3 [456]); + v2c.Add(p3 [457]); + v2c.Add(p3 [458]); + v1.Add(p1 [125] + p2 [v2c]); + + s1.Commit(); + } + { + c4_Storage s1 ("s13a", 1); + c4_View v1 = s1.View("a"); + A(v1.GetSize() == 3); + A(p1 (v1[0]) == 123); + A(p1 (v1[1]) == 124); + A(p1 (v1[2]) == 125); + c4_View v2a = p2 (v1[0]); + A(v2a.GetSize() == 1); + A(p3 (v2a[0]) == 234); + c4_View v2b = p2 (v1[1]); + A(v2b.GetSize() == 2); + A(p3 (v2b[0]) == 345); + c4_View v2c = p2 (v1[2]); + A(v2c.GetSize() == 3); + A(p3 (v2c[0]) == 456); + v1.RemoveAt(1); + A(v1.GetSize() == 2); + v2a = p2 (v1[0]); + A(v2a.GetSize() == 1); + A(p3 (v2a[0]) == 234); + v2b = p2 (v1[1]); + A(v2b.GetSize() == 3); + A(p3 (v2b[0]) == 456); + s1.Commit(); + A(v1.GetSize() == 2); + A(p1 (v1[0]) == 123); + A(p1 (v1[1]) == 125); + } + } D(s13a); R(s13a); E; + + B(s14, Replace attached subview, 0) W(s14a); + { + c4_IntProp p1 ("p1"); + c4_ViewProp p2 ("p2"); + { + c4_Storage s1 ("s14a", 1); + s1.SetStructure("a[p1:I,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + + v1.Add(p1 [123] + p2 [c4_View ()]); + A(v1.GetSize() == 1); + + v1[0] = p2 [c4_View ()]; + A(v1.GetSize() == 1); + A(p1 (v1[0]) == 0); + + s1.Commit(); + } + } D(s14a); R(s14a); E; + + B(s15, Add after removed subviews, 0) W(s15a); + { + c4_IntProp p1 ("p1"), p3 ("p3"); + c4_ViewProp p2 ("p2"); + { + c4_Storage s1 ("s15a", 1); + s1.SetStructure("a[p1:I,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + + c4_View v2; + v2.Add(p3 [234]); + + v1.Add(p1 [123] + p2 [v2]); + v1.Add(p1 [456] + p2 [v2]); + v1.Add(p1 [789] + p2 [v2]); + A(v1.GetSize() == 3); + + v1[0] = v1[2]; + v1.RemoveAt(2); + + v1[0] = v1[1]; + v1.RemoveAt(1); + + v1.RemoveAt(0); + + v1.Add(p1 [111] + p2 [v2]); + + s1.Commit(); + } + } D(s15a); R(s15a); E; + + B(s16, Add after removed ints, 0) W(s16a); + { + c4_IntProp p1 ("p1"); + + c4_Storage s1 ("s16a", 1); + s1.SetStructure("a[p1:I,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + + v1.Add(p1 [1]); + v1.Add(p1 [2]); + v1.Add(p1 [3]); + + v1.RemoveAt(2); + v1.RemoveAt(1); + v1.RemoveAt(0); + + v1.Add(p1 [4]); + + s1.Commit(); + + } D(s16a); R(s16a); E; + + B(s17, Add after removed strings, 0) W(s17a); + { + c4_StringProp p1 ("p1"); + + c4_Storage s1 ("s17a", 1); + s1.SetStructure("a[p1:S,p2[p3:I]]"); + c4_View v1 = s1.View("a"); + + v1.Add(p1 ["one"]); + v1.Add(p1 ["two"]); + v1.Add(p1 ["three"]); + + v1.RemoveAt(2); + v1.RemoveAt(1); + v1.RemoveAt(0); + + v1.Add(p1 ["four"]); + + s1.Commit(); + + } D(s17a); R(s17a); E; + + B(s18, Empty storage, 0) W(s18a); + { + c4_Storage s1 ("s18a", 1); + + } D(s18a); R(s18a); E; + + B(s19, Empty view outlives storage, 0) W(s19a); + { + c4_View v1; + c4_Storage s1 ("s19a", 1); + v1 = s1.GetAs("a[p1:I,p2:S]"); + + } D(s19a); R(s19a); E; +} |