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