1 // Aseprite
2 // Copyright (c) 2001-2018  David Capello
3 //
4 // This program is distributed under the terms of
5 // the End-User License Agreement for Aseprite.
6 
7 #include "tests/test.h"
8 
9 #include "app/context.h"
10 #include "app/doc.h"
11 
12 using namespace app;
13 using namespace doc;
14 
15 namespace doc {
16 
operator <<(std::ostream & os,ColorMode mode)17   std::ostream& operator<<(std::ostream& os, ColorMode mode) {
18     return os << (int)mode;
19   }
20 
21 } // namespace doc
22 
TEST(Context,AddDocument)23 TEST(Context, AddDocument)
24 {
25   Context ctx;
26   auto doc = ctx.documents().add(32, 28);
27   ASSERT_TRUE(doc != NULL);
28 
29   EXPECT_EQ(32, doc->width());
30   EXPECT_EQ(28, doc->height());
31   EXPECT_EQ(ColorMode::RGB, doc->colorMode()); // Default color mode is RGB
32 }
33 
TEST(Context,DeleteDocuments)34 TEST(Context, DeleteDocuments)
35 {
36   Context ctx;
37   auto doc1 = ctx.documents().add(2, 2);
38   auto doc2 = ctx.documents().add(4, 4);
39   EXPECT_EQ(2, ctx.documents().size());
40 
41   delete doc1;
42   delete doc2;
43 
44   EXPECT_EQ(0, ctx.documents().size());
45 }
46 
TEST(Context,CloseAndDeleteDocuments)47 TEST(Context, CloseAndDeleteDocuments)
48 {
49   Context ctx;
50   EXPECT_EQ(0, ctx.documents().size());
51 
52   auto doc1 = ctx.documents().add(2, 2);
53   auto doc2 = ctx.documents().add(4, 4);
54   EXPECT_EQ(2, ctx.documents().size());
55 
56   doc1->close();
57   EXPECT_EQ(1, ctx.documents().size());
58 
59   delete doc1;
60   delete doc2;
61   EXPECT_EQ(0, ctx.documents().size());
62 }
63 
TEST(Context,SwitchContext)64 TEST(Context, SwitchContext)
65 {
66   Context ctx1, ctx2;
67   auto doc1 = new Doc(nullptr);
68   auto doc2 = new Doc(nullptr);
69   doc1->setContext(&ctx1);
70   doc2->setContext(&ctx2);
71   EXPECT_EQ(&ctx1, doc1->context());
72   EXPECT_EQ(&ctx2, doc2->context());
73 
74   doc1->setContext(&ctx2);
75   doc2->setContext(&ctx1);
76   EXPECT_EQ(&ctx2, doc1->context());
77   EXPECT_EQ(&ctx1, doc2->context());
78 
79   ctx2.documents().remove(doc1);
80   ctx1.documents().remove(doc2);
81   ctx1.documents().add(doc1);
82   ctx2.documents().add(doc2);
83   EXPECT_EQ(&ctx1, doc1->context());
84   EXPECT_EQ(&ctx2, doc2->context());
85 }
86