blob: d486399ceb4fe211741096ad8009b7d6b46122bb [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.VellumTestCase;
import UnitTest.Fixtures.TestConfig;
import flash.display.Sprite;
import flash.text.engine.TextBlock;
import flash.text.engine.TextLine;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.edit.EditManager;
import flashx.textLayout.elements.InlineGraphicElement;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.BlockProgression;
import flashx.textLayout.formats.Direction;
import flashx.textLayout.formats.TextLayoutFormat;
import flashx.textLayout.tlf_internal;
import mx.containers.Canvas;
import org.flexunit.asserts.assertTrue;
use namespace tlf_internal;
[TestCase(order=17)]
public class CrossContainerTest extends VellumTestCase
{
// Members
private var _flowComposer:IFlowComposer;
private var _textFlow:TextFlow;
private var _verticalText:Boolean;
private var _rtlText:Boolean;
private var _testCanvas:Canvas;
private var _textFlowSprite:Sprite;
private var _container1:Sprite;
private var _container2:Sprite;
private var _container3:Sprite;
public function CrossContainerTest()
{
super("", "CrossContainerTest", TestConfig.getInstance());
TestData.fileName = null;
metaData = {};
// Note: These must correspond to a Watson product area (case-sensitive)
metaData.productArea = "Text Composition";
}
[Before]
override public function setUpTest():void
{
super.setUpTest();
setupTextFlow();
initializeFlow();
}
[After]
override public function tearDownTest():void
{
super.tearDownTest();
}
[Test]
public function crossContainerTest():void
{
var tb:TextBlock = (_textFlow.getChildAt(2) as ParagraphElement).getTextBlock();
assertTrue("The _textBlock of the second paragraph should not be null", tb);
var fLine:TextLine = tb.firstLine;
assertTrue("The first TextLine of the second paragraph should not be null", fLine);
assertTrue("The first TextLine of the second paragraph should be on the second container", fLine.parent == _container2);
}
private function setupTextFlow():void
{
var textFlow:TextFlow = new TextFlow();
var para1String:String = "In the first paragraph of a "
var para1String2:String = "cheap"
var para1String3:String = "Western novel, a cowboy meets a saloon girl.";
var para2String:String = "In the middle of the cheap novel a really bad guy, " +
"who is having a relationship with the saloon girl, sees the cowboy help " +
"her onto her horse as she smiles at him warmly."
var para3String:String = "In the last paragraph of the cheap novel, the cowboy kills " +
"the really bad guy in a shootout in the middle of main street and " +
"then rides into the sunset with the saloon girl on the back of his";
var controllerOne:ContainerController;
var controllerTwo:ContainerController;
_container1 = new Sprite();
_container2 = new Sprite();
controllerOne = new ContainerController(_container1, 200, 210);
controllerTwo = new ContainerController(_container2, 200, 220);
var textLayoutFormat:TextLayoutFormat = new TextLayoutFormat();
var paragraph1:ParagraphElement = new ParagraphElement();
var paragraph2:ParagraphElement = new ParagraphElement();
var paragraph3:ParagraphElement = new ParagraphElement();
var p1Span1:SpanElement = new SpanElement();
var p1Span2:SpanElement = new SpanElement();
var p1Span3:SpanElement = new SpanElement();
var p2Span:SpanElement = new SpanElement();
var p3Span:SpanElement = new SpanElement();
p1Span1.text = para1String;
p1Span2.text = para1String2;
p1Span3.text = para1String3;
paragraph1.addChild(p1Span1);
paragraph1.addChild(p1Span2);
paragraph1.addChild(p1Span3);
p2Span.text = para2String;
paragraph2.addChild(p2Span);
p3Span.text = para3String;
var img:InlineGraphicElement = new InlineGraphicElement();
img.source = "../../test/testFiles/assets/smiley.gif"
img.width = 100;
img.height = 100;
paragraph3.addChild(p3Span);
paragraph3.addChild(img);
textFlow.addChild(paragraph1);
textFlow.addChild(paragraph2);
textFlow.addChild(paragraph3);
textLayoutFormat.fontSize = 14;
textLayoutFormat.textIndent = 15;
textLayoutFormat.paragraphSpaceAfter = 15;
textLayoutFormat.paddingTop = 4;
textLayoutFormat.paddingLeft = 4;
textFlow.hostFormat = textLayoutFormat;
textFlow.interactionManager = new EditManager();
_container1.x = 0;
_container1.y = 100;
_container2.x = 255;
_container2.y = 100;
textFlow.flowComposer.addController(controllerOne);
textFlow.flowComposer.addController(controllerTwo);
textFlow.flowComposer.updateAllControllers();
_container3 = new Sprite();
var controllerThree:ContainerController = new ContainerController(_container3, 200, 220);
_container3.x = 510;
_container3.y = 100;
var textLayoutFormat1:TextLayoutFormat = new TextLayoutFormat();
textLayoutFormat1.fontSize = 18;
textLayoutFormat1.textIndent = 15;
textLayoutFormat1.paragraphSpaceAfter = 15;
textLayoutFormat1.paddingTop = 4;
textLayoutFormat1.paddingLeft = 4;
textFlow.hostFormat = textLayoutFormat1;
textFlow.flowComposer.addController(controllerThree);
_textFlowSprite = new Sprite();
_textFlowSprite.addChild(_container1);
_textFlowSprite.addChild(_container2);
_textFlowSprite.addChild(_container3);
_textFlow = textFlow;
}
private function initializeFlow():void
{
_flowComposer = _textFlow.flowComposer;
_testCanvas = myEmptyChilds();
_testCanvas.rawChildren.addChild(_textFlowSprite);
// Set the writing direction specified by the test
_textFlow.blockProgression = writingDirection[0];
_textFlow.direction = writingDirection[1];
_verticalText = (_textFlow.blockProgression == BlockProgression.RL);
_rtlText = (_textFlow.direction == Direction.RTL);
SelManager = EditManager(_textFlow.interactionManager);
if (SelManager)
{
SelManager.selectRange(0, 0);
//make sure there is never any blinking when running these tests
setCaretBlinkRate(0);
}
_textFlow.flowComposer.updateAllControllers();
}
private function myEmptyChilds():Canvas
{
var TestCanvas:Canvas = null;
TestDisplayObject = testApp.getDisplayObject();
if (TestDisplayObject)
{
TestCanvas = Canvas(TestDisplayObject);
TestCanvas.removeAllChildren();
var iCnt:int = TestCanvas.rawChildren.numChildren;
for (var a:int = 0; a < iCnt; a++)
{
TestCanvas.rawChildren.removeChildAt(0);
}
}
return TestCanvas;
}
}
}