blob: 2ef287204c6b05db349123fbf3c34348eb9d2def [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.display.Graphics;
import flash.display.Sprite;
import flash.errors.IOError;
import flash.events.*;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.text.engine.FontWeight;
import flash.text.engine.Kerning;
import flash.text.engine.TextLine;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.compose.StandardFlowComposer;
import flashx.textLayout.compose.TextFlowLine;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.container.ScrollPolicy;
import flashx.textLayout.conversion.ITextImporter;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.edit.*;
import flashx.textLayout.elements.FlowElement;
import flashx.textLayout.elements.FlowLeafElement;
import flashx.textLayout.elements.InlineGraphicElement;
import flashx.textLayout.elements.InlineGraphicElementStatus;
import flashx.textLayout.elements.LinkElement;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.elements.TextRange;
import flashx.textLayout.events.StatusChangeEvent;
import flashx.textLayout.events.UpdateCompleteEvent;
import flashx.textLayout.formats.*;
import flashx.textLayout.operations.FlowOperation;
import flashx.textLayout.tlf_internal;
import flashx.textLayout.utils.GeometryUtil;
use namespace tlf_internal;
import mx.utils.LoaderUtil;
import flashx.textLayout.conversion.ITextLayoutImporter;
public class FETest extends VellumTestCase
{
private var data:Array;
private var callback:Boolean = false;
private var src:String;
private var baseImageURL:String;
private var indx1:int;
private var indx2:int;
private var indx3:int;
private var img1:InlineGraphicElement;
private var img2:InlineGraphicElement;
private var img3:InlineGraphicElement;
public function FETest(methodName:String, testID:String, data:Array, testConfig:TestConfig, testXML:XML=null)
{
super(methodName, testID, testConfig, testXML);
this.data = data;
this.TestID = this.TestID + ":";
for each (var url:String in data)
{
this.TestID = this.TestID + ":" + url;
if(url.search(".swf") != -1){
TestData["bitmapSnapshot"] = "false";
}
}
baseImageURL = LoaderUtil.createAbsoluteURL(baseURL, "../../test/testFiles/assets/");
// Note: These must correspond to a Watson product area (case-sensitive)
metaData.productArea = "Graphics";
}
public static function suiteFromXML(testListXML:XML, testConfig:TestConfig, ts:TestSuiteExtended):void
{
var writingDirection:String = testConfig.writingDirection[0] + "_" + testConfig.writingDirection[1];
for each (var testCaseXML:XML in testListXML.*)
{
if (testCaseXML.localName() == "TestCase" &&
testCaseXML.TestData.(@name == writingDirection).toString() != "false")
{
var fe:XMLList = testCaseXML.TestData.(@name == "foreignElement");
for each (var battery:String in fe.toString().split(","))
{
var array:Array = new Array();
if(battery.indexOf("+") != -1){
for each (var element:String in battery.split("+"))
{
for each (var group:* in fe.@dataGroup.toString().split(","))
{
var dg:XMLList =
testListXML.DataGroup.(@group == group.toString());
for each (var url:XML in dg.*)
{
if(battery.indexOf(url.@name.toString()) != -1)
{
array.push(url.@url.toString());
}
}
}
}
}else{
for each (var group2:* in fe.@dataGroup.toString().split(","))
{
var dg2:XMLList =
testListXML.DataGroup.(@group == group2.toString());
for each (var url2:XML in dg2.*)
{
if(battery.indexOf(url2.@name.toString()) != -1)
{
array.push(url2.@url.toString());
break;
}
}
}
}
var testID:String = testCaseXML.@functionName.toString();
for each (var urlStr:String in array)
{
testID = testID + "-" + urlStr;
}
var tempXML:XML = testCaseXML.copy();
tempXML.appendChild (<TestData name="id">{testID}</TestData>);
ts.addTestDescriptor(new TestDescriptor (FETest, tempXML.@functionName, testConfig, tempXML, null, array));
}
}
}
}
/*
* This method is included, commented out, as an example of how to
* set up a FE test in such a way that the images are recorded
* in the snapshotting process.
public function insertImageTest(callBack:Object = null):void
{
if(!callback){
callback = true;
TestFrame.container.addEventListener(Event.ENTER_FRAME,addAsync(insertImageTest,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
src = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertImage(src,width,height,false,"insert image");
}else{
// examine the results
var index:int = SelManager.textFlow.textLength/2;
var elem:LeafElement = SelManager.textFlow.findLeaf(index);
var img:InlineGraphic;
assertTrue("inserted image element not found",elem is InlineGraphic);
if (elem is InlineGraphic)
{
img = InlineGraphic(elem);
if(img.loadStatus != InlineGraphic.LOAD_COMPLETE){
SelManager.textFlow.addEventListener(Event.ENTER_FRAME,addAsync(insertImageTest,2500,null),false,0,true);
}else{
assertTrue("inserted image is the wrong width",img.width == 20);
assertTrue("inserted image is the wrong height",img.height == 20);
assertTrue("inserted image has the wrong uri",img.src == src);
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
}
} */
/**
* Select halfway through the flow and insert an image using a string source
*/
public function insertImageAsString(callBack:Object = null):void
{
if(!callback)
{
callback = true;
TestFrame.container.addEventListener(Event.ENTER_FRAME,addAsync(insertImageAsString,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var flowLength:int = SelManager.textFlow.textLength;
var src:String = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
var inlineGraphicElement:InlineGraphicElement = SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(startIndx);
assertTrue("Return value of insertInlineGraphic doesn't match what is found", inlineGraphicElement == elem);
assertTrue("inserted InlineGraphicElement element not found",elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic", (flowLength + 1) - (endIndx - startIndx));
assertTrue("unexpected range selection after replacing text with graphic", SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic", SelManager.anchorPosition == startIndx + 1);
if (elem is InlineGraphicElement)
{
var img:InlineGraphicElement = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong source",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,src));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
else // Make sure the image is ready before we let the snapshot go
{
elem = SelManager.textFlow.findLeaf(SelManager.textFlow.textLength/2);
img = InlineGraphicElement(elem);
if(img.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(Event.ENTER_FRAME,addAsync(insertImageAsString,2500,null),false,0,true);
}
}
}
private function createFilledSprite(width:Number, height:Number, color:int):Sprite
{
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(color); // red
sprite.graphics.drawRect(0,0,width,height);
sprite.graphics.endFill();
return sprite;
}
/**
* Select a quarter of the way through the flow and insert an image using a DisplayObject source
*/
public function insertImageAsDisplayObject(callBack:Object = null):void
{
if(!callback)
{
callback = true;
TestFrame.container.addEventListener(Event.ENTER_FRAME,addAsync(insertImageAsDisplayObject,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/4;
var endIndx:int = startIndx + 5; // replace existing text
var flowLength:int = SelManager.textFlow.textLength;
var sprite:Sprite = createFilledSprite(100, 100, 0xff0000);
var src:Object = sprite;
var width:int = 100;
var height:int = 100;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(src,width,height);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted InlineGraphicElement element not found",elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic", (flowLength + 1) - (endIndx - startIndx));
assertTrue("unexpected range selection after replacing text with graphic", SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic", SelManager.anchorPosition == startIndx + 1);
if (elem is InlineGraphicElement)
{
var img:InlineGraphicElement = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong source",img.source == src);
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
else // Make sure the image is ready before we let the snapshot go
{
elem = SelManager.textFlow.findLeaf((SelManager.textFlow.textLength+5)/4);
img = InlineGraphicElement(elem);
if(img.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(Event.ENTER_FRAME,addAsync(insertImageAsDisplayObject,2500,null),false,0,true);
}
}
}
/**
* Select a third of the way through the flow and insert an image using a URLRequest Source
*/
public function insertImageAsURLRequest(callBack:Object = null):void
{
try
{
if(!callback)
{
callback = true;
TestFrame.container.addEventListener(Event.ENTER_FRAME,addAsync(insertImageAsURLRequest,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/3;
var endIndx:int = startIndx + 5; // replace existing text
var flowLength:int = SelManager.textFlow.textLength;
var url:URLRequest = new URLRequest("http://www.adobe.com/images/shared/download_buttons/get_adobe_flash_player.png");
var src:Object = url;
var width:int = 106;
var height:int = 32;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(src,width,height);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted InlineGraphicElement element not found", elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic", (flowLength + 1) - (endIndx - startIndx));
assertTrue("unexpected range selection after replacing text with graphic", SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic", SelManager.anchorPosition == startIndx + 1);
if (elem is InlineGraphicElement)
{
var img:InlineGraphicElement = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong source",img.source == src);
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
else // Make sure the image is ready before we let the snapshot go
{
elem = SelManager.textFlow.findLeaf((SelManager.textFlow.textLength+2)/3);
img = InlineGraphicElement(elem);
if(img.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(Event.ENTER_FRAME,addAsync(insertImageAsURLRequest,2500,null),false,0,true);
}
}
}
catch ( err:IOError )
{
fail( "Test error while loading image from URL: " + err.message );
}
}
/**
* Test for Watson 2609303
*/
public function insertAtEndAndUndo(callBack:Object = null):void
{
var elem:FlowLeafElement;
var startIndx:int;
if(!callback)
{
callback = true;
TestFrame.container.addEventListener(Event.ENTER_FRAME,addAsync(insertAtEndAndUndo,2500,null),false,0,true);
var textFlow:TextFlow = SelManager.textFlow;
startIndx = SelManager.textFlow.textLength - 1;
var width:int = 100;
var height:int = 100;
var src:String = data[data.length-1].toString();
SelManager.selectRange(startIndx, startIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),FormatValue.AUTO,FormatValue.AUTO);
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted InlineGraphicElement element not found",elem is InlineGraphicElement);
}
else // Make sure the image is ready before we try the undo
{
elem = SelManager.textFlow.findLeaf(SelManager.textFlow.textLength - 2);
var img:InlineGraphicElement = InlineGraphicElement(elem);
if(img.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(Event.ENTER_FRAME,addAsync(insertAtEndAndUndo,2500,null),false,0,true);
return;
}
// SelManager.textFlow.flowComposer.updateAllControllers();
SelManager.undo();
assertTrue("expected inline to be removed by undo",elem.parent == null);
}
}
public function modifyImageSourceTest():void
{
try
{
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var flowLength:int = SelManager.textFlow.textLength;
var src:Object = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,String(src)),width,height);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted InlineGraphicElement element not found",elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic", (flowLength + 1) - (endIndx - startIndx));
assertTrue("unexpected range selection after replacing text with graphic", SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic", SelManager.anchorPosition == startIndx + 1);
if (elem is InlineGraphicElement)
{
var img:InlineGraphicElement = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong source",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,String(src)));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
// Modify from string to GraphicsObject
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0xff0000); // red
sprite.graphics.drawRect(0,0,100,100);
sprite.graphics.endFill();
src = sprite;
width = 100;
height = 100;
SelManager.selectRange(startIndx, endIndx);
SelManager.modifyInlineGraphic(src,width,height);
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted InlineGraphicElement element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong source",img.source == src);
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
// Modify from DisplayObject to URLRequest
var url:URLRequest = new URLRequest("https://bugs.corp.adobe.com/WTSNPROD/images/Watson_Adobe_Logo.gif");
src = url;
width = 106;
height = 32;
SelManager.selectRange(startIndx, endIndx);
SelManager.modifyInlineGraphic(src,width,height);
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted InlineGraphicElement element not found", elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong source",img.source == src);
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
catch ( err:IOError )
{
fail( "Test error while loading image from URL: " + err.message );
}
}
public function copyMultipleImageTest(callBack:Object = null):void
{
if (!callBack)
{
// Insert 3 images
callBack = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(copyMultipleImageTest,2500,null),false,0,true);
var indx:int = SelManager.textFlow.textLength/2;
var origFlowLength:int = SelManager.textFlow.textLength;
var width:int = 20;
var height:int = 20;
SelManager.selectRange(indx, indx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,"smiling.png"),width,height);
var firstIndx:int = indx;
width = 30;
height = 30;
SelManager.selectRange(indx, indx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,"gremlin.jpg"),width,height);
var secondIndx:int = indx;
indx = SelManager.textFlow.textLength/3;
width = 40;
height = 40;
SelManager.selectRange(indx, indx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,"smiley.gif"),width,height);
var thirdIndx:int = indx;
SelManager.selectRange(thirdIndx,
firstIndx+3 );
var copy:TextScrap = TextScrap.createTextScrap(SelManager.getSelectionState());
SelManager.deleteNextCharacter();
SelManager.selectRange(thirdIndx,
thirdIndx );
SelManager.pasteTextScrap(copy);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic",
SelManager.textFlow.textLength == origFlowLength + 3);
assertTrue("unexpected range selection after replacing text with graphic",
SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic",
SelManager.activePosition == firstIndx+3);
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
SelManager.undo(); // Undo the paste
SelManager.undo(); // Undo the delete
elem = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic",
SelManager.textFlow.textLength == origFlowLength + 3);
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
SelManager.redo(); // Redo the delete
SelManager.redo(); // Redo the paste
indx1 = firstIndx+1;
elem = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic",
SelManager.textFlow.textLength == origFlowLength + 3);
assertTrue("unexpected range selection after replacing text with graphic",
SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic",
SelManager.activePosition == firstIndx+3);
indx2 = secondIndx+2;
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
indx3 = thirdIndx;
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
img2 = SelManager.textFlow.findLeaf(indx2) as InlineGraphicElement;
img3 = SelManager.textFlow.findLeaf(indx3) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY || img2.status != InlineGraphicElementStatus.READY || img3.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(copyMultipleImageTest,2500,null),false,0,true);
}
}
}
public function cutMultipleImageTest(callBack:Object = null):void
{
if (!callBack)
{
callBack = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(cutMultipleImageTest,2500,null),false,0,true);
// Insert 3 images
var indx:int = SelManager.textFlow.textLength/2;
var origFlowLength:int = SelManager.textFlow.textLength;
var width:int = 20;
var height:int = 20;
SelManager.selectRange(indx, indx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,"smiling.png"),width,height);
var firstIndx:int = indx;
width = 30;
height = 30;
SelManager.selectRange(indx, indx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,"gremlin.jpg"),width,height);
var secondIndx:int = indx;
indx = SelManager.textFlow.textLength/3;
width = 40;
height = 40;
SelManager.selectRange(indx, indx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,"smiley.gif"),width,height);
var thirdIndx:int = indx;
SelManager.selectRange(thirdIndx,
firstIndx+3 );
var copy:TextScrap = SelManager.cutTextScrap();
SelManager.selectRange(thirdIndx,
thirdIndx );
SelManager.pasteTextScrap(copy);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic",
SelManager.textFlow.textLength == origFlowLength + 3);
assertTrue("unexpected range selection after replacing text with graphic",
SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic",
SelManager.activePosition == firstIndx+3);
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
SelManager.undo(); // Undo the paste
elem = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element should not be found",
!(elem is InlineGraphicElement));
assertTrue("unexpected flow textLength after undo multi-image cut",
SelManager.textFlow.textLength == (origFlowLength - (firstIndx-thirdIndx)) );
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element should not be found",
!(elem is InlineGraphicElement));
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element should not be found",
!(elem is InlineGraphicElement));
SelManager.undo(); // Undo the cut
elem = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic",
SelManager.textFlow.textLength == origFlowLength + 3);
assertTrue("unexpected range selection after replacing text with graphic",
SelManager.anchorPosition != SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic",
SelManager.anchorPosition == thirdIndx &&
SelManager.activePosition == firstIndx+3);
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
SelManager.redo(); // Redo the cut
elem = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element should not be found",
!(elem is InlineGraphicElement));
assertTrue("unexpected flow textLength after undo multi-image cut",
SelManager.textFlow.textLength == (origFlowLength - (firstIndx-thirdIndx)) );
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element should not be found",
!(elem is InlineGraphicElement));
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element should not be found",
!(elem is InlineGraphicElement));
SelManager.redo(); // Redo the paste
indx1 = firstIndx+1;
elem = SelManager.textFlow.findLeaf(firstIndx+1);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
assertTrue("unexpected flow textLength after replacing text with graphic",
SelManager.textFlow.textLength == origFlowLength + 3);
assertTrue("unexpected range selection after replacing text with graphic",
SelManager.anchorPosition == SelManager.activePosition);
assertTrue("unexpected selection position after replacing text with graphic",
SelManager.activePosition == firstIndx+3);
indx2 = secondIndx+2;
elem = SelManager.textFlow.findLeaf(secondIndx+2);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
indx3 = thirdIndx;
elem = SelManager.textFlow.findLeaf(thirdIndx);
assertTrue("inserted InlineGraphicElement element not found",
elem is InlineGraphicElement);
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
img2 = SelManager.textFlow.findLeaf(indx2) as InlineGraphicElement;
img3 = SelManager.textFlow.findLeaf(indx3) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY || img2.status != InlineGraphicElementStatus.READY || img3.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(cutMultipleImageTest,2500,null),false,0,true);
}
}
}
/**
* Testing undo/redo of image insertion
*/
public function undoRedoInsertImageTest(callBack:Object = null):void
{
if (!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(undoRedoInsertImageTest,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var src:String = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not found",elem is InlineGraphicElement);
SelManager.undo();
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not deleted by undo",!(elem is InlineGraphicElement));
SelManager.redo();
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not recreated by redo",elem is InlineGraphicElement);
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(undoRedoInsertImageTest,2500,null),false,0,true);
}
}
}
/**
* Test for Watson 2512062
*/
public function insertStyleNameTest(callBack:Object = null):void
{
SelManager.selectRange(0, 5);
var format:TextLayoutFormat = new TextLayoutFormat();
format.fontWeight = FontWeight.BOLD;
SelManager.applyFormat(format, null, null);
var leaf:FlowLeafElement = SelManager.textFlow.getFirstLeaf();
leaf.styleName = "foo";
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0xff0000); // red
sprite.graphics.drawRect(0,0,100,100);
sprite.graphics.endFill();
SelManager.selectRange(5, 5);
SelManager.insertInlineGraphic(sprite, 100, 100);
var inlineGraphic:FlowLeafElement = leaf.getNextLeaf();
assertTrue("Expected styleName to be propagated to inline graphic", inlineGraphic.styleName == "foo");
SelManager.undo(); // undo inline graphic insert
var pointFormat:PointFormat = new PointFormat();
pointFormat.setStyle("styleName", "bar");
SelManager.setSelectionState(new SelectionState(SelManager.textFlow, 25, 25, pointFormat));
inlineGraphic = SelManager.insertInlineGraphic(sprite, 100, 100);
assertTrue("Expected styleName from pointFormat to be propagated to inserted inline graphic", inlineGraphic.styleName == "bar");
}
/**
* Select halfway through the flow and insert an image .. and then change it
*/
public function changeImageTest(callback:Object = null):void
{
if (!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(changeImageTest,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var src:String = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
// examine the results
var elem:FlowLeafElement = SelManager.textFlow.findLeaf(startIndx);
var img:InlineGraphicElement;
assertTrue("inserted image element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong uri",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,src));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
// block select the image and change it
var chgSrc:String = data[data.length-1].toString();
var chgWidth:int = 40;
var chgHeight:int = 40;
SelManager.selectRange(startIndx, endIndx+1);
SelManager.modifyInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,chgSrc),chgWidth,chgHeight);
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == chgWidth);
assertTrue("inserted image is the wrong height",img.height == chgHeight);
assertTrue("inserted image has the wrong uri",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,chgSrc));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(changeImageTest,2500,null),false,0,true);
}
}
}
/**
* Select halfway through the flow and insert an image .. and then change it .. and then undo and redo the change
*/
public function undoRedoChangeImageTest(callback:Object = null):void
{
if (!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(undoRedoChangeImageTest,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var src:String = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
// examine the results
var elem:FlowLeafElement;
var img:InlineGraphicElement;
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong uri",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,src));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
// block select the image and change it
var chgSrc:String = data[data.length-1].toString();
var chgWidth:int = 40;
var chgHeight:int = 40;
SelManager.selectRange(startIndx, endIndx+1);
SelManager.modifyInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,chgSrc),chgWidth,chgHeight);
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == chgWidth);
assertTrue("inserted image is the wrong height",img.height == chgHeight);
assertTrue("inserted image has the wrong uri",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,chgSrc));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
// undo the change image operation
SelManager.undo();
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == width);
assertTrue("inserted image is the wrong height",img.height == height);
assertTrue("inserted image has the wrong uri",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,src));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
// redo the change image operation
SelManager.redo();
// examine the results
elem = SelManager.textFlow.findLeaf(startIndx);
assertTrue("inserted image element not found",elem is InlineGraphicElement);
if (elem is InlineGraphicElement)
{
img = InlineGraphicElement(elem);
assertTrue("inserted image is the wrong width",img.width == chgWidth);
assertTrue("inserted image is the wrong height",img.height == chgHeight);
assertTrue("inserted image has the wrong uri",img.source == LoaderUtil.createAbsoluteURL(baseImageURL,chgSrc));
assertTrue("inserted image has the wrong length",img.textLength == 1);
}
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(undoRedoChangeImageTest,2500,null),false,0,true);
}
}
}
/**
* Ensure that you can't make the image wider than the TestFrame.
*/
public function nestedForeignElementsTest():void
{
/*var subTC:LayoutScrollableFlashTextContainer = new LayoutScrollableFlashTextContainer();
subTC.verticalScrollPolicy = ScrollPolicy.OFF
subTC.horizontalScrollPolicy = ScrollPolicy.OFF*/
var subTC:Sprite = new Sprite();
var subController:ContainerController = new ContainerController(subTC);
var subTF:TextFlow = SelManager.textFlow.deepCopy() as TextFlow;
subTF.flowComposer = new StandardFlowComposer();
var controller:ContainerController = new ContainerController(subTC);
subTF.flowComposer.addController(controller);
subTF.interactionManager = new EditManager(null);
var src:String = data[data.length-1].toString();
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var width:int = 20;
var height:int = 20;
subTF.interactionManager.selectRange(startIndx, endIndx);
IEditManager(subTF.interactionManager).insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(startIndx) as InlineGraphicElement;
image.source = subTC;
}
/**
* Make sure that changing the baseline changes the image position.
*/
public function changeBaselineTest(callback:Object = null):void
{
if (!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(changeBaselineTest,2500,null),false,0,true);
var tb:Boolean = TestFrame.rootElement.computedFormat.blockProgression ==
BlockProgression.RL;
var src:String = data[data.length-1].toString();
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(startIndx) as InlineGraphicElement;
TestFrame.textFlow.flowComposer.updateAllControllers();
var init:int = tb ?
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).x:
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).y;
SelManager.selectRange(startIndx, endIndx+1);
image.alignmentBaseline = flash.text.engine.TextBaseline.IDEOGRAPHIC_CENTER;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var end:int = tb ?
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).x:
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).y;
if(tb){
assertTrue("Changing the baseline of the graphic did not " +
"accurately change the image's position. " +
end + " !> " + init + ".",
end > init
);
}else{
assertTrue("Changing the baseline of the graphic did not " +
"accurately change the image's position. " +
end + " !< " + init + ".",
end < init
);
}
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(changeBaselineTest,2500,null),false,0,true);
}
}
}
/**
* Make sure that shifting the baseline changes the image position.
*/
public function baselineShiftTest(callback:Object = null):void
{
if (!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(baselineShiftTest,2500,null),false,0,true);
var tb:Boolean = TestFrame.rootElement.computedFormat.blockProgression ==
BlockProgression.RL;
var src:String = data[data.length-1].toString();
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(startIndx) as InlineGraphicElement;
TestFrame.textFlow.flowComposer.updateAllControllers();
var init:int = tb ?
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).x:
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).y;
SelManager.selectRange(startIndx, endIndx+1);
image.baselineShift = 20;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var end:int = tb ?
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).x:
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y)).y;
if(tb){
assertTrue("Changing the baseline of the graphic did not " +
"accurately change the image's position. " +
end + " != " + (init+20) + ".",
end == init + 20
);
}else{
assertTrue("Changing the baseline of the graphic did not " +
"accurately change the image's position. " +
end + " != " + (init-20) + ".",
end == init - 20
);
}
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(baselineShiftTest,2500,null),false,0,true);
}
}
}
/**
* Make sure that shifting the baseline changes the image position.
*/
public function breakOpportunityTest(callback:Object = null):void
{
// TODO: Matt this is a better way to figure out if we are TB
// The way you are doing it is not reliable
if (!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(breakOpportunityTest,2500,null),false,0,true);
SelManager.selectAll();
var ca:TextLayoutFormat = new TextLayoutFormat();
ca.fontFamily = "Times New Roman";
SelManager.applyLeafFormat(ca);
SelManager.flushPendingOperations();
var tb:Boolean = TestFrame.rootElement.computedFormat.blockProgression == BlockProgression.RL;
var src:String = data[data.length-1].toString();
var startIndx:int = SelManager.textFlow.flowComposer.getLineAt(1).absoluteStart;
var endIndx:int = startIndx + SelManager.textFlow.flowComposer.getLineAt(1).textLength;
SelManager.selectRange(endIndx, endIndx);
indx1 = endIndx;
var width:int = 20;
var height:int = 20;
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(endIndx) as InlineGraphicElement;
TestFrame.textFlow.flowComposer.updateAllControllers();
var init:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
SelManager.selectRange(endIndx, endIndx+1);
image.breakOpportunity = flash.text.engine.BreakOpportunity.NONE;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var mid:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
// TODO: top to bottom test
if (!tb)
{
assertTrue("The x position of the image is less than or equal to" +
" the initial position of the image: The image has not obeyed the" +
" BreakOpportunity.NONE designation. " + init.x + " !<= " + mid.x
, init.x <= mid.x);
assertTrue("The y position of the image is greater than or equal to" +
" the initial position of the image: The image has not obeyed the" +
" BreakOpportunity.NONE designation. " + init.y + " !>= " + mid.y
, init.y >= mid.y);
}
SelManager.selectRange(endIndx, endIndx+1);
image.breakOpportunity = flash.text.engine.BreakOpportunity.AUTO;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var end:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
/*assertTrue("The x position of the image is greater than or equal to" +
" the midpoint position of the image: The image has not obeyed the" +
" BreakOpportunity.ALL designation.", mid.x >= end.x);
assertTrue("The y position of the image is less than or equal to" +
" the midpoint position of the image: The image has not obeyed the" +
" BreakOpportunity.ALL designation.", mid.y <= end.y);*/
// TODO: top to bottom test
if (!tb)
{
assertTrue("The x position of the image is not equal to" +
" the initial position of the image: The image's x position has not been" +
" restored by setting BreakOpportunity.AUTOMATIC.", init.x == end.x);
assertTrue("The y position of the image is not equal to" +
" the initial position of the image: The image's y position has not been" +
" restored by setting BreakOpportunity.AUTOMATIC.", init.y == end.y);
}
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(breakOpportunityTest,2500,null),false,0,true);
}
}
}
/**
* Make sure that kerning doesn't change the image position.
*/
public function kerningTest():void
{
var src:String = data[data.length-1].toString();
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(endIndx) as InlineGraphicElement;
TestFrame.textFlow.flowComposer.updateAllControllers();
var init:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
SelManager.selectRange(endIndx, endIndx+1);
image.kerning = image.computedFormat.kerning != Kerning.OFF ? Kerning.OFF : Kerning.ON;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var end:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
assertTrue("Changing the kerning value effected the placement of the image.",
Point.distance(init,end) == 0);
}
/**
* Make sure that changing the tracking changes the image position.
*/
public function trackingTest():void
{
var src:String = data[data.length-1].toString();
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(endIndx) as InlineGraphicElement;
TestFrame.textFlow.flowComposer.updateAllControllers();
var init:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
SelManager.selectRange(endIndx-1, endIndx);
image.trackingRight = image.computedFormat.trackingRight + 20;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var end:Point =
image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
// assertTrue("Changing the trackingRight value by twenty did not effect the " +
// "placement of the image.", Point.distance(init,end) != 0);
SelManager.selectRange(endIndx-1, endIndx);
image.trackingLeft = image.computedFormat.trackingLeft + 20;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
// this test is not right for RTL - the image is treated as a RTL character and end is now the character before
// removed this test as a workaround for bug 2467357 - QE can revisit for the RTL case
if (this.writingDirection[1] == Direction.LTR)
{
end = image.graphic.localToGlobal(new Point(image.graphic.x,image.graphic.y));
assertTrue("Changing the trackingLeft value by twenty did not effect the " +
"placement of the image.", Point.distance(init,end) != 0);
}
}
/**
* Make sure that inserting a FE in a link applies the link properties to the FE.
*/
public function insertFEInLink(callBack:Object = null):void
{
if (!callBack)
{
callBack = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(insertFEInLink,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var site:String = "http://www.google.com";
var ref:String = "_self";
SelManager.selectRange(startIndx-5,endIndx+5);
SelManager.applyLink(site,ref ,false);
var src:String = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(endIndx) as InlineGraphicElement;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var link:LinkElement = image.getParentByType(LinkElement) as LinkElement;
assertTrue("Foreign Element does not point to the correct" +
"site.", link.href == site);
assertTrue("Foreign Element does not have the correct " +
"href.", link.target == ref);
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(insertFEInLink,2500,null),false,0,true);
}
}
}
/**
* Make sure that adding a link to a FE works.
*/
public function foreignElementToLink(callBack:Object = null):void
{
if (!callBack)
{
callBack = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(foreignElementToLink,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = startIndx;
var src:String = data[data.length-1].toString();
var width:int = 20;
var height:int = 20;
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var site:String = "http://www.google.com";
var ref:String = "_self";
SelManager.selectRange(startIndx, endIndx+1);
SelManager.applyLink(site,ref ,false);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(endIndx) as InlineGraphicElement;
SelManager.flushPendingOperations();
TestFrame.textFlow.flowComposer.updateAllControllers();
var link:LinkElement = image.getParentByType(LinkElement) as LinkElement;
assertTrue("Foreign Element does not point to the correct" +
"site.", link.href == site);
assertTrue("Foreign Element does not have the correct " +
"href.", link.target == ref);
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(foreignElementToLink,2500,null),false,0,true);
}
}
}
/**
* Resize the foreign element proportionally and see that it has the right
* dimensions.
*/
public function proportionalSize(callBack:Object = null):void
{
if(!callback)
{
callback = true;
TestFrame.container.addEventListener(Event.ENTER_FRAME,addAsync(proportionalSize,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
indx1 = endIndx;
var src:String = data[data.length-1].toString();
var width:String = "100%";
var height:String = "100%";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
var image:InlineGraphicElement = SelManager.textFlow.findLeaf(SelManager.textFlow.textLength/2) as InlineGraphicElement;
var initWidth:int = image.width as int;
var initHeight:int = image.height as int;
startIndx = startIndx + 5;
endIndx = startIndx;
indx2 = endIndx;
width = "50%";
height = "50%";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
image = SelManager.textFlow.findLeaf(indx2) as InlineGraphicElement;
var midWidth:int = image.actualWidth as int;
var midHeight:int = image.actualHeight as int;
assertTrue("Final width is not half of initial width!", initWidth/2 == midWidth);
assertTrue("Final height is not half of initial height!", initHeight/2 == midHeight);
startIndx = startIndx + 5;
endIndx = startIndx;
indx3 = endIndx;
width = "200%";
height = "200%";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
image = SelManager.textFlow.findLeaf(indx3) as InlineGraphicElement;
var endWidth:int = image.actualWidth as int;
var endHeight:int = image.actualHeight as int;
assertTrue("Final width is not half of initial width!", initWidth*2 == endWidth);
assertTrue("Final height is not half of initial height!", initHeight*2 == endHeight);
}
else // Make sure the image is ready before we let the snapshot go
{
img1 = SelManager.textFlow.findLeaf(indx1) as InlineGraphicElement;
img2 = SelManager.textFlow.findLeaf(indx2) as InlineGraphicElement;
img3 = SelManager.textFlow.findLeaf(indx3) as InlineGraphicElement;
if(img1.status != InlineGraphicElementStatus.READY || img2.status != InlineGraphicElementStatus.READY || img3.status != InlineGraphicElementStatus.READY)
{
SelManager.textFlow.addEventListener(Event.ENTER_FRAME,addAsync(proportionalSize,2500,null),false,0,true);
}
}
}
private function updateCompletionHandler(event:Event):void
{
assertTrue("Operation must be on stack",SelManager.undoManager.canUndo());
var op:FlowOperation = SelManager.undoManager.peekUndo() as FlowOperation;
assertTrue("FlowOperation not found",op != null);
assertTrue("FlowManager generation mismatch",op.endGeneration == SelManager.textFlow.generation);
this.callback = false;
}
/**
* Size the FE at 50% height, then verify that the width is set proportionally.
*/
public function proportionalAutoWidth(callBack:Object = null):void
{
if(!callback){
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalAutoWidth,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var src:String = data[data.length-1].toString();
var width:String = "auto";
var height:String = "50%";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
}
else
{
assertTrue("unexected event",callBack is StatusChangeEvent);
var event:StatusChangeEvent = StatusChangeEvent(callBack);
assertTrue("unexpected StatusChangeEvent received",event.element is InlineGraphicElement);
var image:InlineGraphicElement = InlineGraphicElement(event.element);
switch (event.status)
{
case InlineGraphicElementStatus.LOADING:
case InlineGraphicElementStatus.SIZE_PENDING:
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalAutoWidth,2500,null),false,0,true);
break;
case InlineGraphicElementStatus.READY:
var effWidth:Number = image.actualWidth as Number;
var effHeight:Number = image.actualHeight as Number;
var nomWidth:Number = image.measuredWidth as Number;
var nomHeight:Number = image.measuredHeight as Number;
assertTrue("Final width is not half of initial width!", nomWidth/2 == effWidth);
assertTrue("Final height is not half of initial height!", nomHeight/2 == effHeight);
SelManager.textFlow.addEventListener(UpdateCompleteEvent.UPDATE_COMPLETE,addAsync(updateCompletionHandler,2500,null),false,0,true);
break;
default:
assertTrue("unexpected StatusChangeEvent status: "+event.status,false);
break;
}
}
}
/**
* Size the FE at 50% height, then verify that the width is set proportionally.
*/
public function proportionalAutoHeight(callBack:Object = null):void
{
if(!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalAutoHeight,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var src:String = data[data.length-1].toString();
var width:String = "50%";
var height:String = "auto";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
}
else
{
assertTrue("unexected event",callBack is StatusChangeEvent);
var event:StatusChangeEvent = StatusChangeEvent(callBack);
assertTrue("unexpected StatusChangeEvent received",event.element is InlineGraphicElement);
var image:InlineGraphicElement = InlineGraphicElement(event.element);
switch (event.status)
{
case InlineGraphicElementStatus.LOADING:
case InlineGraphicElementStatus.SIZE_PENDING:
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalAutoHeight,2500,null),false,0,true);
break;
case InlineGraphicElementStatus.READY:
var effWidth:Number = image.actualWidth as Number;
var effHeight:Number = image.actualHeight as Number;
var nomWidth:Number = image.measuredWidth as Number;
var nomHeight:Number = image.measuredHeight as Number;
assertTrue("Final width is not half of initial width!", nomWidth/2 == effWidth);
assertTrue("Final height is not half of initial height!", nomHeight/2 == effHeight);
SelManager.textFlow.addEventListener(UpdateCompleteEvent.UPDATE_COMPLETE,addAsync(updateCompletionHandler,2500,null),false,0,true);
break;
default:
assertTrue("unexpected StatusChangeEvent status: "+event.status,false);
break;
}
}
}
/**
* Size the FE at 50 width, then verify that the height is set proportionally.
*/
public function proportionalFixedWidth(callBack:Object = null):void
{
if(!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalFixedWidth,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var src:String = data[data.length-1].toString();
var width:String = "50";
var height:String = "auto";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
}
else
{
assertTrue("unexected event",callBack is StatusChangeEvent);
var event:StatusChangeEvent = StatusChangeEvent(callBack);
assertTrue("unexpected StatusChangeEvent received",event.element is InlineGraphicElement);
var image:InlineGraphicElement = InlineGraphicElement(event.element);
switch (event.status)
{
case InlineGraphicElementStatus.LOADING:
case InlineGraphicElementStatus.SIZE_PENDING:
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalFixedWidth,2500,null),false,0,true);
break;
case InlineGraphicElementStatus.READY:
var effWidth:Number = image.actualWidth as Number;
var effHeight:Number = image.actualHeight as Number;
var nomWidth:Number = image.measuredWidth as Number;
var nomHeight:Number = image.measuredHeight as Number;
assertTrue(
"Ratio of width to height is not correct!",
nomWidth/effWidth == nomHeight/effHeight
);
SelManager.textFlow.addEventListener(UpdateCompleteEvent.UPDATE_COMPLETE,addAsync(updateCompletionHandler,2500,null),false,0,true);
break;
default:
assertTrue("unexpected StatusChangeEvent status: "+event.status,false);
break;
}
}
}
/**
* Size the FE at 50 height, then verify that the width is set proportionally.
*/
public function proportionalFixedHeight(callBack:Object = null):void
{
if(!callback)
{
callback = true;
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalFixedHeight,2500,null),false,0,true);
var startIndx:int = SelManager.textFlow.textLength/2;
var endIndx:int = startIndx;
var src:String = data[data.length-1].toString();
var width:String = "auto";
var height:String = "50";
SelManager.selectRange(startIndx, endIndx);
SelManager.insertInlineGraphic(LoaderUtil.createAbsoluteURL(baseImageURL,src),width,height);
}
else
{
assertTrue("unexected event",callBack is StatusChangeEvent);
var event:StatusChangeEvent = StatusChangeEvent(callBack);
assertTrue("unexpected StatusChangeEvent received",event.element is InlineGraphicElement);
var image:InlineGraphicElement = InlineGraphicElement(event.element);
switch (event.status)
{
case InlineGraphicElementStatus.LOADING:
case InlineGraphicElementStatus.SIZE_PENDING:
SelManager.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(proportionalFixedHeight,2500,null),false,0,true);
break;
case InlineGraphicElementStatus.READY:
var effWidth:Number = image.actualWidth as Number;
var effHeight:Number = image.actualHeight as Number;
var nomWidth:Number = image.measuredWidth as Number;
var nomHeight:Number = image.measuredHeight as Number;
assertTrue(
"Ratio of width to height is not correct!",
nomWidth/effWidth == nomHeight/effHeight
);
SelManager.textFlow.addEventListener(UpdateCompleteEvent.UPDATE_COMPLETE,addAsync(updateCompletionHandler,2500,null),false,0,true);
break;
default:
assertTrue("unexpected StatusChangeEvent status: "+event.status,false);
break;
}
}
}
private function graphicStatusChangeEvent(e:StatusChangeEvent):void
{
try
{
if (e.status == InlineGraphicElementStatus.READY)
{
e.element.getTextFlow().flowComposer.updateAllControllers();
}
}
catch ( re:RangeError )
{
TestFrame.textFlow.removeEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,graphicStatusChangeEvent);
TestFrame.textFlow.dispatchEvent(new Event(Event.SOUND_COMPLETE));
return;
}
}
private function nullFunction( param:Object = null ):void { return; }
private function failEvent(e:Event):void { fail( "InlineGraphics not correcty updating - See Watson #2298043" ); }
private function rect(color:int):Sprite
{
var sp:Sprite = new Sprite();
sp.graphics.beginFill(color);
sp.graphics.drawRect(0,0,200, 5);
sp.graphics.endFill();
sp.width = 200;
sp.height = 5;
return sp;
}
// Test for Watson #2298043
public function statusChangedEventTest():void
{
TestFrame.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, graphicStatusChangeEvent);
TestFrame.textFlow.addEventListener(Event.SOUND_COMPLETE, addAsync(failEvent,2500, null, nullFunction));
SelManager.selectAll();
SelManager.deleteText();
var p:ParagraphElement = new ParagraphElement();
TestFrame.textFlow.addChild(p);
var inlineGraphic:InlineGraphicElement = new InlineGraphicElement();
inlineGraphic.source = "http://www.adobe.com/shockwave/download/images/flashplayer_100x100.jpg";
p.addChild(inlineGraphic);
var inlineGraphicElement:InlineGraphicElement = new InlineGraphicElement();
var sprite:Sprite = rect(0xff0000);
inlineGraphicElement.width = sprite.width+10;
inlineGraphicElement.height = sprite.height+10;
inlineGraphicElement.source = sprite;
p.addChild(inlineGraphicElement);
var p2:ParagraphElement = new ParagraphElement();
var sp:SpanElement = new SpanElement();
sp.text = "xyz";
inlineGraphicElement = new InlineGraphicElement();
sprite = rect(0x0000ff);
inlineGraphicElement.width = sprite.width+9;
inlineGraphicElement.height = sprite.height+9;
inlineGraphicElement.source = sprite;
p2.addChild(inlineGraphicElement);
p2.addChild(sp);
TestFrame.textFlow.addChild(p2);
SelManager.selectAll();
TestFrame.textFlow.flowComposer.updateAllControllers();
}
// Test for Watson #2374243
public function nullSourceExplicitWHTest():void
{
var p:ParagraphElement = new ParagraphElement();
TestFrame.textFlow.addChild(p);
var span:SpanElement = new SpanElement();
span.text = "BEFORE";
p.addChild(span);
var inlineGraphic:InlineGraphicElement = new InlineGraphicElement();
inlineGraphic.height = 48;
inlineGraphic.width = 48;
p.addChild(inlineGraphic);
span = new SpanElement();
span.text = "AFTER";
p.addChild(span);
TestFrame.textFlow.flowComposer.updateAllControllers();
}
// Watson # 2695825, Copying and pasting the first character in a text block results in a carriage return at the beginning.
public function copyFirstCharacterTest():void
{
// create a paragraph
SelManager.selectAll();
SelManager.deleteText();
SelManager.insertText("AAAAAAAA");
TestFrame.textFlow.flowComposer.updateAllControllers();
//select first character
SelManager.selectRange(0, 1);
var copy:TextScrap = TextScrap.createTextScrap(SelManager.getSelectionState());
//paste to 3rd position
SelManager.selectRange(3, 3 );
SelManager.pasteTextScrap(copy);
TestFrame.textFlow.flowComposer.updateAllControllers();
//check if there is second paragraph after paste
var elem:FlowLeafElement = SelManager.textFlow.getFirstLeaf();
var para:ParagraphElement = elem.getParagraph();
para = para.getNextParagraph();
assertTrue ("there should be only one paragraph after paste.", para ==null);
}
// Watson 2724144, inline graphic is visible only if the TextLine it is on is visible
public function inlineIsVisible():void
{
var textFlow:TextFlow = SelManager.textFlow;
var controller:ContainerController = textFlow.flowComposer.getControllerAt(0);
controller.columnCount = 1;
controller.verticalScrollPolicy = ScrollPolicy.ON;
controller.horizontalScrollPolicy = ScrollPolicy.ON;
SelManager.selectAll();
var scrap:TextScrap = TextScrap.createTextScrap(SelManager.getSelectionState());
SelManager.selectRange(textFlow.textLength - 1, textFlow.textLength - 1);
SelManager.pasteTextScrap(scrap);
SelManager.selectRange(textFlow.textLength - 1, textFlow.textLength - 1);
SelManager.pasteTextScrap(scrap);
var thirdPara:FlowElement = SelManager.textFlow.getChildAt(2) as FlowElement;
var pos:int = thirdPara.getAbsoluteStart();
SelManager.selectRange(pos, pos);
SelManager.insertInlineGraphic(createFilledSprite(15, 15, 0x00ff00), 15, 15, Float.NONE);
var s:Sprite = createFilledSprite(50, 400, 0xff0000);
SelManager.insertInlineGraphic(s, 50, 400);
SelManager.selectRange(0, 0);
SelManager.updateAllControllers();
assertTrue("Expected inline to be visible even if its line is scrolled down", s.stage == TestFrame.container.stage);
}
// Test that the controller's protected methods for adding and removing graphic elements are being called.
public function addRemoveInlineGraphicElement():void
{
var textFlow:TextFlow = SelManager.textFlow;
var flowComposer:IFlowComposer = textFlow.flowComposer;
var oldController:ContainerController = flowComposer.getControllerAt(0);
flowComposer.removeAllControllers();
var controller:TestContainerController = new TestContainerController(oldController.container);
flowComposer.addController(controller);
flowComposer.updateAllControllers();
assertTrue("No inlines yet", controller.inlineCount == 0);
var s:Sprite = createFilledSprite(50, 400, 0xff0000);
SelManager.selectRange(0, 0);
SelManager.allowDelayedOperations = false;
SelManager.insertInlineGraphic(createFilledSprite(15, 15, 0x00ff00), 15, 15, Float.NONE);
assertTrue("Inline added", controller.inlineCount == 1);
SelManager.selectRange(0, 1);
SelManager.deleteText();
assertTrue("Inline removed", controller.inlineCount == 0);
}
//test for Bug # 2563434 - Importers resolve relative image paths from the swf, not the HTML file
public function imgSourceFilterFunctionTest(callback:Object = null):void
{
var tf:TextFlow;
if(!callback)
{
callback = true;
tf = SelManager.textFlow;
tf.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(imgSourceFilterFunctionTest,2500,null),false,0,true);
var textImporter:ITextImporter;
SelManager.selectAll();
SelManager.deleteText();
SelManager.insertText("AAAAAAA");
SelManager.textFlow.flowComposer.updateAllControllers();
//get relative path for img
var replacedSource:String = LoaderUtil.createAbsoluteURL(baseURL, "../../test/testFiles/assets/");
textImporter = TextConverter.getImporter(TextConverter.TEXT_LAYOUT_FORMAT);
(textImporter as ITextLayoutImporter).imageSourceResolveFunction = function (source:String):String { replacedSource += source; return replacedSource; };
textImporter.importToFlow("<TextFlow xmlns='http://ns.adobe.com/textLayout/2008'><img source='smiley.gif'/></TextFlow>");
SelManager.selectRange(2,2);
//insert inline graphic
SelManager.insertInlineGraphic( replacedSource, 100, 100 );
SelManager.textFlow.flowComposer.updateAllControllers();
}
else // Make sure the image is ready before we let the snapshot go
{
var img:InlineGraphicElement = callback.element;
tf = img.getTextFlow();
if(img.status != InlineGraphicElementStatus.READY)
{
tf.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,addAsync(imgSourceFilterFunctionTest,2500,null),false,0,true);
}
}
}
public function imgSourceSecurityError():void
{
var tf:TextFlow = SelManager.textFlow;
SelManager.selectRange(0,0);
// don't need all the data after base64, - this throws in player and TLF needs to catchit
SelManager.insertInlineGraphic("data:image/jpg;base64,/9j",100,100);
}
}
}
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flashx.textLayout.container.ContainerController;
class TestContainerController extends ContainerController
{
public var inlineCount:int;
public function TestContainerController(container:Sprite,compositionWidth:Number=100,compositionHeight:Number=100)
{
super(container, compositionWidth, compositionHeight);
inlineCount = 0;
}
override protected function addInlineGraphicElement(parent:DisplayObjectContainer, inlineGraphicElement:DisplayObject, index:int):void
{
super.addInlineGraphicElement(parent, inlineGraphicElement, index);
++inlineCount;
}
override protected function removeInlineGraphicElement(parent:DisplayObjectContainer, inlineGraphicElement:DisplayObject):void
{
super.removeInlineGraphicElement(parent, inlineGraphicElement);
--inlineCount;
}
}