blob: c9f199c7b143ceaa55f0426a87f0dbe262ed3a39 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// 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);
}
}
}