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