source: libcaca/trunk/tests/dirty.cpp @ 3513

Last change on this file since 3513 was 3513, checked in by Sam Hocevar, 11 years ago

Add more unit tests for the dirty rectangles.

  • Property svn:keywords set to Id
File size: 5.9 KB
Line 
1/*
2 *  caca-test     testsuite program for libcaca
3 *  Copyright (c) 2009 Sam Hocevar <sam@hocevar.net>
4 *                All Rights Reserved
5 *
6 *  $Id: dirty.cpp 3513 2009-05-22 13:23:09Z sam $
7 *
8 *  This program is free software. It comes without any warranty, to
9 *  the extent permitted by applicable law. You can redistribute it
10 *  and/or modify it under the terms of the Do What The Fuck You Want
11 *  To Public License, Version 2, as published by Sam Hocevar. See
12 *  http://sam.zoy.org/wtfpl/COPYING for more details.
13 */
14
15#include "config.h"
16
17#include <cppunit/extensions/HelperMacros.h>
18#include <cppunit/TestCaller.h>
19#include <cppunit/TestCase.h>
20#include <cppunit/TestSuite.h>
21
22#include "caca.h"
23
24class DirtyTest : public CppUnit::TestCase
25{
26    CPPUNIT_TEST_SUITE(DirtyTest);
27    CPPUNIT_TEST(test_create);
28    CPPUNIT_TEST(test_put_char_dirty);
29    CPPUNIT_TEST(test_put_char_not_dirty);
30    CPPUNIT_TEST(test_box);
31    CPPUNIT_TEST_SUITE_END();
32
33public:
34    DirtyTest() : CppUnit::TestCase("Dirty Rectangles Test") {}
35
36    void setUp() {}
37
38    void tearDown() {}
39
40    void test_create()
41    {
42        caca_canvas_t *cv;
43        int i, dx, dy, dw, dh;
44
45        /* Check that the dirty rectangle contains the whole canvas
46         * upon creation. */
47        cv = caca_create_canvas(WIDTH, HEIGHT);
48        i = caca_get_dirty_rect_count(cv);
49        CPPUNIT_ASSERT_EQUAL(i, 1);
50
51        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
52        CPPUNIT_ASSERT_EQUAL(dx, 0);
53        CPPUNIT_ASSERT_EQUAL(dy, 0);
54        CPPUNIT_ASSERT_EQUAL(dw, caca_get_canvas_width(cv));
55        CPPUNIT_ASSERT_EQUAL(dh, caca_get_canvas_height(cv));
56
57        /* Invalidate the dirty rectangle and check that it stays so. */
58        caca_clear_dirty_rect_list(cv);
59        i = caca_get_dirty_rect_count(cv);
60        CPPUNIT_ASSERT_EQUAL(i, 0);
61
62        caca_free_canvas(cv);
63    }
64
65    void test_put_char_dirty()
66    {
67        caca_canvas_t *cv;
68        int i, dx, dy, dw, dh;
69
70        cv = caca_create_canvas(WIDTH, HEIGHT);
71
72        caca_clear_dirty_rect_list(cv);
73        caca_put_char(cv, 7, 3, 'x');
74        i = caca_get_dirty_rect_count(cv);
75        CPPUNIT_ASSERT_EQUAL(i, 1);
76        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
77        CPPUNIT_ASSERT_EQUAL(dx, 7);
78        CPPUNIT_ASSERT_EQUAL(dy, 3);
79        CPPUNIT_ASSERT_EQUAL(dw, 1);
80        CPPUNIT_ASSERT_EQUAL(dh, 1);
81
82        caca_clear_canvas(cv);
83        caca_clear_dirty_rect_list(cv);
84        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
85        i = caca_get_dirty_rect_count(cv);
86        CPPUNIT_ASSERT_EQUAL(i, 1);
87        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
88        CPPUNIT_ASSERT_EQUAL(dx, 7);
89        CPPUNIT_ASSERT_EQUAL(dy, 3);
90        CPPUNIT_ASSERT_EQUAL(dw, 2);
91        CPPUNIT_ASSERT_EQUAL(dh, 1);
92
93        caca_clear_canvas(cv);
94        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
95        caca_clear_dirty_rect_list(cv);
96        caca_put_char(cv, 7, 3, 'x');
97        i = caca_get_dirty_rect_count(cv);
98        CPPUNIT_ASSERT_EQUAL(i, 1);
99        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
100        CPPUNIT_ASSERT_EQUAL(dx, 7);
101        CPPUNIT_ASSERT_EQUAL(dy, 3);
102        CPPUNIT_ASSERT_EQUAL(dw, 2);
103        CPPUNIT_ASSERT_EQUAL(dh, 1);
104
105        caca_clear_canvas(cv);
106        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
107        caca_clear_dirty_rect_list(cv);
108        caca_put_char(cv, 8, 3, 'x');
109        i = caca_get_dirty_rect_count(cv);
110        CPPUNIT_ASSERT_EQUAL(i, 1);
111        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
112        CPPUNIT_ASSERT_EQUAL(dx, 7);
113        CPPUNIT_ASSERT_EQUAL(dy, 3);
114        CPPUNIT_ASSERT_EQUAL(dw, 2);
115        CPPUNIT_ASSERT_EQUAL(dh, 1);
116
117        caca_clear_canvas(cv);
118        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
119        caca_clear_dirty_rect_list(cv);
120        caca_put_char(cv, 6, 3, 0x2f06 /* ⼆ */);
121        i = caca_get_dirty_rect_count(cv);
122        CPPUNIT_ASSERT_EQUAL(i, 1);
123        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
124        CPPUNIT_ASSERT_EQUAL(dx, 6);
125        CPPUNIT_ASSERT_EQUAL(dy, 3);
126        CPPUNIT_ASSERT_EQUAL(dw, 3);
127        CPPUNIT_ASSERT_EQUAL(dh, 1);
128
129        caca_clear_canvas(cv);
130        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
131        caca_clear_dirty_rect_list(cv);
132        caca_put_char(cv, 8, 3, 0x2f06 /* ⼆ */);
133        i = caca_get_dirty_rect_count(cv);
134        CPPUNIT_ASSERT_EQUAL(i, 1);
135        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
136        CPPUNIT_ASSERT_EQUAL(dx, 7);
137        CPPUNIT_ASSERT_EQUAL(dy, 3);
138        CPPUNIT_ASSERT_EQUAL(dw, 3);
139        CPPUNIT_ASSERT_EQUAL(dh, 1);
140    }
141
142    void test_put_char_not_dirty()
143    {
144        caca_canvas_t *cv;
145        int i;
146
147        cv = caca_create_canvas(WIDTH, HEIGHT);
148
149        /* Check that pasting the same character does not cause
150         * a dirty rectangle to be created. */
151        caca_put_char(cv, 7, 3, 'x');
152        caca_clear_dirty_rect_list(cv);
153        caca_put_char(cv, 7, 3, 'x');
154        i = caca_get_dirty_rect_count(cv);
155        CPPUNIT_ASSERT_EQUAL(i, 0);
156
157        caca_clear_canvas(cv);
158        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
159        caca_clear_dirty_rect_list(cv);
160        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
161        i = caca_get_dirty_rect_count(cv);
162        CPPUNIT_ASSERT_EQUAL(i, 0);
163    }
164
165    void test_box()
166    {
167        caca_canvas_t *cv;
168        int i, dx, dy, dw, dh;
169
170        cv = caca_create_canvas(WIDTH, HEIGHT);
171        caca_clear_dirty_rect_list(cv);
172
173        caca_fill_box(cv, 7, 3, 14, 9, 'x');
174        i = caca_get_dirty_rect_count(cv);
175        CPPUNIT_ASSERT_EQUAL(i, 1);
176        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
177        CPPUNIT_ASSERT_EQUAL(dx, 7);
178        CPPUNIT_ASSERT_EQUAL(dy, 3);
179        CPPUNIT_ASSERT_EQUAL(dw, 14);
180        CPPUNIT_ASSERT_EQUAL(dh, 9);
181
182        caca_clear_dirty_rect_list(cv);
183        caca_fill_box(cv, 7, 3, 14, 9, 'x');
184        i = caca_get_dirty_rect_count(cv);
185        CPPUNIT_ASSERT_EQUAL(i, 0);
186    }
187
188private:
189    static int const WIDTH = 80, HEIGHT = 50;
190};
191
192CPPUNIT_TEST_SUITE_REGISTRATION(DirtyTest);
193
Note: See TracBrowser for help on using the repository browser.