11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
8215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "Test.h"
9215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "SkParsePath.h"
10215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
11215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reedstatic void test_to_from(skiatest::Reporter* reporter, const SkPath& path) {
12215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkString str, str2;
13215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkParsePath::ToSVGString(path, &str);
14215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
15215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkPath path2;
16215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    bool success = SkParsePath::FromSVGString(str.c_str(), &path2);
17215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    REPORTER_ASSERT(reporter, success);
18215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
19215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkParsePath::ToSVGString(path2, &str2);
20215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    REPORTER_ASSERT(reporter, str == str2);
21215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#if 0 // closed paths are not equal, the iter explicitly gives the closing
22215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed      // edge, even if it is not in the path.
23215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    REPORTER_ASSERT(reporter, path == path2);
24215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    if (path != path2) {
25215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        SkDebugf("str1=%s\nstr2=%s\n", str.c_str(), str2.c_str());
26215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    }
27215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#endif
28215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed}
29215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
30215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reedstatic void TestParsePath(skiatest::Reporter* reporter) {
31215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    static const struct {
32215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        const char* fStr;
33215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        SkRect      fBounds;
34215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    } gRec[] = {
35215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        { "", { 0, 0, 0, 0 } },
36215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        { "M0,0L10,10", { 0, 0, SkIntToScalar(10), SkIntToScalar(10) } },
37215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        { "M-5.5,-0.5 Q 0 0 6,6.50",
38215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed            { SkFloatToScalar(-5.5f), SkFloatToScalar(-0.5f),
39215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed              SkFloatToScalar(6), SkFloatToScalar(6.5f) } }
40215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    };
41215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
42215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) {
43215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        SkPath  path;
44215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        bool success = SkParsePath::FromSVGString(gRec[i].fStr, &path);
45215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        REPORTER_ASSERT(reporter, success);
46215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        const SkRect& expectedBounds = gRec[i].fBounds;
47215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        const SkRect& pathBounds = path.getBounds();
48215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        REPORTER_ASSERT(reporter, expectedBounds == pathBounds);
49215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
50215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed        test_to_from(reporter, path);
51215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    }
52215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
53215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkRect r;
54215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5));
55215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    SkPath p;
56215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    p.addRect(r);
57215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    test_to_from(reporter, p);
58215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    p.addOval(r);
59215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    test_to_from(reporter, p);
60215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    p.addRoundRect(r, SkFloatToScalar(4), SkFloatToScalar(4.5));
61215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed    test_to_from(reporter, p);
62215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed}
63215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed
64215473cea1702d8acc0316da3e5a9bf4ce0130efMike Reed#include "TestClassDef.h"
65215473cea1702d8acc0316da3e5a9bf4ce0130efMike ReedDEFINE_TESTCLASS("ParsePath", ParsePathClass, TestParsePath)
66