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