• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 #include "Test.h"
9 #include "SkParsePath.h"
10 
test_to_from(skiatest::Reporter * reporter,const SkPath & path)11 static void test_to_from(skiatest::Reporter* reporter, const SkPath& path) {
12     SkString str, str2;
13     SkParsePath::ToSVGString(path, &str);
14 
15     SkPath path2;
16     bool success = SkParsePath::FromSVGString(str.c_str(), &path2);
17     REPORTER_ASSERT(reporter, success);
18 
19     SkParsePath::ToSVGString(path2, &str2);
20     REPORTER_ASSERT(reporter, str == str2);
21 #if 0 // closed paths are not equal, the iter explicitly gives the closing
22       // edge, even if it is not in the path.
23     REPORTER_ASSERT(reporter, path == path2);
24     if (path != path2) {
25         SkDebugf("str1=%s\nstr2=%s\n", str.c_str(), str2.c_str());
26     }
27 #endif
28 }
29 
TestParsePath(skiatest::Reporter * reporter)30 static void TestParsePath(skiatest::Reporter* reporter) {
31     static const struct {
32         const char* fStr;
33         SkRect      fBounds;
34     } gRec[] = {
35         { "", { 0, 0, 0, 0 } },
36         { "M0,0L10,10", { 0, 0, SkIntToScalar(10), SkIntToScalar(10) } },
37         { "M-5.5,-0.5 Q 0 0 6,6.50",
38             { SkFloatToScalar(-5.5f), SkFloatToScalar(-0.5f),
39               SkFloatToScalar(6), SkFloatToScalar(6.5f) } }
40     };
41 
42     for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) {
43         SkPath  path;
44         bool success = SkParsePath::FromSVGString(gRec[i].fStr, &path);
45         REPORTER_ASSERT(reporter, success);
46         const SkRect& expectedBounds = gRec[i].fBounds;
47         const SkRect& pathBounds = path.getBounds();
48         REPORTER_ASSERT(reporter, expectedBounds == pathBounds);
49 
50         test_to_from(reporter, path);
51     }
52 
53     SkRect r;
54     r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5));
55     SkPath p;
56     p.addRect(r);
57     test_to_from(reporter, p);
58     p.addOval(r);
59     test_to_from(reporter, p);
60     p.addRoundRect(r, SkFloatToScalar(4), SkFloatToScalar(4.5));
61     test_to_from(reporter, p);
62 }
63 
64 #include "TestClassDef.h"
65 DEFINE_TESTCLASS("ParsePath", ParsePathClass, TestParsePath)
66