This is an automated email from the ASF dual-hosted git repository.
gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push:
new e172a8b Fix for XML issue reported by Harbs/Yishay after recent
changes. Added test and verified against Chrome/Firefox/IE11/Edge/Opera on
windows (and swf)
new b71e933 Merge branch 'develop' of
https://github.com/apache/royale-asjs into develop
e172a8b is described below
commit e172a8b49ee10b8fc73fe830e0ef30669241d038
Author: greg-dove <[email protected]>
AuthorDate: Fri Jun 21 14:44:02 2019 +1200
Fix for XML issue reported by Harbs/Yishay after recent changes. Added test
and verified against Chrome/Firefox/IE11/Edge/Opera on windows (and swf)
---
frameworks/projects/XML/src/main/royale/XML.as | 53 +++++--
.../language/LanguageTesterIntUint.as | 23 +++
.../reflection/ReflectionTesterNativeTypes.as | 4 +-
.../flexUnitTests/xml/XMLTesterGeneralTest.as | 28 ++++
.../flexUnitTests/xml/XMLTesterStringifyTest.as | 155 +++++++++++++++++++++
5 files changed, 248 insertions(+), 15 deletions(-)
diff --git a/frameworks/projects/XML/src/main/royale/XML.as
b/frameworks/projects/XML/src/main/royale/XML.as
index f0ae94f..f210031 100644
--- a/frameworks/projects/XML/src/main/royale/XML.as
+++ b/frameworks/projects/XML/src/main/royale/XML.as
@@ -32,6 +32,8 @@ package
* Additionally, it has a namespaceURI. Otherwise the
namespaceURI is null.
* the prefix together with the namespaceURI form a QName
*/
+
+
/**
* Memory optimization.
@@ -59,6 +61,11 @@ package
}
return qname;
}
+
+ /**
+ * regex to match the xml declaration
+ */
+ private static const xmlDecl:RegExp = /^\s*<\?xml[^?]*\?>/im;
/**
* Method to free up references to shared QName objects.
@@ -456,10 +463,13 @@ package
errorNS = "na";
}
}
+
+ var decl:String = xmlDecl.exec(xml);
+ if (decl) xml = xml.replace(decl,'');
+ if (ignoreWhitespace) xml = trimXMLWhitespace( xml) ;
//various node types not supported directly
- //maybe it should always wrap (e4x seems to say yes on
p34, 'Semantics' of e4x-Ecma-357.pdf)
- var wrap:Boolean = (xml.indexOf('<?') == 0 &&
xml.indexOf('<?xml ') != 0) || (xml.indexOf('<![CDATA[') == 0) ||
(xml.indexOf('<!--') == 0);
- if (wrap) xml = '<parseRoot>'+xml+'</parseRoot>';
+ //when parsing, always wrap (e4x ref p34, 'Semantics'
of e4x-Ecma-357.pdf)
+ xml = '<parseRoot>'+xml+'</parseRoot>';
try
{
var doc:Document = parser.parseFromString(xml,
"application/xml");
@@ -473,12 +483,19 @@ package
var errorNodes:NodeList =
doc.getElementsByTagNameNS(errorNS, 'parsererror');
if(errorNodes.length > 0)
throw new Error(errorNodes[0].innerHTML);
- if (wrap) doc = doc.childNodes[0];
- for(var i:int=0;i<doc.childNodes.length;i++)
+
+ //parseRoot wrapper
+ doc = doc.childNodes[0];
+
+ var childCount:uint = doc.childNodes.length;
+ var errIfNoRoot:String;
+ for(var i:int=0;i<childCount;i++)
{
var node:Node = doc.childNodes[i];
if(node.nodeType == 1)
{
+ if (errIfNoRoot) errIfNoRoot = null;
+ if (childCount > 1)
this.setNodeKind('element');
_version = doc.xmlVersion;
_encoding = doc.xmlEncoding;
_name =
getQName(node.localName,node.prefix,node.namespaceURI,false);
@@ -490,6 +507,7 @@ package
}
else
{
+
if (node.nodeType == 7) {
if
(XML.ignoreProcessingInstructions) {
this.setNodeKind('text');
@@ -497,12 +515,20 @@ package
_name = null;
this.setValue('');
} else {
+ if (childCount > 1) {
+ //as3 XML
ignores processing instructions outside the doc root tag
+ errIfNoRoot =
'Error #1088: The markup in the document following the root element must be
well-formed.';
+ continue;
+ }
this.setNodeKind('processing-instruction');
this.setName(node.nodeName);
this.setValue(node.nodeValue);
}
} else if (node.nodeType == 4) {
+ if (childCount > 1) {
+ throw new
TypeError('Error #1088: The markup in the document following the root element
must be well-formed.');
+ }
this.setNodeKind('text');
//e4x: The value of the
[[Name]] property is null if and only if the XML object represents an XML
comment or text node
_name = null;
@@ -521,15 +547,17 @@ package
this.setNodeKind('comment');
this.setValue(node.nodeValue);
}
-
-
}
-
- // Do we record the nodes which are
probably processing instructions?
-// var child:XML =
XML.fromNode(node);
-// addChild(child);
+ else if (node.nodeType == 3) {
+ if (childCount > 1 &&
!(XML.ignoreWhitespace && /^\s*$/.test(node.nodeValue))) {
+ throw new
TypeError('Error #1088: The markup in the document following the root element
must be well-formed.');
+ }
+ }
+
}
}
+
+ if (errIfNoRoot) throw new TypeError(errIfNoRoot);
//normalize seems wrong here:
//normalize();
//need to deal with errors
https://bugzilla.mozilla.org/show_bug.cgi?id=45566
@@ -539,12 +567,11 @@ package
private var _children:Array;
private var _attributes:Array;
- private var _processingInstructions:Array;
private var _parent:XML;
private var _value:String;
private var _version:String;
private var _encoding:String;
- private var _appliedNamespace:Namespace;
+
/**
* Memory optimization: Don't create the array unless needed.
*/
diff --git
a/manualtests/UnitTests/src/main/royale/flexUnitTests/language/LanguageTesterIntUint.as
b/manualtests/UnitTests/src/main/royale/flexUnitTests/language/LanguageTesterIntUint.as
index 90f99ca..660d3ae 100644
---
a/manualtests/UnitTests/src/main/royale/flexUnitTests/language/LanguageTesterIntUint.as
+++
b/manualtests/UnitTests/src/main/royale/flexUnitTests/language/LanguageTesterIntUint.as
@@ -163,6 +163,29 @@ package flexUnitTests.language
Assert.assertTrue('Unexpected Number check', untyped === 31.5);
}
+
+
+ [Test]
+ [TestVariance(variance="JS", description="Variance in js
implementation with @royalesuppressresolveuncertain off, strict equality can
fail")]
+ /**
+ * @royalesuppressresolveuncertain c
+ */
+ public function testNoResolveUncertain():void
+ {
+
+ var c:Class = int;
+ var untyped:* = new c(30);
+ var expected:Boolean = isJS ? false : true;
+ Assert.assertEquals('Unexpected int check', untyped === 30,
expected);
+ // b does not have suppression, only c does above (via
@royalesuppressresolveuncertain c)
+ expected = true;
+ var b:Class = String;
+ // c = String;
+ untyped = new b(30);
+ Assert.assertEquals('Unexpected String check', untyped === '30',
expected);
+
+ }
+
}
}
diff --git
a/manualtests/UnitTests/src/main/royale/flexUnitTests/reflection/ReflectionTesterNativeTypes.as
b/manualtests/UnitTests/src/main/royale/flexUnitTests/reflection/ReflectionTesterNativeTypes.as
index feae9eb..d37f38f 100644
---
a/manualtests/UnitTests/src/main/royale/flexUnitTests/reflection/ReflectionTesterNativeTypes.as
+++
b/manualtests/UnitTests/src/main/royale/flexUnitTests/reflection/ReflectionTesterNativeTypes.as
@@ -172,7 +172,7 @@ package flexUnitTests.reflection
var def:TypeDefinition = describeType(inst);
- RoyaleUnitTestRunner.consoleOut('def name is '+def.name);
+ // RoyaleUnitTestRunner.consoleOut('def name is '+def.name);
//This is treated as Number
Assert.assertEquals("Unexpected type name", def.name, "int");
@@ -211,7 +211,7 @@ package flexUnitTests.reflection
Assert.assertEquals("Unexpected type name",
getQualifiedClassName(Vector.<uint>), "Vector.<uint>");
Assert.assertEquals("Unexpected type",
getDefinitionByName("Vector.<uint>"), Vector.<uint>);
var def:TypeDefinition = describeType(Vector.<uint>);
- RoyaleUnitTestRunner.consoleOut(def.toString(true));
+ // RoyaleUnitTestRunner.consoleOut(def.toString(true));
Assert.assertEquals("Unexpected type name", def.name,
"Vector.<uint>");
}
diff --git
a/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
b/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
index 6b2cf8b..3765074 100644
---
a/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
+++
b/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterGeneralTest.as
@@ -811,5 +811,33 @@ package flexUnitTests.xml
//account for variation in output order of attributes and
namespace declarations (from native DOMParser)
Assert.assertTrue('unexpected complex stringify results',
xmlString == expected || xmlString == alternate);
}
+
+
+ [Test]
+ public function testTopLevelProcessingInstructions():void{
+ var xmlSource:String = '<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>\n' +
+ '<?aid style="50" type="snippet" readerVersion="6.0"
featureSet="257" product="14.0(209)" ?>\n' +
+ '<?aid SnippetType="PageItem"?>';
+
+ XML.ignoreProcessingInstructions = true;
+ var xml:XML = new XML(xmlSource);
+
+
+ Assert.assertTrue('unexpected toSting result', xml.toString() ==
'');
+ Assert.assertTrue('unexpected toSting result', xml.nodeKind() ==
'text');
+
+
+ XML.ignoreProcessingInstructions = false;
+ var parseError:Boolean;
+ try {
+ xml = new XML(xmlSource);
+ } catch (e:Error)
+ {
+ //RoyaleUnitTestRunner.consoleOut(e.message);
+ parseError = true;
+ }
+
//RoyaleUnitTestRunner.consoleOut('testTopLevelProcessingInstructions
'+xml.nodeKind());
+ Assert.assertTrue('error was expected', parseError)
+ }
}
}
diff --git
a/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterStringifyTest.as
b/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterStringifyTest.as
index f7a1b1e..269d683 100644
---
a/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterStringifyTest.as
+++
b/manualtests/UnitTests/src/main/royale/flexUnitTests/xml/XMLTesterStringifyTest.as
@@ -152,6 +152,161 @@ package flexUnitTests.xml
}
+
+ [Test]
+ public function stringifyAdvanced2():void{
+ XML.ignoreProcessingInstructions = true;
+ var xmlSource:String = '<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>\n' +
+ '<?aid style="50" type="snippet" readerVersion="6.0"
featureSet="257" product="14.0(209)" ?>\n' +
+ '<?aid SnippetType="PageItem"?>\n' +
+ '<Document LinkedSpreads="undefined" DOMVersion="14.0"
Self="d">\n' +
+ '\t<Color Self="Color/Black" Model="Process" Space="CMYK"
ColorValue="0 0 0 100" ColorOverride="Specialblack"
AlternateSpace="NoAlternateColor" AlternateColorValue="" Name="Black"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch3" />\n' +
+ '\t<Swatch Self="Swatch/None" Name="None"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch0" />\n' +
+ '\t<Str Self="Str/$ID/Solid" Name="$ID/Solid" />\n' +
+ '\t<RCS Self="u77">\n' +
+ '\t\t<CharacterStyle Self="CharacterStyle/$ID/[No
character style]" Imported="false" Spl="false" EmitCss="true"
StyleUniqueId="$ID/" IncludeClass="true" Name="$ID/[No character style]" />\n' +
+ '\t</RCS>\n' +
+ '\t<Nu Self="Nu/$ID/[Default]" Name="$ID/[Default]"
ContinueNumbersAcrossStories="false" ContinueNumbersAcrossDocuments="false"
/>\n' +
+ '\t<RootParagraphStyleGroup Self="u76">\n' +
+ '\t\t\n' +
+ '\t\t\n' +
+ '\t</RootParagraphStyleGroup>\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t<Story Self="u180" UserText="true"
IsEndnoteStory="false" AppliedTOCStyle="n" TrackChanges="false"
StoryTitle="$ID/" AppliedNamedGrid="n">\n' +
+ '\t\t<StoryPreference OpticalMarginAlignment="false"
OpticalMarginSize="12" FrameType="TextFrameType" StoryOrientation="Horizontal"
StoryDirection="LeftToRightDirection" />\n' +
+ '\t\t<InCopyExportOption IncludeGraphicProxies="true"
IncludeAllResources="false" />\n' +
+ '\t\t<ParagraphStyleRange
AppliedParagraphStyle="ParagraphStyle/$ID/NormalParagraphStyle">\n' +
+ '\t\t\t<CharacterStyleRange
AppliedCharacterStyle="CharacterStyle/$ID/[No character style]"
PointSize="20">\n' +
+ '\t\t\t\t<Content>a</Content>\n' +
+ '\t\t\t\t<Br />\n' +
+ '\t\t\t\t<Content>s who work on the tickes.</Content>\n' +
+ '\t\t\t</CharacterStyleRange>\n' +
+ '\t\t</ParagraphStyleRange>\n' +
+ '\t</Story>\n' +
+ '\t<ColorGroup Self="ColorGroup/[Root Color Group]"
Name="[Root Color Group]" IsRootColorGroup="true">\n' +
+ '\t\t<ColorGroupSwatch Self="u223ColorGroupSwatch0"
SwatchItemRef="Swatch/None" />\n' +
+ '\t\t<ColorGroupSwatch Self="u223ColorGroupSwatch3"
SwatchItemRef="Color/Black" />\n' +
+ '\t</ColorGroup>\n' +
+ '</Document>';
+
+ var xml:XML = new XML(xmlSource);
+
+
+ var expected:String = '<Document LinkedSpreads="undefined"
DOMVersion="14.0" Self="d">\n' +
+ ' <Color Self="Color/Black" Model="Process" Space="CMYK"
ColorValue="0 0 0 100" ColorOverride="Specialblack"
AlternateSpace="NoAlternateColor" AlternateColorValue="" Name="Black"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch3"/>\n' +
+ ' <Swatch Self="Swatch/None" Name="None"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch0"/>\n' +
+ ' <Str Self="Str/$ID/Solid" Name="$ID/Solid"/>\n' +
+ ' <RCS Self="u77">\n' +
+ ' <CharacterStyle Self="CharacterStyle/$ID/[No
character style]" Imported="false" Spl="false" EmitCss="true"
StyleUniqueId="$ID/" IncludeClass="true" Name="$ID/[No character style]"/>\n' +
+ ' </RCS>\n' +
+ ' <Nu Self="Nu/$ID/[Default]" Name="$ID/[Default]"
ContinueNumbersAcrossStories="false"
ContinueNumbersAcrossDocuments="false"/>\n' +
+ ' <RootParagraphStyleGroup Self="u76"/>\n' +
+ ' <Story Self="u180" UserText="true"
IsEndnoteStory="false" AppliedTOCStyle="n" TrackChanges="false"
StoryTitle="$ID/" AppliedNamedGrid="n">\n' +
+ ' <StoryPreference OpticalMarginAlignment="false"
OpticalMarginSize="12" FrameType="TextFrameType" StoryOrientation="Horizontal"
StoryDirection="LeftToRightDirection"/>\n' +
+ ' <InCopyExportOption IncludeGraphicProxies="true"
IncludeAllResources="false"/>\n' +
+ ' <ParagraphStyleRange
AppliedParagraphStyle="ParagraphStyle/$ID/NormalParagraphStyle">\n' +
+ ' <CharacterStyleRange
AppliedCharacterStyle="CharacterStyle/$ID/[No character style]"
PointSize="20">\n' +
+ ' <Content>a</Content>\n' +
+ ' <Br/>\n' +
+ ' <Content>s who work on the tickes.</Content>\n' +
+ ' </CharacterStyleRange>\n' +
+ ' </ParagraphStyleRange>\n' +
+ ' </Story>\n' +
+ ' <ColorGroup Self="ColorGroup/[Root Color Group]"
Name="[Root Color Group]" IsRootColorGroup="true">\n' +
+ ' <ColorGroupSwatch Self="u223ColorGroupSwatch0"
SwatchItemRef="Swatch/None"/>\n' +
+ ' <ColorGroupSwatch Self="u223ColorGroupSwatch3"
SwatchItemRef="Color/Black"/>\n' +
+ ' </ColorGroup>\n' +
+ '</Document>';
+
+ var outString:String = xml.toString();
+
+ //RoyaleUnitTestRunner.consoleOut('stringifyAdvanced2:\n' +
outString );
+
+ //the order of toString output can be quite different for some
browsers, but the length should be identical
+ Assert.assertTrue('unexpected toString result', outString.length
== expected.length);
+ }
+
+ [Test]
+ public function stringifyAdvanced3():void{
+ //AS3 XML ignores processing instructions outside the root tag,
even when it is told not to
+ //This is (I think) because there is no concept of a 'Document'
level XML that is different to a regular XML node
+ XML.ignoreProcessingInstructions = false;
+ var xmlSource:String = '<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>\n' +
+ '<?aid style="50" type="snippet" readerVersion="6.0"
featureSet="257" product="14.0(209)" ?>\n' +
+ '<?aid SnippetType="PageItem"?>\n' +
+ '<Document LinkedSpreads="undefined" DOMVersion="14.0"
Self="d">\n' +
+ '\t<Color Self="Color/Black" Model="Process" Space="CMYK"
ColorValue="0 0 0 100" ColorOverride="Specialblack"
AlternateSpace="NoAlternateColor" AlternateColorValue="" Name="Black"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch3" />\n' +
+ '\t<Swatch Self="Swatch/None" Name="None"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch0" />\n' +
+ '\t<Str Self="Str/$ID/Solid" Name="$ID/Solid" />\n' +
+ '\t<RCS Self="u77">\n' +
+ '\t\t<CharacterStyle Self="CharacterStyle/$ID/[No
character style]" Imported="false" Spl="false" EmitCss="true"
StyleUniqueId="$ID/" IncludeClass="true" Name="$ID/[No character style]" />\n' +
+ '\t</RCS>\n' +
+ '\t<Nu Self="Nu/$ID/[Default]" Name="$ID/[Default]"
ContinueNumbersAcrossStories="false" ContinueNumbersAcrossDocuments="false"
/>\n' +
+ '\t<RootParagraphStyleGroup Self="u76">\n' +
+ '\t\t\n' +
+ '\t\t\n' +
+ '\t</RootParagraphStyleGroup>\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t\n' +
+ '\t<Story Self="u180" UserText="true"
IsEndnoteStory="false" AppliedTOCStyle="n" TrackChanges="false"
StoryTitle="$ID/" AppliedNamedGrid="n">\n' +
+ '\t\t<StoryPreference OpticalMarginAlignment="false"
OpticalMarginSize="12" FrameType="TextFrameType" StoryOrientation="Horizontal"
StoryDirection="LeftToRightDirection" />\n' +
+ '\t\t<InCopyExportOption IncludeGraphicProxies="true"
IncludeAllResources="false" />\n' +
+ '\t\t<ParagraphStyleRange
AppliedParagraphStyle="ParagraphStyle/$ID/NormalParagraphStyle">\n' +
+ '\t\t\t<CharacterStyleRange
AppliedCharacterStyle="CharacterStyle/$ID/[No character style]"
PointSize="20">\n' +
+ '\t\t\t\t<Content>a</Content>\n' +
+ '\t\t\t\t<Br />\n' +
+ '\t\t\t\t<Content>s who work on the tickes.</Content>\n' +
+ '\t\t\t</CharacterStyleRange>\n' +
+ '\t\t</ParagraphStyleRange>\n' +
+ '\t</Story>\n' +
+ '\t<ColorGroup Self="ColorGroup/[Root Color Group]"
Name="[Root Color Group]" IsRootColorGroup="true">\n' +
+ '\t\t<ColorGroupSwatch Self="u223ColorGroupSwatch0"
SwatchItemRef="Swatch/None" />\n' +
+ '\t\t<ColorGroupSwatch Self="u223ColorGroupSwatch3"
SwatchItemRef="Color/Black" />\n' +
+ '\t</ColorGroup>\n' +
+ '</Document>';
+
+ var xml:XML = new XML(xmlSource);
+ XML.ignoreProcessingInstructions = true;
+
+ var outString:String = xml.toString();
+ var expected:String = '<Document LinkedSpreads="undefined"
DOMVersion="14.0" Self="d">\n' +
+ ' <Color Self="Color/Black" Model="Process" Space="CMYK"
ColorValue="0 0 0 100" ColorOverride="Specialblack"
AlternateSpace="NoAlternateColor" AlternateColorValue="" Name="Black"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch3"/>\n' +
+ ' <Swatch Self="Swatch/None" Name="None"
ColorEditable="false" ColorRemovable="false" Visible="true"
SwatchCreatorID="7937" SwatchColorGroupReference="u223ColorGroupSwatch0"/>\n' +
+ ' <Str Self="Str/$ID/Solid" Name="$ID/Solid"/>\n' +
+ ' <RCS Self="u77">\n' +
+ ' <CharacterStyle Self="CharacterStyle/$ID/[No
character style]" Imported="false" Spl="false" EmitCss="true"
StyleUniqueId="$ID/" IncludeClass="true" Name="$ID/[No character style]"/>\n' +
+ ' </RCS>\n' +
+ ' <Nu Self="Nu/$ID/[Default]" Name="$ID/[Default]"
ContinueNumbersAcrossStories="false"
ContinueNumbersAcrossDocuments="false"/>\n' +
+ ' <RootParagraphStyleGroup Self="u76"/>\n' +
+ ' <Story Self="u180" UserText="true"
IsEndnoteStory="false" AppliedTOCStyle="n" TrackChanges="false"
StoryTitle="$ID/" AppliedNamedGrid="n">\n' +
+ ' <StoryPreference OpticalMarginAlignment="false"
OpticalMarginSize="12" FrameType="TextFrameType" StoryOrientation="Horizontal"
StoryDirection="LeftToRightDirection"/>\n' +
+ ' <InCopyExportOption IncludeGraphicProxies="true"
IncludeAllResources="false"/>\n' +
+ ' <ParagraphStyleRange
AppliedParagraphStyle="ParagraphStyle/$ID/NormalParagraphStyle">\n' +
+ ' <CharacterStyleRange
AppliedCharacterStyle="CharacterStyle/$ID/[No character style]"
PointSize="20">\n' +
+ ' <Content>a</Content>\n' +
+ ' <Br/>\n' +
+ ' <Content>s who work on the tickes.</Content>\n' +
+ ' </CharacterStyleRange>\n' +
+ ' </ParagraphStyleRange>\n' +
+ ' </Story>\n' +
+ ' <ColorGroup Self="ColorGroup/[Root Color Group]"
Name="[Root Color Group]" IsRootColorGroup="true">\n' +
+ ' <ColorGroupSwatch Self="u223ColorGroupSwatch0"
SwatchItemRef="Swatch/None"/>\n' +
+ ' <ColorGroupSwatch Self="u223ColorGroupSwatch3"
SwatchItemRef="Color/Black"/>\n' +
+ ' </ColorGroup>\n' +
+ '</Document>';
+ //RoyaleUnitTestRunner.consoleOut('stringifyAdvanced3:\n' +
outString);
+
+ //the order of toString output can be quite different for some
browsers, but the length should be identical
+ Assert.assertTrue('unexpected toString result', outString.length
== expected.length);
+ }
+
[Test]
public function testCDATA():void{