| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // Licensed to the Apache Software Foundation (ASF) under one or more |
| // contributor license agreements. See the NOTICE file distributed with |
| // this work for additional information regarding copyright ownership. |
| // The ASF licenses this file to You 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. |
| // |
| //////////////////////////////////////////////////////////////////////////////// |
| package UnitTest.Tests |
| { |
| import UnitTest.ExtendedClasses.TestDescriptor; |
| import UnitTest.ExtendedClasses.TestSuiteExtended; |
| import UnitTest.ExtendedClasses.VellumTestCase; |
| import UnitTest.Fixtures.TestConfig; |
| |
| import flash.events.*; |
| |
| import flashx.textLayout.*; |
| import flashx.textLayout.edit.*; |
| import flashx.textLayout.elements.FlowElement; |
| import flashx.textLayout.elements.FlowGroupElement; |
| import flashx.textLayout.elements.InlineGraphicElement; |
| import flashx.textLayout.elements.ParagraphElement; |
| |
| import mx.utils.LoaderUtil; |
| |
| public class TextFlowEditTest extends VellumTestCase |
| { |
| public function TextFlowEditTest(methodName:String, testID:String, testConfig:TestConfig, testXML:XML = null) |
| { |
| super(methodName, testID, testConfig); |
| |
| // Note: These must correspond to a Watson product area (case-sensitive) |
| metaData.productArea = "Editing"; |
| } |
| |
| public static function suite(testConfig:TestConfig, ts:TestSuiteExtended):void |
| { |
| ts.addTestDescriptor (new TestDescriptor (TextFlowEditTest, "simulateClipboardTest", testConfig ) ); //HBS |
| ts.addTestDescriptor (new TestDescriptor (TextFlowEditTest, "addChildTest", testConfig ) ); |
| ts.addTestDescriptor (new TestDescriptor (TextFlowEditTest, "removeChildTest", testConfig ) ); |
| } |
| |
| // Returns the string from begIdx through and including endIdx |
| private function getText( begIdx:int, endIdx:int ): String |
| { |
| var outString:String = ""; |
| |
| for ( var x:int = begIdx; x < endIdx; x++ ) |
| { |
| outString += SelManager.textFlow.getCharAtPosition(x); |
| } |
| |
| return outString; |
| } |
| |
| // Tests FlowGroupElement's addChild and addChildAt on TextFlow |
| public function addChildTest():void |
| { |
| var origLength:int = SelManager.textFlow.textLength; |
| var firstPara:FlowElement = SelManager.textFlow.getChildAt(0).deepCopy(); |
| |
| // Test addChild |
| SelManager.textFlow.removeChildAt(0); |
| var flowLength:int = SelManager.textFlow.textLength; |
| var tempPara:FlowElement = SelManager.textFlow.getChildAt(0).deepCopy(); |
| SelManager.textFlow.addChild(tempPara); |
| flowLength *= 2; |
| assertTrue( "addChild failed on textFlow", |
| flowLength == SelManager.textFlow.textLength ); |
| |
| // Try to add an already added element this should simply replace it |
| SelManager.textFlow.addChild(tempPara); |
| assertTrue( "readdChild failed on textFlow", |
| flowLength == SelManager.textFlow.textLength && tempPara.parent == SelManager.textFlow && tempPara == SelManager.textFlow.getChildAt(SelManager.textFlow.numChildren-1)); |
| |
| // Test addChildAt |
| SelManager.textFlow.addChildAt(1,firstPara); |
| SelManager.textFlow.removeChildAt(2); |
| assertTrue( "addChildAt failed on textFlow", |
| origLength == SelManager.textFlow.textLength ); |
| assertTrue ( "addChildAt failed to place child at correct position", |
| getText(0,7) == "The man" ); |
| } |
| |
| // Tests FlowGroupElement's removeChild and removeChildAt on TextFlow |
| public function removeChildTest():void |
| { |
| SelManager.textFlow.removeChildAt(0); |
| assertTrue( "Removing first child paragraph failed", |
| SelManager.textFlow.getChildAt(1) == null ); |
| |
| SelManager.selectRange(25,25); |
| SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseURL,"../../test/testFiles/assets/gremlin.jpg"), 20, 20 ); |
| |
| var paraElem:FlowGroupElement = SelManager.textFlow.getChildAt(0) as ParagraphElement; |
| var imgElem:FlowElement = paraElem.getChildAt(paraElem.findChildIndexAtPosition(25)); |
| assertTrue("Expected InlineImageElement not found", imgElem is InlineGraphicElement ); |
| paraElem.removeChild(imgElem); |
| |
| assertTrue("FlowGroupElement method removeChild failed to remove InlineGraphic", |
| !(paraElem.getChildAt( |
| paraElem.findChildIndexAtPosition(25)) |
| is InlineGraphicElement) ) |
| |
| // Try to remove an element that isn't here |
| var gotError:Boolean = false; |
| try |
| { |
| SelManager.textFlow.removeChild(imgElem); |
| } |
| catch ( e:ArgumentError ) |
| { |
| gotError = true; |
| } |
| |
| assertTrue( "Removing invalid child element failed to throw error", |
| gotError ); |
| } |
| |
| /** |
| * Selects the characters between the 10th and 50th characters and does a cut. It then |
| * does an undo, redo, and another undo of the cut operation. |
| * Verifies that there is the correct amount of characters on the clipboard after the cut operation. |
| * Verifies that the correct amount of characters are left in the document after the cut operation. |
| * Verifies that the correct amount of characters are left in the doucment after undoing the cut operation. |
| * Verifies that the correct amount of characters are left in the document after redoing the cut operation. |
| * Verifies that the correct amount of characters are left in the document after re-undoing the cut operation. |
| */ |
| public function simulateClipboardTest():void //HBS |
| { |
| var startIndx:int = 10; |
| var endIndx:int = 50; |
| |
| SelManager.selectRange(startIndx,endIndx); |
| var initLength:uint = SelManager.textFlow.textLength; |
| var peudoClipboard:TextScrap = SelManager.cutTextScrap(); |
| var endLength:uint = SelManager.textFlow.textLength; |
| assertTrue("Text length is incorrect after a cut operation", endLength == initLength - (endIndx - startIndx) ); |
| |
| SelManager.undo(); |
| var afterUndoLength:uint = SelManager.textFlow.textLength; |
| assertTrue("Text length is incorrect after undoing a cut operation", afterUndoLength == initLength); |
| |
| //everything is ok so far if we get down here. Now, redo the undo operation and |
| //make suer the flow goes back to the endLength |
| |
| SelManager.redo(); |
| var afterRedoLength:uint = SelManager.textFlow.textLength; |
| assertTrue("Text length is incorrect after redoing a cut operation", afterRedoLength == endLength); |
| |
| //everything is ok so far if we get down here. Now, do an undo again to get |
| //the doc back to it's original state so that we can go on with tests. |
| |
| SelManager.undo(); |
| afterUndoLength = SelManager.textFlow.textLength; |
| assertTrue("Text length is incorrect after undoing a cut operation", afterUndoLength == initLength); |
| } |
| } |
| } |