ParsePathTest.cpp revision 42639cddc33746b351bbf07c540711eefffe191a
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
3042639cddc33746b351bbf07c540711eefffe191acaryclark@google.comstatic struct {
3142639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    const char* fStr;
3242639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    const SkRect fBounds;
3342639cddc33746b351bbf07c540711eefffe191acaryclark@google.com} gRec[] = {
3442639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    { "", { 0, 0, 0, 0 } },
3542639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    { "M0,0L10,10", { 0, 0, SkIntToScalar(10), SkIntToScalar(10) } },
3642639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    { "M-5.5,-0.5 Q 0 0 6,6.50",
3742639cddc33746b351bbf07c540711eefffe191acaryclark@google.com        { SkFloatToScalar(-5.5f), SkFloatToScalar(-0.5f),
3842639cddc33746b351bbf07c540711eefffe191acaryclark@google.com          SkFloatToScalar(6), SkFloatToScalar(6.5f) } }
3942639cddc33746b351bbf07c540711eefffe191acaryclark@google.com};
4042639cddc33746b351bbf07c540711eefffe191acaryclark@google.com
41bbff1d507aa3f470139e2df409e94074a2f9425freed@android.comstatic void TestParsePath(skiatest::Reporter* reporter) {
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;
5442639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5f));
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);
6042639cddc33746b351bbf07c540711eefffe191acaryclark@google.com    p.addRoundRect(r, SkFloatToScalar(4), SkFloatToScalar(4.5f));
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