// Copyright 2016 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.setTestOnly(); goog.require('goog.dom.xml'); goog.require('goog.testing.asserts'); goog.require('goog.testing.jsunit'); goog.require('registry.testing'); goog.require('registry.xml'); function testEmptyElement_hasNoKeyValue() { assertXmlTurnsIntoJson( {'epp': {}}, ''); } function testSelfClosingRootElement_hasNoKeyValue() { assertXmlTurnsIntoJson( {'epp': {}}, ''); } function testElementWithWhitespaceTextContent_getsIgnored() { assertXmlTurnsIntoJson( {'epp': {}}, ' \r\n '); } function testElementWithTextContent_getsSetToKeyValueField() { assertXmlTurnsIntoJson( {'epp': {'keyValue': 'hello'}}, 'hello'); } function testTextWithSpacesOnSides_getsTrimmed() { assertXmlTurnsIntoJson( {'epp': {'keyValue': 'hello'}}, ' hello '); } function testAttribute_getsSetToFieldPrefixedByAtSymbol() { assertXmlTurnsIntoJson( {'epp': {'@ohmy': 'goth'}}, ''); } function testSingleNestedElement_keyIsNameAndValueIsNode() { assertXmlTurnsIntoJson( {'epp': {'ohmy': {'keyValue': 'goth'}}}, 'goth'); } function testMultipleNestedElements_valueBecomesArray() { assertXmlTurnsIntoJson( {'epp': {'ohmy': [{'keyValue': 'goth1'}, {'keyValue': 'goth2'}]}}, 'goth1goth2'); } function testInterspersedText_throwsError() { assertEquals( 'XML text "hello" interspersed with "there"', assertThrows(function() { registry.xml.convertToJson( goog.dom.xml.loadXml( ' hello there ')); }).message); } function testEppMessage() { assertXmlTurnsIntoJson( { 'epp': { '@xmlns': 'urn:ietf:params:xml:ns:epp-1.0', 'response': { 'result': { '@code': '1000', 'msg': {'keyValue': 'Command completed successfully'} }, 'resData': { 'domain:infData': { '@xmlns:domain': 'urn:ietf:params:xml:ns:domain-1.0', 'domain:name': {'keyValue': 'justine.lol'}, 'domain:roid': {'keyValue': '6-roid'}, 'domain:status': {'@s': 'inactive'}, 'domain:registrant': {'keyValue': 'GK Chesterton'}, 'domain:contact': [ {'@type': 'admin', 'keyValue': ''}, {'@type': 'billing', 'keyValue': 'candycrush'}, {'@type': 'tech', 'keyValue': 'krieger'} ], 'domain:ns': { 'domain:hostObj': [ {'keyValue': 'ns1.justine.lol'}, {'keyValue': 'ns2.justine.lol'} ] }, 'domain:host': {'keyValue': 'ns1.justine.lol'}, 'domain:clID': {'keyValue': 'justine'}, 'domain:crID': {'keyValue': 'justine'}, 'domain:crDate': {'keyValue': '2014-07-10T02:17:02Z'}, 'domain:exDate': {'keyValue': '2015-07-10T02:17:02Z'}, 'domain:authInfo': { 'domain:pw': {'keyValue': 'lolcat'} } } }, 'trID': { 'clTRID': {'keyValue': 'abc-1234'}, 'svTRID': {'keyValue': 'ytk1RO+8SmaDQxrTIdulnw==-4'} } } } }, '' + '' + ' ' + ' ' + ' Command completed successfully' + ' ' + ' ' + ' ' + ' justine.lol' + ' 6-roid' + ' ' + ' GK Chesterton' + ' <justine>' + ' candycrush' + ' krieger' + ' ' + ' ns1.justine.lol' + ' ns2.justine.lol' + ' ' + ' ns1.justine.lol' + ' justine' + ' justine' + ' 2014-07-10T02:17:02Z' + ' 2015-07-10T02:17:02Z' + ' ' + ' lolcat' + ' ' + ' ' + ' ' + ' ' + ' abc-1234' + ' ytk1RO+8SmaDQxrTIdulnw==-4' + ' ' + ' ' + ''); } /** * Asserts {@code xml} turns into {@code json}. * @param {!Object} json * @param {string} xml */ function assertXmlTurnsIntoJson(json, xml) { registry.testing.assertObjectEqualsPretty( json, registry.xml.convertToJson(goog.dom.xml.loadXml(xml))); }