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 "SkParsePath.h"
98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.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",
374b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        { -5.5f, -0.5f,
384b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org          6, 6.5f } }
3942639cddc33746b351bbf07c540711eefffe191acaryclark@google.com};
4042639cddc33746b351bbf07c540711eefffe191acaryclark@google.com
41e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(ParsePath, 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    }
52d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
53bbff1d507aa3f470139e2df409e94074a2f9425freed@android.com    SkRect r;
544b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    r.set(0, 0, 10, 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);
604b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    p.addRoundRect(r, 4, 4.5f);
61bbff1d507aa3f470139e2df409e94074a2f9425freed@android.com    test_to_from(reporter, p);
62bbff1d507aa3f470139e2df409e94074a2f9425freed@android.com}
63