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