FLEX-34807
Strengthened test by making sure that the style of the pasted text is not altered. Currently these checks pass (leaving the ones which were are failing before).
diff --git a/automation_tests/src/UnitTest/Tests/FLEX_34807_Test.as b/automation_tests/src/UnitTest/Tests/FLEX_34807_Test.as
index 7cd97ea..872250a 100644
--- a/automation_tests/src/UnitTest/Tests/FLEX_34807_Test.as
+++ b/automation_tests/src/UnitTest/Tests/FLEX_34807_Test.as
@@ -35,6 +35,7 @@
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.edit.TextScrap;
import flashx.textLayout.elements.FlowElement;
+ import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.ITextLayoutFormat;
import flashx.textLayout.formats.TextLayoutFormat;
@@ -44,15 +45,18 @@
public class FLEX_34807_Test extends VellumTestCase
{
- private const PASTED_TEXT:String = '...Hello world!...';
- private const PASTED_HTML:String = '...<i>Hello<b> world</b>!</i>...';
- private const PASTE:TextScrap = new TextScrap(TextConverter.importToFlow(PASTED_HTML, TextConverter.TEXT_FIELD_HTML_FORMAT));
+ private static const PASTED_TEXT:String = '|Hey world!|';
+ private static const PASTED_HTML:String = '<span style="fontSize:12">|<i>Hey<b> world</b>!</i>|</span>';
+ private static const PASTE:TextScrap = new TextScrap(TextConverter.importToFlow(PASTED_HTML, TextConverter.TEXT_FIELD_HTML_FORMAT));
+
+ private static var PASTE_CHAR_STYLES:Array = [];
private var sourceAsPlainText:String;
private var leftBefore:ITextLayoutFormat;
private var rightBefore:ITextLayoutFormat;
private var leftAfter:ITextLayoutFormat;
private var rightAfter:ITextLayoutFormat;
+ private var initialTextLength:Number = NaN;
public function FLEX_34807_Test()
{
@@ -68,14 +72,27 @@
public static function setUpClass():void
{
FileRepository.readFile(TestConfig.getInstance().baseURL, "../../test/testFiles/markup/tlf/HtmlTest.xml");
+ analyseStylesOfPastedText();
+ }
+
+ private static function analyseStylesOfPastedText():void
+ {
+ for(var i:int = 0; i < PASTED_TEXT.length; i++)
+ {
+ PASTE_CHAR_STYLES.push(getFormatOfCharFromFlow(i, PASTE.textFlow));
+ }
}
[Before]
override public function setUpTest():void
{
super.setUpTest();
+
if(!sourceAsPlainText)
sourceAsPlainText = TextConverter.export(testApp.getTextFlow(), TextConverter.PLAIN_TEXT_FORMAT, ConversionType.STRING_TYPE) as String;
+
+ if(isNaN(initialTextLength))
+ initialTextLength = SelManager.textFlow.textLength;
}
[After]
@@ -96,26 +113,11 @@
//then
assertAdjacentTextFormatsNotAltered(0);
+ assertFormattingOfPastedTextNotAltered(0);
assertTextPastedCorrectlyAndExistingTextNotChanged(0);
}
[Test]
- public function paste_in_first_paragraph_in_middle_of_bold_section():void
- {
- //given
- const PASTE_POSITION:int = 16;
- recordTextFormatsBeforeOperation(PASTE_POSITION);
-
- //when
- SelManager.selectRange(PASTE_POSITION, PASTE_POSITION);
- SelManager.pasteTextScrap(PASTE);
-
- //then
- assertAdjacentTextFormatsNotAltered(PASTE_POSITION);
- assertTextPastedCorrectlyAndExistingTextNotChanged(PASTE_POSITION);
- }
-
- [Test]
public function paste_in_first_paragraph():void
{
//given
@@ -128,9 +130,70 @@
//then
assertAdjacentTextFormatsNotAltered(PASTE_POSITION);
+ assertFormattingOfPastedTextNotAltered(PASTE_POSITION);
assertTextPastedCorrectlyAndExistingTextNotChanged(PASTE_POSITION);
}
+ [Test]
+ public function paste_in_first_paragraph_in_middle_of_bold_section():void
+ {
+ //given
+ const PASTE_POSITION:int = 16;
+ recordTextFormatsBeforeOperation(PASTE_POSITION);
+
+ //when
+ SelManager.selectRange(PASTE_POSITION, PASTE_POSITION);
+ SelManager.pasteTextScrap(PASTE);
+
+ //then
+ assertAdjacentTextFormatsNotAltered(PASTE_POSITION);
+ assertFormattingOfPastedTextNotAltered(PASTE_POSITION);
+ assertTextPastedCorrectlyAndExistingTextNotChanged(PASTE_POSITION);
+ }
+
+ [Test]
+ public function paste_in_second_paragraph():void
+ {
+ //given
+ const PASTE_POSITION:int = 170;
+ recordTextFormatsBeforeOperation(PASTE_POSITION);
+
+ //when
+ SelManager.selectRange(PASTE_POSITION, PASTE_POSITION);
+ SelManager.pasteTextScrap(PASTE);
+
+ //then
+ assertAdjacentTextFormatsNotAltered(PASTE_POSITION);
+ assertFormattingOfPastedTextNotAltered(PASTE_POSITION);
+ assertTextPastedCorrectlyAndExistingTextNotChanged(PASTE_POSITION);
+ }
+
+ [Test]
+ public function paste_at_end():void
+ {
+ //given
+ const PASTE_POSITION:int = SelManager.textFlow.textLength - 1;
+ recordTextFormatsBeforeOperation(PASTE_POSITION);
+
+ //when
+ SelManager.selectRange(PASTE_POSITION, PASTE_POSITION);
+ SelManager.pasteTextScrap(PASTE);
+
+ //then
+ assertAdjacentTextFormatsNotAltered(PASTE_POSITION);
+ assertFormattingOfPastedTextNotAltered(PASTE_POSITION);
+ assertTextPastedCorrectlyAndExistingTextNotChanged(PASTE_POSITION);
+ }
+
+ private function assertFormattingOfPastedTextNotAltered(pastePosition:int):void
+ {
+ for(var i:int = 0; i < PASTED_TEXT.length; i++)
+ {
+ var formatOfPastedChar:ITextLayoutFormat = getFormatOfCharAt(pastePosition + i);
+ assertTrue("The style of the pasted text has been altered!", TextLayoutFormat.isEqual(PASTE_CHAR_STYLES[i], formatOfPastedChar));
+ }
+ }
+
private function assertAdjacentTextFormatsNotAltered(pastePosition:int):void
{
recordTextFormatsAfterOperation(pastePosition);
@@ -141,35 +204,40 @@
{
if(pastePosition)
{
- assertNotNull(leftBefore);
- assertNotNull(leftAfter);
- assertTrue(TextLayoutFormat.isEqual(leftBefore, leftAfter));
+ assertNotNull("Couldn't manage to find the format of the character to the left of the pasted text, before the paste operation!", leftBefore);
+ assertNotNull("Couldn't manage to find the format of the character to the left of the pasted text, after the paste operation!", leftAfter);
+ assertTrue("The style of the original text has been altered! (left)", TextLayoutFormat.isEqual(leftBefore, leftAfter));
}
- if(pastePosition < SelManager.textFlow.textLength - 1)
+ if(pastePosition < initialTextLength - 1)
{
- assertNotNull(rightBefore);
- assertNotNull(rightAfter);
- assertTrue(TextLayoutFormat.isEqual(rightBefore, rightAfter));
+ assertNotNull("Couldn't manage to find the format of the character to the right of the pasted text, before the paste operation!", rightBefore);
+ assertNotNull("Couldn't manage to find the format of the character to the right of the pasted text, after the paste operation!", rightAfter);
+ assertTrue("The style of the original text has been altered! (right)", TextLayoutFormat.isEqual(rightBefore, rightAfter));
}
}
private function recordTextFormatsBeforeOperation(pastePosition:int):void
{
leftBefore = pastePosition ? getFormatOfCharAt(pastePosition - 1) : null;
- rightBefore = pastePosition < SelManager.textFlow.textLength - 1 ? getFormatOfCharAt(pastePosition + 1) : null;
+ rightBefore = pastePosition < initialTextLength - 1 ? getFormatOfCharAt(pastePosition + 1) : null;
}
private function recordTextFormatsAfterOperation(pastePosition:int):void
{
leftAfter = pastePosition ? getFormatOfCharAt(pastePosition - 1) : null;
- rightAfter = pastePosition < SelManager.textFlow.textLength - PASTED_TEXT.length - 1 ? getFormatOfCharAt(pastePosition + 1 + PASTED_TEXT.length) : null;
+ rightAfter = pastePosition < initialTextLength - 1 ? getFormatOfCharAt(pastePosition + 1 + PASTED_TEXT.length) : null;
}
- private function getFormatOfCharAt(pastePosition:int):ITextLayoutFormat
+ private function getFormatOfCharAt(position:int, flow:TextFlow = null):ITextLayoutFormat
{
- const charLeftOfPasteBeforeOperation:FlowElement = SelManager.textFlow.findLeaf(pastePosition);
- return charLeftOfPasteBeforeOperation ? charLeftOfPasteBeforeOperation.format : null;
+ return getFormatOfCharFromFlow(position, flow || SelManager.textFlow);
+ }
+
+ private static function getFormatOfCharFromFlow(position:int, flow:TextFlow):ITextLayoutFormat
+ {
+ const elementAtPosition:FlowElement = flow.findLeaf(position);
+ return elementAtPosition ? elementAtPosition.format : null;
}
private function assertTextPastedCorrectlyAndExistingTextNotChanged(pastePosition:int):void