From 5633812ca77f35e52db62e7b432761e0e59253fe Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 9 Jun 2016 17:19:23 +0200 Subject: Removed Object class and temporary test dependencies (bzr r14954.1.4) --- testfiles/src/object-set-test.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index ff341b162..b0d236128 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -9,11 +9,10 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #include +#include #include "object-set.h" -#include "document.h" -#include "xml/simple-document.h" -class ObjectSetTest: public testing::Test { +class ObjectSetTest: public DocPerCaseTest { public: ObjectSetTest() { A = new SPObject(); @@ -71,10 +70,7 @@ TEST_F(ObjectSetTest, Basics) { TEST_F(ObjectSetTest, Autoremoving) { SPObject* Q = new SPObject(); - // TODO temporary - SPDocument *document = new SPDocument(); - Inkscape::XML::Node *rroot = new Inkscape::XML::SimpleDocument(); - Q->invoke_build(document, rroot, 0); + Q->invoke_build(_doc, _doc->rroot, 1); set.add(Q); EXPECT_TRUE(set.contains(Q)); EXPECT_EQ(1, set.size()); @@ -172,10 +168,7 @@ TEST_F(ObjectSetTest, Removing) { TEST_F(ObjectSetTest, TwoSets) { SPObject* Q = new SPObject(); - // TODO temporary - SPDocument *document = new SPDocument(); - Inkscape::XML::Node *rroot = new Inkscape::XML::SimpleDocument(); - Q->invoke_build(document, rroot, 0); + Q->invoke_build(_doc, _doc->rroot, 1); A->attach(B, nullptr); A->attach(Q, nullptr); set.add(A); -- cgit v1.2.3 From 1636c1dd1651780d01759676b194312529f211f7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sat, 25 Jun 2016 22:24:26 +0200 Subject: Moved next functions, added namespace, renamed range functions (bzr r14954.1.10) --- testfiles/src/object-set-test.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index e319a1a6b..ea953ac27 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -12,6 +12,8 @@ #include #include "object-set.h" +using namespace Inkscape; + class ObjectSetTest: public DocPerCaseTest { public: ObjectSetTest() { @@ -196,11 +198,11 @@ TEST_F(ObjectSetTest, SetOrder) { set->add(E); set->add(C); EXPECT_EQ(5, set->size()); - auto it = set->range().begin(); + auto it = set->objects().begin(); EXPECT_EQ(A, *it++); EXPECT_EQ(D, *it++); EXPECT_EQ(B, *it++); EXPECT_EQ(E, *it++); EXPECT_EQ(C, *it++); - EXPECT_EQ(set->range().end(), it); + EXPECT_EQ(set->objects().end(), it); } \ No newline at end of file -- cgit v1.2.3 From a51df2ab1eb079b2588ccb9398440f403d11c34d Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 27 Jun 2016 16:59:48 +0200 Subject: Added more tests (bzr r14954.1.11) --- testfiles/src/object-set-test.cpp | 105 ++++++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 16 deletions(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index ea953ac27..e294a5a51 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -10,6 +10,8 @@ */ #include #include +#include +#include #include "object-set.h" using namespace Inkscape; @@ -67,11 +69,98 @@ TEST_F(ObjectSetTest, Basics) { EXPECT_TRUE(set->includes(C)); EXPECT_FALSE(set->includes(D)); EXPECT_FALSE(set->includes(X)); + EXPECT_FALSE(set->includes(nullptr)); set->remove(A); EXPECT_EQ(2, set->size()); EXPECT_FALSE(set->includes(A)); set->clear(); EXPECT_EQ(0, set->size()); + bool resultNull = set->add(nullptr); + EXPECT_FALSE(resultNull); + EXPECT_EQ(0, set->size()); + bool resultNull2 = set->remove(nullptr); + EXPECT_FALSE(resultNull2); +} + +TEST_F(ObjectSetTest, Advanced) { + set->add(A); + set->add(B); + set->add(C); + EXPECT_TRUE(set->includes(C)); + set->toggle(C); + EXPECT_EQ(2, set->size()); + EXPECT_FALSE(set->includes(C)); + set->toggle(D); + EXPECT_EQ(3, set->size()); + EXPECT_TRUE(set->includes(D)); + set->toggle(D); + EXPECT_EQ(2, set->size()); + EXPECT_FALSE(set->includes(D)); + EXPECT_EQ(nullptr, set->single()); + set->set(X); + EXPECT_EQ(1, set->size()); + EXPECT_TRUE(set->includes(X)); + EXPECT_EQ(X, set->single()); + EXPECT_FALSE(set->isEmpty()); + set->clear(); + EXPECT_TRUE(set->isEmpty()); + std::vector list1 {A, B, C, D}; + std::vector list2 {E, F}; + set->addList(list1); + EXPECT_EQ(4, set->size()); + set->addList(list2); + EXPECT_EQ(6, set->size()); + EXPECT_TRUE(set->includes(A)); + EXPECT_TRUE(set->includes(B)); + EXPECT_TRUE(set->includes(C)); + EXPECT_TRUE(set->includes(D)); + EXPECT_TRUE(set->includes(E)); + EXPECT_TRUE(set->includes(F)); + set->setList(list2); + EXPECT_EQ(2, set->size()); + EXPECT_TRUE(set->includes(E)); + EXPECT_TRUE(set->includes(F)); +} + +TEST_F(ObjectSetTest, Items) { + SPRect* rect10x100 = (SPRect *) SPFactory::createObject("svg:rect"); +// rect10x100->invoke_build(_doc, _doc->rroot, 1); + SPRect* rect20x40 = (SPRect *) SPFactory::createObject("svg:rect"); +// rect20x40->invoke_build(_doc, _doc->rroot, 1); +// SPRect* rect30x30 = (SPRect *) SPFactory::createObject("svg:rect"); +// rect30x30->invoke_build(_doc, _doc->rroot, 1); +// rect10x100->width = 10; +// rect10x100->height = 100; +// rect20x40->width = 20; +// rect20x40->height = 40; +// rect30x30->width = 30; +// rect30x30->height = 30; + set->add(rect10x100); + EXPECT_EQ(rect10x100, set->singleItem()); + EXPECT_EQ(rect10x100->getRepr(), set->singleRepr()); + set->add(rect20x40); + EXPECT_EQ(nullptr, set->singleItem()); + EXPECT_EQ(nullptr, set->singleRepr()); +// set->add(rect30x30); +// EXPECT_EQ(3, set->size()); +// EXPECT_EQ(rect10x100, set->smallestItem(ObjectSet::CompareSize::HORIZONTAL)); +// EXPECT_EQ(rect30x30, set->smallestItem(ObjectSet::CompareSize::VERTICAL)); +// EXPECT_EQ(rect20x40, set->smallestItem(ObjectSet::CompareSize::AREA)); +// EXPECT_EQ(rect30x30, set->largestItem(ObjectSet::CompareSize::HORIZONTAL)); +// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::VERTICAL)); +// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::AREA)); +} + +TEST_F(ObjectSetTest, Ranges) { + std::vector objs {A, D, B, E, C, F}; + set->add(objs.begin() + 1, objs.end() - 1); + EXPECT_EQ(4, set->size()); + auto it = set->objects().begin(); + EXPECT_EQ(D, *it++); + EXPECT_EQ(B, *it++); + EXPECT_EQ(E, *it++); + EXPECT_EQ(C, *it++); + EXPECT_EQ(set->objects().end(), it); } TEST_F(ObjectSetTest, Autoremoving) { @@ -190,19 +279,3 @@ TEST_F(ObjectSetTest, SetRemoving) { EXPECT_STREQ(nullptr, A->getId()); EXPECT_STREQ(nullptr, C->getId()); } - -TEST_F(ObjectSetTest, SetOrder) { - set->add(A); - set->add(D); - set->add(B); - set->add(E); - set->add(C); - EXPECT_EQ(5, set->size()); - auto it = set->objects().begin(); - EXPECT_EQ(A, *it++); - EXPECT_EQ(D, *it++); - EXPECT_EQ(B, *it++); - EXPECT_EQ(E, *it++); - EXPECT_EQ(C, *it++); - EXPECT_EQ(set->objects().end(), it); -} \ No newline at end of file -- cgit v1.2.3 From 22262f2db6747eb516283b92abcfd348c700911a Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Fri, 1 Jul 2016 20:57:32 +0200 Subject: Added xmlNodes as range function (bzr r14954.1.12) --- testfiles/src/object-set-test.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index e294a5a51..ea3471bf0 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -13,6 +13,7 @@ #include #include #include "object-set.h" +#include using namespace Inkscape; @@ -123,6 +124,8 @@ TEST_F(ObjectSetTest, Advanced) { } TEST_F(ObjectSetTest, Items) { + // cannot test smallestItem and largestItem functions due to too many dependencies + // uncomment if the problem is fixed SPRect* rect10x100 = (SPRect *) SPFactory::createObject("svg:rect"); // rect10x100->invoke_build(_doc, _doc->rroot, 1); SPRect* rect20x40 = (SPRect *) SPFactory::createObject("svg:rect"); @@ -161,6 +164,18 @@ TEST_F(ObjectSetTest, Ranges) { EXPECT_EQ(E, *it++); EXPECT_EQ(C, *it++); EXPECT_EQ(set->objects().end(), it); + SPObject* rect1 = SPFactory::createObject("svg:rect"); + SPObject* rect2 = SPFactory::createObject("svg:rect"); + SPObject* rect3 = SPFactory::createObject("svg:rect"); + set->add(rect1); + set->add(rect2); + set->add(rect3); + EXPECT_EQ(7, set->size()); + auto xmlNode = set->xmlNodes().begin(); + EXPECT_EQ(rect1->getRepr(), *xmlNode++); + EXPECT_EQ(rect2->getRepr(), *xmlNode++); + EXPECT_EQ(rect3->getRepr(), *xmlNode++); + EXPECT_EQ(set->xmlNodes().end(), xmlNode); } TEST_F(ObjectSetTest, Autoremoving) { -- cgit v1.2.3 From da0dcbcc4053c9e9c693f31189b4676768e07abc Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sun, 3 Jul 2016 21:13:47 +0200 Subject: Added tests (bzr r14954.1.15) --- testfiles/src/object-set-test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index ea3471bf0..a745ace29 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -172,10 +172,17 @@ TEST_F(ObjectSetTest, Ranges) { set->add(rect3); EXPECT_EQ(7, set->size()); auto xmlNode = set->xmlNodes().begin(); + EXPECT_EQ(3, boost::distance(set->xmlNodes())); EXPECT_EQ(rect1->getRepr(), *xmlNode++); EXPECT_EQ(rect2->getRepr(), *xmlNode++); EXPECT_EQ(rect3->getRepr(), *xmlNode++); EXPECT_EQ(set->xmlNodes().end(), xmlNode); + auto item = set->items().begin(); + EXPECT_EQ(3, boost::distance(set->items())); + EXPECT_EQ(rect1, *item++); + EXPECT_EQ(rect2, *item++); + EXPECT_EQ(rect3, *item++); + EXPECT_EQ(set->items().end(), item); } TEST_F(ObjectSetTest, Autoremoving) { -- cgit v1.2.3 From af9a8fb23a525dc0392890762651f315b32544e8 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Tue, 5 Jul 2016 13:49:26 +0200 Subject: Added simple test for SPObject (bzr r14954.1.16) --- testfiles/src/object-set-test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index a745ace29..7d79eb3b8 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -12,7 +12,7 @@ #include #include #include -#include "object-set.h" +#include #include using namespace Inkscape; -- cgit v1.2.3 From ff4fbbc93f67afd6cbf851691833a50d6c76b350 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 27 Jul 2016 12:19:03 +0200 Subject: Renamed some functions, fixed tests (bzr r14954.1.28) --- testfiles/src/object-set-test.cpp | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index 7d79eb3b8..79a49488a 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -14,8 +14,11 @@ #include #include #include +#include +#include using namespace Inkscape; +using namespace Inkscape::XML; class ObjectSetTest: public DocPerCaseTest { public: @@ -31,6 +34,25 @@ public: X = new SPObject(); set = new ObjectSet(); set2 = new ObjectSet(); + auto sd = new SimpleDocument(); + auto xt = new TextNode(Util::share_string("x"), sd); + auto ht = new TextNode(Util::share_string("h"), sd); + auto gt = new TextNode(Util::share_string("g"), sd); + auto ft = new TextNode(Util::share_string("f"), sd); + auto et = new TextNode(Util::share_string("e"), sd); + auto dt = new TextNode(Util::share_string("d"), sd); + auto ct = new TextNode(Util::share_string("c"), sd); + auto bt = new TextNode(Util::share_string("b"), sd); + auto at = new TextNode(Util::share_string("a"), sd); + X->invoke_build(_doc, xt, 0); + H->invoke_build(_doc, ht, 0); + G->invoke_build(_doc, gt, 0); + F->invoke_build(_doc, ft, 0); + E->invoke_build(_doc, et, 0); + D->invoke_build(_doc, dt, 0); + C->invoke_build(_doc, ct, 0); + B->invoke_build(_doc, bt, 0); + A->invoke_build(_doc, at, 0); } ~ObjectSetTest() { delete set; @@ -186,12 +208,10 @@ TEST_F(ObjectSetTest, Ranges) { } TEST_F(ObjectSetTest, Autoremoving) { - SPObject* Q = new SPObject(); - Q->invoke_build(_doc, _doc->rroot, 1); - set->add(Q); - EXPECT_TRUE(set->includes(Q)); + set->add(A); + EXPECT_TRUE(set->includes(A)); EXPECT_EQ(1, set->size()); - Q->releaseReferences(); + A->releaseReferences(); EXPECT_EQ(0, set->size()); } @@ -272,20 +292,18 @@ TEST_F(ObjectSetTest, Removing) { } TEST_F(ObjectSetTest, TwoSets) { - SPObject* Q = new SPObject(); - Q->invoke_build(_doc, _doc->rroot, 1); A->attach(B, nullptr); - A->attach(Q, nullptr); + A->attach(C, nullptr); set->add(A); set2->add(A); EXPECT_EQ(1, set->size()); EXPECT_EQ(1, set2->size()); set->remove(B); EXPECT_EQ(1, set->size()); - EXPECT_TRUE(set->includes(Q)); + EXPECT_TRUE(set->includes(C)); EXPECT_EQ(1, set2->size()); EXPECT_TRUE(set2->includes(A)); - Q->releaseReferences(); + C->releaseReferences(); EXPECT_EQ(0, set->size()); EXPECT_EQ(1, set2->size()); EXPECT_TRUE(set2->includes(A)); -- cgit v1.2.3 From 10b53ffcd9fe2338dd33d62e72952d20b94394b1 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Tue, 25 Oct 2016 10:56:31 +0200 Subject: Fix test (bzr r15190) --- testfiles/src/object-set-test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index 79a49488a..83c1e4ff2 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -98,7 +98,7 @@ TEST_F(ObjectSetTest, Basics) { EXPECT_FALSE(set->includes(A)); set->clear(); EXPECT_EQ(0, set->size()); - bool resultNull = set->add(nullptr); + bool resultNull = set->add((SPObject*)nullptr); EXPECT_FALSE(resultNull); EXPECT_EQ(0, set->size()); bool resultNull2 = set->remove(nullptr); -- cgit v1.2.3 From 6162cf1a9f6953319e0e3d6b56354c5cb0f26352 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Thu, 3 Nov 2016 00:08:41 +0100 Subject: Add some unit tests for object-set cppification (bzr r15203) --- testfiles/src/object-set-test.cpp | 228 +++++++++++++++++++++++++++++++++----- 1 file changed, 203 insertions(+), 25 deletions(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index 83c1e4ff2..3bf408d6b 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -12,11 +12,15 @@ #include #include #include +#include +#include +#include #include #include #include #include - +//#include +#include <2geom/transforms.h> using namespace Inkscape; using namespace Inkscape::XML; @@ -32,9 +36,9 @@ public: G = new SPObject(); H = new SPObject(); X = new SPObject(); - set = new ObjectSet(); - set2 = new ObjectSet(); - auto sd = new SimpleDocument(); + set = new ObjectSet(_doc); + set2 = new ObjectSet(_doc); + auto sd = _doc->getReprDoc(); auto xt = new TextNode(Util::share_string("x"), sd); auto ht = new TextNode(Util::share_string("h"), sd); auto gt = new TextNode(Util::share_string("g"), sd); @@ -53,6 +57,24 @@ public: C->invoke_build(_doc, ct, 0); B->invoke_build(_doc, bt, 0); A->invoke_build(_doc, at, 0); + + //create 3 rects at root of document + Inkscape::XML::Node *repr = _doc->getReprDoc()->createElement("svg:rect"); + _doc->getRoot()->appendChild(repr); + r1.reset(dynamic_cast(_doc->getObjectByRepr(repr))); + repr = _doc->getReprDoc()->createElement("svg:rect"); + _doc->getRoot()->appendChild(repr); + r2.reset(dynamic_cast(_doc->getObjectByRepr(repr))); + repr = _doc->getReprDoc()->createElement("svg:rect"); + _doc->getRoot()->appendChild(repr); + r3.reset(dynamic_cast(_doc->getObjectByRepr(repr))); + EXPECT_EQ(6, _doc->getRoot()->children.size());//metadata, defs, namedview, and those three rects. + r1->x = r1->y = r2->x = r2->y = r3->x = r3->y = 0; + r1->width = r1->height = r2->width = r2->height = r3->width = r3->height = 10; + r1->set_shape(); + r2->set_shape(); + r3->set_shape(); + } ~ObjectSetTest() { delete set; @@ -76,6 +98,9 @@ public: SPObject* G; SPObject* H; SPObject* X; + std::unique_ptr r1; + std::unique_ptr r2; + std::unique_ptr r3; ObjectSet* set; ObjectSet* set2; }; @@ -148,32 +173,40 @@ TEST_F(ObjectSetTest, Advanced) { TEST_F(ObjectSetTest, Items) { // cannot test smallestItem and largestItem functions due to too many dependencies // uncomment if the problem is fixed - SPRect* rect10x100 = (SPRect *) SPFactory::createObject("svg:rect"); -// rect10x100->invoke_build(_doc, _doc->rroot, 1); - SPRect* rect20x40 = (SPRect *) SPFactory::createObject("svg:rect"); -// rect20x40->invoke_build(_doc, _doc->rroot, 1); -// SPRect* rect30x30 = (SPRect *) SPFactory::createObject("svg:rect"); -// rect30x30->invoke_build(_doc, _doc->rroot, 1); -// rect10x100->width = 10; -// rect10x100->height = 100; -// rect20x40->width = 20; -// rect20x40->height = 40; -// rect30x30->width = 30; -// rect30x30->height = 30; + + SPRect* rect10x100 = &*r1; + rect10x100->x = rect10x100->x = 0; + rect10x100->width = 10; + rect10x100->height = 100; + rect10x100->set_shape(); + + SPRect* rect20x40 = &*r2; + rect20x40->x = rect20x40->x = 0; + rect20x40->width = 20; + rect20x40->height = 40; + rect20x40->set_shape(); + + SPRect* rect30x30 = &*r3; + rect30x30->x = rect30x30->x = 0; + rect30x30->width = 30; + rect30x30->height = 30; + rect30x30->set_shape(); + + set->add(rect10x100); EXPECT_EQ(rect10x100, set->singleItem()); EXPECT_EQ(rect10x100->getRepr(), set->singleRepr()); set->add(rect20x40); EXPECT_EQ(nullptr, set->singleItem()); EXPECT_EQ(nullptr, set->singleRepr()); -// set->add(rect30x30); -// EXPECT_EQ(3, set->size()); -// EXPECT_EQ(rect10x100, set->smallestItem(ObjectSet::CompareSize::HORIZONTAL)); -// EXPECT_EQ(rect30x30, set->smallestItem(ObjectSet::CompareSize::VERTICAL)); -// EXPECT_EQ(rect20x40, set->smallestItem(ObjectSet::CompareSize::AREA)); -// EXPECT_EQ(rect30x30, set->largestItem(ObjectSet::CompareSize::HORIZONTAL)); -// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::VERTICAL)); -// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::AREA)); + set->add(rect30x30); + EXPECT_EQ(3, set->size()); + EXPECT_EQ(rect10x100, set->smallestItem(ObjectSet::CompareSize::HORIZONTAL)); + EXPECT_EQ(rect30x30, set->smallestItem(ObjectSet::CompareSize::VERTICAL)); + EXPECT_EQ(rect20x40, set->smallestItem(ObjectSet::CompareSize::AREA)); + EXPECT_EQ(rect30x30, set->largestItem(ObjectSet::CompareSize::HORIZONTAL)); + EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::VERTICAL)); + EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::AREA)); } TEST_F(ObjectSetTest, Ranges) { @@ -310,7 +343,7 @@ TEST_F(ObjectSetTest, TwoSets) { } TEST_F(ObjectSetTest, SetRemoving) { - ObjectSet *objectSet = new ObjectSet(); + ObjectSet *objectSet = new ObjectSet(_doc); A->attach(B, nullptr); objectSet->add(A); objectSet->add(C); @@ -319,3 +352,148 @@ TEST_F(ObjectSetTest, SetRemoving) { EXPECT_STREQ(nullptr, A->getId()); EXPECT_STREQ(nullptr, C->getId()); } + +TEST_F(ObjectSetTest, Delete) { + //we cannot use the same item as in other tests since it will be freed at the test destructor + Inkscape::XML::Node *repr = _doc->getReprDoc()->createElement("svg:rect"); + _doc->getRoot()->appendChild(repr); + SPRect *r1 = dynamic_cast(_doc->getObjectByRepr(repr)); + + EXPECT_EQ(_doc->getRoot(), r1->parent); + set->add(r1); + set->deleteItems(); + EXPECT_EQ(0, set->size()); + EXPECT_EQ(nullptr, r1->parent); +} + +TEST_F(ObjectSetTest, Ops) { + set->add(r1.get()); + set->add(r2.get()); + set->add(r3.get()); + set->duplicate(); + EXPECT_EQ(9, _doc->getRoot()->children.size());//metadata, defs, namedview, and those 3x2 rects. + EXPECT_EQ(3, set->size()); + EXPECT_FALSE(set->includes(r1.get())); + set->deleteItems(); + EXPECT_TRUE(set->isEmpty()); + set->add(r1.get()); + set->add(r2.get()); + set->add(r3.get()); + set->group();//r1-3 are now invalid (grouping makes copies) + r1.release(); + r2.release(); + r3.release(); + EXPECT_EQ(4, _doc->getRoot()->children.size()); + EXPECT_EQ(1, set->size()); + set->ungroup(); + EXPECT_EQ(6, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + /* Uncomment this when toNextLayer is made desktop-independent + set->group(); + set2->add(set->singleItem()->childList(false)[0]); + EXPECT_EQ(3, set->singleItem()->children.size()); + EXPECT_EQ(4, _doc->getRoot()->children.size()); + set2->popFromGroup(); + EXPECT_EQ(2, set->singleItem()->children.size()); + EXPECT_EQ(5, _doc->getRoot()->children.size()); + set->ungroup(); + set->add(set2->singleItem()); + */ + set->clone(); + EXPECT_EQ(9, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + EXPECT_NE(nullptr,dynamic_cast(*(set->items().begin()))); + EXPECT_EQ(nullptr,dynamic_cast(*(set->items().begin()))); + set->unlink(); + EXPECT_EQ(9, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + EXPECT_EQ(nullptr,dynamic_cast(*(set->items().begin()))); + EXPECT_NE(nullptr,dynamic_cast(*(set->items().begin()))); + set->clone(); //creates 3 clones + set->clone(); //creates 3 clones of clones + EXPECT_EQ(15, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + EXPECT_NE(nullptr,dynamic_cast( ((SPUse*)(*(set->items().begin())))->get_original()));//"original is a Use" + set->unlink(); //clone of clone of rect -> rect + EXPECT_EQ(nullptr,dynamic_cast(*(set->items().begin()))); + EXPECT_NE(nullptr,dynamic_cast(*(set->items().begin()))); + set->clone(); + set->set(*(set->items().begin())); + set->cloneOriginal();//get clone original + EXPECT_EQ(18, _doc->getRoot()->children.size()); + EXPECT_EQ(1, set->size()); + EXPECT_NE(nullptr,dynamic_cast(*(set->items().begin()))); + //let's stop here. + // TODO: write a hundred more tests to check clone (non-)displacement when grouping, ungrouping and unlinking... + TearDownTestCase(); + SetUpTestCase(); +} + +TEST_F(ObjectSetTest, ZOrder) { + //sp_object_compare_position_bool == true iff "r1set(r2.get()); + set->raise(); + //1 3 2 + EXPECT_TRUE(sp_object_compare_position_bool(r1.get(),r3.get())); + EXPECT_TRUE(sp_object_compare_position_bool(r3.get(),r2.get()));//! + set->set(r3.get()); + set->lower(); + //3 1 2 + EXPECT_TRUE(sp_object_compare_position_bool(r3.get(),r1.get())); + EXPECT_TRUE(sp_object_compare_position_bool(r1.get(),r2.get())); + set->raiseToTop(); + //1 2 3 + EXPECT_TRUE(sp_object_compare_position_bool(r1.get(),r2.get())); + EXPECT_TRUE(sp_object_compare_position_bool(r2.get(),r3.get())); + set->lowerToBottom(); + //3 1 2 + EXPECT_TRUE(sp_object_compare_position_bool(r3.get(),r1.get())); + EXPECT_TRUE(sp_object_compare_position_bool(r1.get(),r2.get())); +} + +TEST_F(ObjectSetTest, Combine) { + set->add(r1.get()); + set->add(r2.get()); + set->combine(); + r1.release(); + r2.release(); + EXPECT_EQ(1, set->size()); + EXPECT_EQ(5, _doc->getRoot()->children.size()); + set->breakApart(); + EXPECT_EQ(2, set->size()); + EXPECT_EQ(6, _doc->getRoot()->children.size()); + set->deleteItems(); + set->set(r3.get()); + set->toCurves(); + r3.release(); + auto x = set->singleItem(); + EXPECT_NE(nullptr,dynamic_cast(x)); + EXPECT_EQ(nullptr,dynamic_cast(x)); + set->deleteItems(); +} + +TEST_F(ObjectSetTest, Moves) { + set->add(r1.get()); + set->moveRelative(15,15); + EXPECT_EQ(15,r1->x.value); + Geom::Point p(20,20); + Geom::Scale s(2); + set->setScaleRelative(p,s); + EXPECT_EQ(10,r1->x.value); + EXPECT_EQ(20,r1->width.value); + set->toCurves(); + r1.release(); + auto x = set->singleItem(); + EXPECT_EQ(20,(*(x->documentVisualBounds()))[0].extent()); + set->rotate90(true); + set->rotate90(true); + EXPECT_EQ(20,(*(x->documentVisualBounds()))[0].extent()); + set->deleteItems(); +} -- cgit v1.2.3 From d7b2a527bbc557855b96e2ac01c1d8554c124019 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Sun, 6 Nov 2016 22:36:33 +0100 Subject: Fix selection issue with ObjectSet::unlinkRecursive() and add tests for it. (bzr r15204.1.5) --- testfiles/src/object-set-test.cpp | 138 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index 3bf408d6b..e98d44e5d 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -105,6 +105,25 @@ public: ObjectSet* set2; }; +#define SP_IS_CLONE(obj) (dynamic_cast(obj) != NULL) + +bool containsClone(ObjectSet* set) { + for (auto it : set->items()) { + if (SP_IS_CLONE(it)) { + return true; + } + if (SP_IS_GROUP(it)) { + ObjectSet tmp_set(set->document()); + std::vector c = it->childList(false); + tmp_set.setList(c); + if (containsClone(&tmp_set)) { + return true; + } + } + } + return false; +} + TEST_F(ObjectSetTest, Basics) { EXPECT_EQ(0, set->size()); set->add(A); @@ -429,6 +448,125 @@ TEST_F(ObjectSetTest, Ops) { SetUpTestCase(); } +TEST_F(ObjectSetTest, unlinkRecursiveBasic) { + // This is the same as the test (ObjectSetTest, Ops), but with unlinkRecursive instead of unlink. + set->set(r1.get()); + set->add(r2.get()); + set->add(r3.get()); + EXPECT_FALSE(containsClone(set)); + set->duplicate(); + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(9, _doc->getRoot()->children.size());//metadata, defs, namedview, and those 3x2 rects. + EXPECT_EQ(3, set->size()); + EXPECT_FALSE(set->includes(r1.get())); + set->deleteItems(); + EXPECT_FALSE(containsClone(set)); + EXPECT_TRUE(set->isEmpty()); + set->add(r1.get()); + set->add(r2.get()); + set->add(r3.get()); + EXPECT_FALSE(containsClone(set)); + set->group();//r1-3 are now invalid (grouping makes copies) + r1.release(); + r2.release(); + r3.release(); + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(4, _doc->getRoot()->children.size()); + EXPECT_EQ(1, set->size()); + set->ungroup(); + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(6, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + /* Uncomment this when toNextLayer is made desktop-independent + set->group(); + set2->add(set->singleItem()->childList(false)[0]); + EXPECT_EQ(3, set->singleItem()->children.size()); + EXPECT_EQ(4, _doc->getRoot()->children.size()); + set2->popFromGroup(); + EXPECT_EQ(2, set->singleItem()->children.size()); + EXPECT_EQ(5, _doc->getRoot()->children.size()); + set->ungroup(); + set->add(set2->singleItem()); + */ + set->clone(); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(9, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + EXPECT_NE(nullptr, dynamic_cast(*(set->items().begin()))); + EXPECT_EQ(nullptr, dynamic_cast(*(set->items().begin()))); + set->unlinkRecursive(); + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(9, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + EXPECT_EQ(nullptr, dynamic_cast(*(set->items().begin()))); + EXPECT_NE(nullptr, dynamic_cast(*(set->items().begin()))); + set->clone(); //creates 3 clones + EXPECT_TRUE(containsClone(set)); + set->clone(); //creates 3 clones of clones + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(15, _doc->getRoot()->children.size()); + EXPECT_EQ(3, set->size()); + EXPECT_NE(nullptr, dynamic_cast( ((SPUse*)(*(set->items().begin())))->get_original()));//"original is a Use" + set->unlinkRecursive(); //clone of clone of rect -> rect + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(nullptr, dynamic_cast(*(set->items().begin()))); + EXPECT_NE(nullptr, dynamic_cast(*(set->items().begin()))); + set->clone(); + EXPECT_TRUE(containsClone(set)); + set->set(*(set->items().begin())); + set->cloneOriginal();//get clone original + EXPECT_EQ(18, _doc->getRoot()->children.size()); + EXPECT_EQ(1, set->size()); + EXPECT_NE(nullptr, dynamic_cast(*(set->items().begin()))); + TearDownTestCase(); + SetUpTestCase(); +} + +TEST_F(ObjectSetTest, unlinkRecursiveAdvanced) { + set->set(r1.get()); + set->add(r2.get()); + set->add(r3.get()); + set->group();//r1-3 are now invalid (grouping makes copies) + r1.release(); + r2.release(); + r3.release(); + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(1, set->size()); + SPItem* original = set->singleItem(); + set->clone(); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(1, set->size()); + set->add(original); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(2, set->size()); + set->group(); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(1, set->size()); + original = set->singleItem(); + set->clone(); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(1, set->size()); + set->add(original); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(2, set->size()); + set->group(); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(1, set->size()); + original = set->singleItem(); + set->clone(); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(1, set->size()); + set->add(original); + EXPECT_TRUE(containsClone(set)); + EXPECT_EQ(2, set->size()); + set->unlinkRecursive(); + EXPECT_FALSE(containsClone(set)); + EXPECT_EQ(2, set->size()); + + TearDownTestCase(); + SetUpTestCase(); +} + TEST_F(ObjectSetTest, ZOrder) { //sp_object_compare_position_bool == true iff "r1 Date: Fri, 11 Nov 2016 21:04:25 +0100 Subject: fix test (bzr r15236) --- testfiles/src/object-set-test.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'testfiles/src/object-set-test.cpp') diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index e98d44e5d..1879777e5 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -374,15 +374,13 @@ TEST_F(ObjectSetTest, SetRemoving) { TEST_F(ObjectSetTest, Delete) { //we cannot use the same item as in other tests since it will be freed at the test destructor - Inkscape::XML::Node *repr = _doc->getReprDoc()->createElement("svg:rect"); - _doc->getRoot()->appendChild(repr); - SPRect *r1 = dynamic_cast(_doc->getObjectByRepr(repr)); EXPECT_EQ(_doc->getRoot(), r1->parent); - set->add(r1); + set->add(r1.get()); set->deleteItems(); + r1.release(); EXPECT_EQ(0, set->size()); - EXPECT_EQ(nullptr, r1->parent); + //EXPECT_EQ(nullptr, r1->parent); } TEST_F(ObjectSetTest, Ops) { -- cgit v1.2.3