17445e86bac478dea91da32473e5a01baff637c23fmalita/* 27445e86bac478dea91da32473e5a01baff637c23fmalita * Copyright 2016 Google Inc. 37445e86bac478dea91da32473e5a01baff637c23fmalita * 47445e86bac478dea91da32473e5a01baff637c23fmalita * Use of this source code is governed by a BSD-style license that can be 57445e86bac478dea91da32473e5a01baff637c23fmalita * found in the LICENSE file. 67445e86bac478dea91da32473e5a01baff637c23fmalita */ 77445e86bac478dea91da32473e5a01baff637c23fmalita 8a427cc4d6b025b38b5bacd97f98325f9770e1769fmalita#include "SkStream.h" 97445e86bac478dea91da32473e5a01baff637c23fmalita#include "Test.h" 107445e86bac478dea91da32473e5a01baff637c23fmalita 11718df0ae3c9ea824eef3b80984550beb5ef2e1f2fmalita#if defined(SK_XML) 12718df0ae3c9ea824eef3b80984550beb5ef2e1f2fmalita 13718df0ae3c9ea824eef3b80984550beb5ef2e1f2fmalita#include "SkDOM.h" 14718df0ae3c9ea824eef3b80984550beb5ef2e1f2fmalita 15125845553bfa25ef86b059d01254148cae708b59fmalitastatic const SkDOM::Node* check_node(skiatest::Reporter* r, const SkDOM& dom, 16125845553bfa25ef86b059d01254148cae708b59fmalita const SkDOM::Node* node, const char* expectedName, 17125845553bfa25ef86b059d01254148cae708b59fmalita SkDOM::Type expectedType) { 18125845553bfa25ef86b059d01254148cae708b59fmalita REPORTER_ASSERT(r, node); 19125845553bfa25ef86b059d01254148cae708b59fmalita if (node) { 20125845553bfa25ef86b059d01254148cae708b59fmalita REPORTER_ASSERT(r, !strcmp(dom.getName(node), expectedName)); 21125845553bfa25ef86b059d01254148cae708b59fmalita REPORTER_ASSERT(r, dom.getType(node) == expectedType); 22125845553bfa25ef86b059d01254148cae708b59fmalita } 23125845553bfa25ef86b059d01254148cae708b59fmalita return node; 24125845553bfa25ef86b059d01254148cae708b59fmalita} 25125845553bfa25ef86b059d01254148cae708b59fmalita 267445e86bac478dea91da32473e5a01baff637c23fmalitaDEF_TEST(SkDOM_test, r) { 277445e86bac478dea91da32473e5a01baff637c23fmalita static const char gDoc[] = 287445e86bac478dea91da32473e5a01baff637c23fmalita "<root a='1' b='2'>" 297445e86bac478dea91da32473e5a01baff637c23fmalita "<elem1 c='3' />" 307445e86bac478dea91da32473e5a01baff637c23fmalita "<elem2 d='4' />" 317445e86bac478dea91da32473e5a01baff637c23fmalita "<elem3 e='5'>" 32125845553bfa25ef86b059d01254148cae708b59fmalita "<subelem1>Some text.</subelem1>" 337445e86bac478dea91da32473e5a01baff637c23fmalita "<subelem2 f='6' g='7'/>" 34125845553bfa25ef86b059d01254148cae708b59fmalita "<subelem3>Some more text.</subelem3>" 357445e86bac478dea91da32473e5a01baff637c23fmalita "</elem3>" 367445e86bac478dea91da32473e5a01baff637c23fmalita "<elem4 h='8'/>" 377445e86bac478dea91da32473e5a01baff637c23fmalita "</root>" 387445e86bac478dea91da32473e5a01baff637c23fmalita ; 397445e86bac478dea91da32473e5a01baff637c23fmalita 40a427cc4d6b025b38b5bacd97f98325f9770e1769fmalita SkMemoryStream docStream(gDoc, sizeof(gDoc) - 1); 41a427cc4d6b025b38b5bacd97f98325f9770e1769fmalita 427445e86bac478dea91da32473e5a01baff637c23fmalita SkDOM dom; 437445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, !dom.getRootNode()); 447445e86bac478dea91da32473e5a01baff637c23fmalita 45a427cc4d6b025b38b5bacd97f98325f9770e1769fmalita const SkDOM::Node* root = dom.build(docStream); 467445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, root && dom.getRootNode() == root); 477445e86bac478dea91da32473e5a01baff637c23fmalita 487445e86bac478dea91da32473e5a01baff637c23fmalita const char* v = dom.findAttr(root, "a"); 497445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, v && !strcmp(v, "1")); 507445e86bac478dea91da32473e5a01baff637c23fmalita v = dom.findAttr(root, "b"); 517445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, v && !strcmp(v, "2")); 527445e86bac478dea91da32473e5a01baff637c23fmalita v = dom.findAttr(root, "c"); 537445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, v == nullptr); 547445e86bac478dea91da32473e5a01baff637c23fmalita 557445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, dom.getFirstChild(root, "elem1")); 567445e86bac478dea91da32473e5a01baff637c23fmalita REPORTER_ASSERT(r, !dom.getFirstChild(root, "subelem1")); 57125845553bfa25ef86b059d01254148cae708b59fmalita 58125845553bfa25ef86b059d01254148cae708b59fmalita { 59125845553bfa25ef86b059d01254148cae708b59fmalita const auto* elem1 = check_node(r, dom, dom.getFirstChild(root), 60125845553bfa25ef86b059d01254148cae708b59fmalita "elem1", SkDOM::kElement_Type); 61125845553bfa25ef86b059d01254148cae708b59fmalita const auto* elem2 = check_node(r, dom, dom.getNextSibling(elem1), 62125845553bfa25ef86b059d01254148cae708b59fmalita "elem2", SkDOM::kElement_Type); 63125845553bfa25ef86b059d01254148cae708b59fmalita const auto* elem3 = check_node(r, dom, dom.getNextSibling(elem2), 64125845553bfa25ef86b059d01254148cae708b59fmalita "elem3", SkDOM::kElement_Type); 65125845553bfa25ef86b059d01254148cae708b59fmalita { 66125845553bfa25ef86b059d01254148cae708b59fmalita const auto* subelem1 = check_node(r, dom, dom.getFirstChild(elem3), 67125845553bfa25ef86b059d01254148cae708b59fmalita "subelem1", SkDOM::kElement_Type); 68125845553bfa25ef86b059d01254148cae708b59fmalita { 69125845553bfa25ef86b059d01254148cae708b59fmalita check_node(r, dom, dom.getFirstChild(subelem1), 70125845553bfa25ef86b059d01254148cae708b59fmalita "Some text.", SkDOM::kText_Type); 71125845553bfa25ef86b059d01254148cae708b59fmalita } 72125845553bfa25ef86b059d01254148cae708b59fmalita const auto* subelem2 = check_node(r, dom, dom.getNextSibling(subelem1), 73125845553bfa25ef86b059d01254148cae708b59fmalita "subelem2", SkDOM::kElement_Type); 74125845553bfa25ef86b059d01254148cae708b59fmalita const auto* subelem3 = check_node(r, dom, dom.getNextSibling(subelem2), 75125845553bfa25ef86b059d01254148cae708b59fmalita "subelem3", SkDOM::kElement_Type); 76125845553bfa25ef86b059d01254148cae708b59fmalita { 77125845553bfa25ef86b059d01254148cae708b59fmalita check_node(r, dom, dom.getFirstChild(subelem3), 78125845553bfa25ef86b059d01254148cae708b59fmalita "Some more text.", SkDOM::kText_Type); 79125845553bfa25ef86b059d01254148cae708b59fmalita } 80125845553bfa25ef86b059d01254148cae708b59fmalita } 81125845553bfa25ef86b059d01254148cae708b59fmalita check_node(r, dom, dom.getNextSibling(elem3), 82125845553bfa25ef86b059d01254148cae708b59fmalita "elem4", SkDOM::kElement_Type); 83125845553bfa25ef86b059d01254148cae708b59fmalita } 847445e86bac478dea91da32473e5a01baff637c23fmalita} 85718df0ae3c9ea824eef3b80984550beb5ef2e1f2fmalita 86718df0ae3c9ea824eef3b80984550beb5ef2e1f2fmalita#endif // SK_XML 87