mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
chore: cleanup
This commit is contained in:
15
apps/automated/app/xml-parser-tests/itemTemplates.xml
Normal file
15
apps/automated/app/xml-parser-tests/itemTemplates.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<TabView>
|
||||
<TabView.items>
|
||||
<TabViewItem title="My Tab">
|
||||
<TabViewItem.view>
|
||||
<ListView items="{{ $value }}" itemTemplateSelector="selectItemTemplate">
|
||||
<ListView.itemTemplates>
|
||||
<template key="foo">
|
||||
<Label text="{{ title }}" />
|
||||
</template>
|
||||
</ListView.itemTemplates>
|
||||
</ListView>
|
||||
</TabViewItem.view>
|
||||
</TabViewItem>
|
||||
</TabView.items>
|
||||
</TabView>
|
||||
230
apps/automated/app/xml-parser-tests/xml-parser-tests.ts
Normal file
230
apps/automated/app/xml-parser-tests/xml-parser-tests.ts
Normal file
@@ -0,0 +1,230 @@
|
||||
// >> xml-module-snippet
|
||||
//var xmlModule = require("@nativescript/core/xml");
|
||||
// << xml-module-snippet
|
||||
|
||||
import * as TKUnit from '../tk-unit';
|
||||
import * as xmlModule from '@nativescript/core/xml';
|
||||
import * as fs from '@nativescript/core/file-system';
|
||||
import { Builder } from '@nativescript/core/ui/builder';
|
||||
import { isIOS, Device } from '@nativescript/core/platform';
|
||||
import lazy from '@nativescript/core/utils/lazy';
|
||||
|
||||
const sdkVersion = lazy(() => parseInt(Device.sdkVersion));
|
||||
|
||||
export var test_XmlParser_IsDefined = function () {
|
||||
TKUnit.assertNotEqual(xmlModule.XmlParser, undefined, 'Class XmlParser should be defined!');
|
||||
};
|
||||
|
||||
export var test_ParserEventType_IsDefined = function () {
|
||||
TKUnit.assertNotEqual(xmlModule.ParserEventType, undefined, 'Class ParserEventType should be defined!');
|
||||
};
|
||||
|
||||
export var test_XmlParser_ElementsWithoutAttributesDoNotReportThem = function () {
|
||||
var attributes;
|
||||
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
|
||||
switch (event.eventType) {
|
||||
case xmlModule.ParserEventType.StartElement:
|
||||
attributes = event.attributes;
|
||||
break;
|
||||
}
|
||||
});
|
||||
xmlParser.parse('<element/>');
|
||||
TKUnit.assertEqual(attributes, undefined, 'Expected result: undefined; Actual result: ' + attributes + ';');
|
||||
};
|
||||
|
||||
export var test_XmlParser_EntityReferencesAreDecoded = function () {
|
||||
var data;
|
||||
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
|
||||
switch (event.eventType) {
|
||||
case xmlModule.ParserEventType.Text:
|
||||
data = event.data;
|
||||
break;
|
||||
}
|
||||
});
|
||||
xmlParser.parse('<element><>"&'</element>');
|
||||
TKUnit.assert(data === '<>"&\'', 'Expected result: <>"&\'; Actual result: ' + data + ';');
|
||||
};
|
||||
|
||||
export var test_XmlParser_EntityReferencesInAttributeValuesAreDecoded = function () {
|
||||
var data;
|
||||
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
|
||||
switch (event.eventType) {
|
||||
case xmlModule.ParserEventType.StartElement:
|
||||
data = event.attributes['text'];
|
||||
break;
|
||||
}
|
||||
});
|
||||
xmlParser.parse('<Label text="<>"&'"/>');
|
||||
TKUnit.assert(data === '<>"&\'', 'Expected result: <>"&\'; Actual result: ' + data + ';');
|
||||
};
|
||||
|
||||
export var test_XmlParser_UnicodeEntitiesAreDecoded = function () {
|
||||
var data;
|
||||
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
|
||||
switch (event.eventType) {
|
||||
case xmlModule.ParserEventType.Text:
|
||||
data = event.data;
|
||||
break;
|
||||
}
|
||||
});
|
||||
xmlParser.parse('<element>🤣✓</element>');
|
||||
TKUnit.assert(data === '\uD83E\uDD23\u2713', 'Expected result: \uD83E\uDD23\u2713; Actual result: ' + data + ';');
|
||||
};
|
||||
|
||||
export var test_XmlParser_UnicodeEntitiesInAttributeValuesAreDecoded = function () {
|
||||
var data;
|
||||
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
|
||||
switch (event.eventType) {
|
||||
case xmlModule.ParserEventType.StartElement:
|
||||
data = event.attributes['text'];
|
||||
break;
|
||||
}
|
||||
});
|
||||
xmlParser.parse('<Label text="🤣✓"/>');
|
||||
TKUnit.assert(data === '\uD83E\uDD23\u2713', 'Expected result: \uD83E\uDD23\u2713; Actual result: ' + data + ';');
|
||||
};
|
||||
|
||||
export var test_XmlParser_OnErrorIsCalledWhenAnErrorOccurs = function () {
|
||||
var e;
|
||||
var xmlParser = new xmlModule.XmlParser(
|
||||
function (event: xmlModule.ParserEvent) {
|
||||
//test_XmlParser_OnErrorIsCalledWhenAnErrorOccurs
|
||||
},
|
||||
function (error: Error) {
|
||||
e = error;
|
||||
}
|
||||
);
|
||||
xmlParser.parse('<element></otherElement>');
|
||||
TKUnit.assert(e !== undefined, 'Expected result: error; Actual result: ' + e + ';');
|
||||
};
|
||||
|
||||
export var test_XmlParser_IntegrationTest = function () {
|
||||
if (isIOS && sdkVersion() < 10) {
|
||||
return;
|
||||
}
|
||||
|
||||
var actualResult = '';
|
||||
var xmlParser = new xmlModule.XmlParser(function (event: xmlModule.ParserEvent) {
|
||||
if (event.eventType === xmlModule.ParserEventType.Text && event.data.trim() === '') {
|
||||
// Ignore ignorable whitespace.
|
||||
return;
|
||||
}
|
||||
|
||||
actualResult += event.toString();
|
||||
});
|
||||
|
||||
var file = fs.File.fromPath(fs.path.join(__dirname, 'xml.xml'));
|
||||
var xmlString = file.readTextSync();
|
||||
xmlString = xmlString.replace(/(\r\n|\n|\r)/gm, '\n');
|
||||
xmlParser.parse(xmlString);
|
||||
|
||||
var expectedResult: string;
|
||||
file = fs.File.fromPath(fs.path.join(__dirname, 'xml.expected'));
|
||||
expectedResult = file.readTextSync();
|
||||
|
||||
var i;
|
||||
var maxLength = Math.max(actualResult.length, expectedResult.length);
|
||||
for (i = 0; i < maxLength; i++) {
|
||||
var actualChar;
|
||||
var actualCharCode;
|
||||
if (i <= actualResult.length) {
|
||||
actualChar = actualResult.charAt(i);
|
||||
actualCharCode = actualResult.charCodeAt(i);
|
||||
} else {
|
||||
actualChar = 'undefined';
|
||||
actualCharCode = 'undefined';
|
||||
}
|
||||
|
||||
var expectedChar;
|
||||
var expectedCharCode;
|
||||
if (i <= expectedResult.length) {
|
||||
expectedChar = expectedResult.charAt(i);
|
||||
expectedCharCode = expectedResult.charCodeAt(i);
|
||||
} else {
|
||||
expectedChar = 'undefined';
|
||||
expectedCharCode = 'undefined';
|
||||
}
|
||||
|
||||
TKUnit.assert(actualCharCode === expectedCharCode, 'At index ' + i + ': Actual character is ' + actualChar + '[' + actualCharCode + ']; Expected character is: ' + expectedChar + '[' + expectedCharCode + ']');
|
||||
}
|
||||
};
|
||||
|
||||
export var test_XmlParser_DummyDocumentationTest = function () {
|
||||
// >> xml-parser-snippet
|
||||
var onEventCallback = function (event: xmlModule.ParserEvent) {
|
||||
switch (event.eventType) {
|
||||
case xmlModule.ParserEventType.StartElement:
|
||||
var message = event.eventType + ' ' + event.elementName;
|
||||
if (event.attributes) {
|
||||
message += ', Attributes:';
|
||||
for (var attributeName in event.attributes) {
|
||||
if (event.attributes.hasOwnProperty(attributeName)) {
|
||||
message += ' ' + attributeName + '="' + event.attributes[attributeName] + '"';
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log(message);
|
||||
break;
|
||||
|
||||
case xmlModule.ParserEventType.EndElement:
|
||||
//console.log(event.eventType + " " + event.elementName);
|
||||
break;
|
||||
|
||||
case xmlModule.ParserEventType.Text:
|
||||
var significantText = event.data.trim();
|
||||
if (significantText !== '') {
|
||||
//console.log(event.eventType + "=\"" + significantText + "\"");
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
var onErrorCallback = function (error: Error) {
|
||||
console.log('Error: ' + error.message);
|
||||
};
|
||||
|
||||
var xmlParser = new xmlModule.XmlParser(onEventCallback, onErrorCallback);
|
||||
xmlParser.parse('<Document><First attr1="attribute1" attr2="attribute2">I am first</First><Second>I am second</Second></Document>');
|
||||
//// Calling parse will produce the following console output:
|
||||
//// StartElement Document
|
||||
//// StartElement First, Attributes: attr1 = "attribute1" attr2 = "attribute2"
|
||||
//// Text = "I am first"
|
||||
//// EndElement First
|
||||
//// StartElement Second
|
||||
//// Text = "I am second"
|
||||
//// EndElement Second
|
||||
//// EndElement Document
|
||||
// << xml-parser-snippet
|
||||
};
|
||||
|
||||
export var test_XmlParser_NamespacesTest = function () {
|
||||
if (isIOS && sdkVersion() < 10) {
|
||||
return;
|
||||
}
|
||||
|
||||
var xmlParser = new xmlModule.XmlParser(
|
||||
function (event: xmlModule.ParserEvent) {
|
||||
if (event.eventType !== xmlModule.ParserEventType.StartElement) {
|
||||
return;
|
||||
}
|
||||
|
||||
var expectedResult = event.attributes['expected-namespace'];
|
||||
var actualResult = event.namespace;
|
||||
TKUnit.assert(actualResult === expectedResult, 'Actual: ' + actualResult + '; Expected: ' + expectedResult);
|
||||
},
|
||||
undefined,
|
||||
true
|
||||
);
|
||||
|
||||
var file = fs.File.fromPath(fs.path.join(__dirname, 'xml-with-namespaces.xml'));
|
||||
var xmlString = file.readTextSync();
|
||||
xmlParser.parse(xmlString);
|
||||
};
|
||||
|
||||
export function test_MultiParserTemplate() {
|
||||
const xml = global.loadModule('xml-parser-tests/itemTemplates.xml', true);
|
||||
|
||||
const view: any = Builder.parse(xml);
|
||||
TKUnit.assertNotNull(view.items);
|
||||
TKUnit.assertEqual(view.items.length, 1);
|
||||
}
|
||||
13
apps/automated/app/xml-parser-tests/xml-parser.md
Normal file
13
apps/automated/app/xml-parser-tests/xml-parser.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
nav-title: "xml How-To"
|
||||
title: "xml"
|
||||
environment: nativescript
|
||||
description: "Examples for using xml"
|
||||
previous_url: /ApiReference/xml/HOW-TO,/cookbook/xml
|
||||
---
|
||||
# Xml module
|
||||
Using xml requires the Xml module.
|
||||
{%snippet xml-module-snippet%}
|
||||
### Parse XML
|
||||
{%snippet xml-parser-snippet%}
|
||||
|
||||
20
apps/automated/app/xml-parser-tests/xml-with-namespaces.xml
Normal file
20
apps/automated/app/xml-parser-tests/xml-with-namespaces.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<Element xmlns="http://a-default"
|
||||
xmlns:a1="http://a1"
|
||||
xmlns:a2="http://a2"
|
||||
xmlns:duplicate="http://a-duplicate"
|
||||
expected-namespace="http://a-default">
|
||||
<Element expected-namespace="http://a-default"/>
|
||||
<a1:Element expected-namespace="http://a1"/>
|
||||
<a2:Element expected-namespace="http://a2"/>
|
||||
<Element xmlns="http://b-default"
|
||||
xmlns:b1="http://b1"
|
||||
xmlns:b2="http://b2"
|
||||
xmlns:duplicate="http://b-duplicate"
|
||||
expected-namespace="http://b-default">
|
||||
<Element expected-namespace="http://b-default"/>
|
||||
<b1:Element expected-namespace="http://b1"/>
|
||||
<b2:Element expected-namespace="http://b2"/>
|
||||
<duplicate:Element expected-namespace="http://b-duplicate"/>
|
||||
</Element>
|
||||
</Element>
|
||||
1
apps/automated/app/xml-parser-tests/xml.expected
Normal file
1
apps/automated/app/xml-parser-tests/xml.expected
Normal file
@@ -0,0 +1 @@
|
||||
{"eventType":"StartElement","position":{"line":2,"column":1},"elementName":"DocumentElement","attributes":{"param":"value"}}{"eventType":"StartElement","position":{"line":3,"column":3},"elementName":"First.Element","attributes":{"some.attr":"some.value"}}{"eventType":"Text","position":{"line":3,"column":41},"data":"\n ¶ Some Text ®\n "}{"eventType":"EndElement","position":{"line":5,"column":3},"elementName":"First.Element"}{"eventType":"StartElement","position":{"line":7,"column":3},"elementName":"SecondElement","attributes":{"param2":"something"}}{"eventType":"Text","position":{"line":7,"column":37},"data":"\n Pre-Text "}{"eventType":"StartElement","position":{"line":8,"column":14},"elementName":"Inline"}{"eventType":"Text","position":{"line":8,"column":22},"data":"Inlined text"}{"eventType":"EndElement","position":{"line":8,"column":34},"elementName":"Inline"}{"eventType":"Text","position":{"line":8,"column":43},"data":" Post-text.\n "}{"eventType":"EndElement","position":{"line":9,"column":3},"elementName":"SecondElement"}{"eventType":"StartElement","position":{"line":10,"column":3},"elementName":"entities"}{"eventType":"Text","position":{"line":10,"column":13},"data":"Xml tags begin with \"<\" and end with \">\" Ampersand is & and apostrophe is '"}{"eventType":"EndElement","position":{"line":10,"column":123},"elementName":"entities"}{"eventType":"StartElement","position":{"line":11,"column":3},"elementName":"script"}{"eventType":"CDATA","position":{"line":12,"column":5},"data":"\nfunction sum(a,b)\n{\n return a+b;\n}\n"}{"eventType":"EndElement","position":{"line":18,"column":3},"elementName":"script"}{"eventType":"Comment","position":{"line":19,"column":3},"data":"\n Hello,\n I am a multi-line XML comment.\n"}{"eventType":"EndElement","position":{"line":23,"column":1},"elementName":"DocumentElement"}
|
||||
23
apps/automated/app/xml-parser-tests/xml.xml
Normal file
23
apps/automated/app/xml-parser-tests/xml.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<DocumentElement param="value">
|
||||
<First.Element some.attr="some.value">
|
||||
¶ Some Text ®
|
||||
</First.Element>
|
||||
<?some_pi some_attr="some_value"?>
|
||||
<SecondElement param2="something">
|
||||
Pre-Text <Inline>Inlined text</Inline> Post-text.
|
||||
</SecondElement>
|
||||
<entities>Xml tags begin with "<" and end with ">" Ampersand is & and apostrophe is '</entities>
|
||||
<script>
|
||||
<![CDATA[
|
||||
function sum(a,b)
|
||||
{
|
||||
return a+b;
|
||||
}
|
||||
]]>
|
||||
</script>
|
||||
<!--
|
||||
Hello,
|
||||
I am a multi-line XML comment.
|
||||
-->
|
||||
</DocumentElement>
|
||||
Reference in New Issue
Block a user