1cb93a386Sopenharmony_ci---
2cb93a386Sopenharmony_cititle: 'Writing Skia Tests'
3cb93a386Sopenharmony_cilinkTitle: 'Writing Skia Tests'
4cb93a386Sopenharmony_ci---
5cb93a386Sopenharmony_ci
6cb93a386Sopenharmony_ciWe assume you have already synced Skia's dependencies and set up Skia's build
7cb93a386Sopenharmony_cisystem.
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci<!--?prettify lang=sh?-->
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci    python2 tools/git-sync-deps
12cb93a386Sopenharmony_ci    bin/gn gen out/Debug
13cb93a386Sopenharmony_ci    bin/gn gen out/Release --args='is_debug=false'
14cb93a386Sopenharmony_ci
15cb93a386Sopenharmony_ci## Writing a Unit Test
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_ci1.  Add a file `tests/NewUnitTest.cpp`:
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_ci    <!--?prettify lang=cc?-->
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_ci        /*
22cb93a386Sopenharmony_ci         * Copyright ........
23cb93a386Sopenharmony_ci         *
24cb93a386Sopenharmony_ci         * Use of this source code is governed by a BSD-style license
25cb93a386Sopenharmony_ci         * that can be found in the LICENSE file.
26cb93a386Sopenharmony_ci         */
27cb93a386Sopenharmony_ci        #include "Test.h"
28cb93a386Sopenharmony_ci        DEF_TEST(NewUnitTest, reporter) {
29cb93a386Sopenharmony_ci            if (1 + 1 != 2) {
30cb93a386Sopenharmony_ci                ERRORF(reporter, "%d + %d != %d", 1, 1, 2);
31cb93a386Sopenharmony_ci            }
32cb93a386Sopenharmony_ci            bool lifeIsGood = true;
33cb93a386Sopenharmony_ci            REPORTER_ASSERT(reporter, lifeIsGood);
34cb93a386Sopenharmony_ci        }
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_ci2.  Add `NewUnitTest.cpp` to `gn/tests.gni`.
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ci3.  Recompile and run test:
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_ci    <!--?prettify lang=sh?-->
41cb93a386Sopenharmony_ci
42cb93a386Sopenharmony_ci        ninja -C out/Debug dm
43cb93a386Sopenharmony_ci        out/Debug/dm --match NewUnitTest
44cb93a386Sopenharmony_ci
45cb93a386Sopenharmony_ci## Writing a Rendering Test
46cb93a386Sopenharmony_ci
47cb93a386Sopenharmony_ci1.  Add a file `gm/newgmtest.cpp`:
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_ci    <!--?prettify lang=cc?-->
50cb93a386Sopenharmony_ci
51cb93a386Sopenharmony_ci        /*
52cb93a386Sopenharmony_ci         * Copyright ........
53cb93a386Sopenharmony_ci         *
54cb93a386Sopenharmony_ci         * Use of this source code is governed by a BSD-style license
55cb93a386Sopenharmony_ci         * that can be found in the LICENSE file.
56cb93a386Sopenharmony_ci         */
57cb93a386Sopenharmony_ci        #include "gm.h"
58cb93a386Sopenharmony_ci        DEF_SIMPLE_GM(newgmtest, canvas, 128, 128) {
59cb93a386Sopenharmony_ci            canvas->clear(SK_ColorWHITE);
60cb93a386Sopenharmony_ci            SkPaint p;
61cb93a386Sopenharmony_ci            p.setStrokeWidth(2);
62cb93a386Sopenharmony_ci            canvas->drawLine(16, 16, 112, 112, p);
63cb93a386Sopenharmony_ci        }
64cb93a386Sopenharmony_ci
65cb93a386Sopenharmony_ci2.  Add `newgmtest.cpp` to `gn/gm.gni`.
66cb93a386Sopenharmony_ci
67cb93a386Sopenharmony_ci3.  Recompile and run test:
68cb93a386Sopenharmony_ci
69cb93a386Sopenharmony_ci    <!--?prettify lang=sh?-->
70cb93a386Sopenharmony_ci
71cb93a386Sopenharmony_ci        ninja -C out/Debug dm
72cb93a386Sopenharmony_ci        out/Debug/dm --match newgmtest
73cb93a386Sopenharmony_ci
74cb93a386Sopenharmony_ci4.  Run the GM inside Viewer:
75cb93a386Sopenharmony_ci
76cb93a386Sopenharmony_ci    <!--?prettify lang=sh?-->
77cb93a386Sopenharmony_ci
78cb93a386Sopenharmony_ci        ninja -C out/Debug viewer
79cb93a386Sopenharmony_ci        out/Debug/viewer --slide GM_newgmtest
80cb93a386Sopenharmony_ci
81cb93a386Sopenharmony_ci## Writing a Benchmark Test
82cb93a386Sopenharmony_ci
83cb93a386Sopenharmony_ci1.  Add a file `bench/FooBench.cpp`:
84cb93a386Sopenharmony_ci
85cb93a386Sopenharmony_ci    <!--?prettify lang=cc?-->
86cb93a386Sopenharmony_ci
87cb93a386Sopenharmony_ci        /*
88cb93a386Sopenharmony_ci         * Copyright ........
89cb93a386Sopenharmony_ci         *
90cb93a386Sopenharmony_ci         * Use of this source code is governed by a BSD-style license
91cb93a386Sopenharmony_ci         * that can be found in the LICENSE file.
92cb93a386Sopenharmony_ci         */
93cb93a386Sopenharmony_ci        #include "Benchmark.h"
94cb93a386Sopenharmony_ci        #include "SkCanvas.h"
95cb93a386Sopenharmony_ci        namespace {
96cb93a386Sopenharmony_ci        class FooBench : public Benchmark {
97cb93a386Sopenharmony_ci        public:
98cb93a386Sopenharmony_ci            FooBench() {}
99cb93a386Sopenharmony_ci            virtual ~FooBench() {}
100cb93a386Sopenharmony_ci        protected:
101cb93a386Sopenharmony_ci            const char* onGetName() override { return "Foo"; }
102cb93a386Sopenharmony_ci            SkIPoint onGetSize() override { return SkIPoint{100, 100}; }
103cb93a386Sopenharmony_ci            void onDraw(int loops, SkCanvas* canvas) override {
104cb93a386Sopenharmony_ci                while (loops-- > 0) {
105cb93a386Sopenharmony_ci                    canvas->drawLine(0.0f, 0.0f, 100.0f, 100.0f, SkPaint());
106cb93a386Sopenharmony_ci                }
107cb93a386Sopenharmony_ci            }
108cb93a386Sopenharmony_ci        };
109cb93a386Sopenharmony_ci        }  // namespace
110cb93a386Sopenharmony_ci        DEF_BENCH(return new FooBench;)
111cb93a386Sopenharmony_ci
112cb93a386Sopenharmony_ci2.  Add `FooBench.cpp` to `gn/bench.gni`.
113cb93a386Sopenharmony_ci
114cb93a386Sopenharmony_ci3.  Recompile and run nanobench:
115cb93a386Sopenharmony_ci
116cb93a386Sopenharmony_ci    <!--?prettify lang=sh?-->
117cb93a386Sopenharmony_ci
118cb93a386Sopenharmony_ci        ninja -C out/Release nanobench
119cb93a386Sopenharmony_ci        out/Release/nanobench --match Foo
120