Merge pull request #938 from NativeScript/hhristov/improving-tests-time

Add module duration
This commit is contained in:
Hristo Hristov
2015-10-15 10:02:26 +03:00
10 changed files with 1562 additions and 1735 deletions

View File

@ -115,7 +115,7 @@ function runAsync(testInfo: TestInfoEntry, recursiveIndex: number, testTimeout?:
runTests(testsQueue, recursiveIndex + 1);
}
else {
setTimeout(checkFinished, 200);
setTimeout(checkFinished, 10);
}
}
}
@ -208,8 +208,15 @@ export function assertNull(actual: any, message?: string) {
}
};
export function assertAreClose(actual: number, expected: number, delta: number, message?: string) {
export function areClose(actual: number, expected: number, delta: number): boolean {
if (isNaN(actual) || Math.abs(actual - expected) > delta) {
return false;
}
return true;
}
export function assertAreClose(actual: number, expected: number, delta: number, message?: string) {
if (!areClose(actual, expected, delta)) {
throw new Error(message + " Numbers are not close enough. Actual: " + actual + " Expected: " + expected + " Delta: " + delta);
}
};

View File

@ -1,4 +1,5 @@
import TKUnit = require("../TKUnit");
import testModule = require("../ui-test");
import TKUnit = require("../TKUnit");
import viewModule = require("ui/core/view");
import labelModule = require("ui/label");
import helper = require("../ui/helper");
@ -23,63 +24,83 @@ import absoluteLayoutModule = require("ui/layouts/absolute-layout");
//```
// </snippet>
export var testAll = function () {
// <snippet module="ui/layouts/absolute-layout" title="absolute-layout">
// ## Creating and populating a AbsoluteLayout with children
// ``` JavaScript
var absoluteLayout = new absoluteLayoutModule.AbsoluteLayout();
absoluteLayout.width = 230;
absoluteLayout.height = 230;
absoluteLayout.style.backgroundColor = new colorModule.Color("LightGray");
var label = new labelModule.Label();
//// In absolute layout place of an UI element is determined by 4 parameters : left, top, width and height.
absoluteLayoutModule.AbsoluteLayout.setLeft(label, 10);
absoluteLayoutModule.AbsoluteLayout.setTop(label, 10);
label.width = 100;
label.height = 100;
label.text = "LT";
label.id = "LT";
label.style.backgroundColor = new colorModule.Color("Red");
absoluteLayout.addChild(label);
// ```
// </snippet>
export class AbsoluteLayoutTest extends testModule.UITest<absoluteLayoutModule.AbsoluteLayout> {
helper.buildUIAndRunTest(absoluteLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return absoluteLayout.isLayoutValid;
}, 1);
public create(): absoluteLayoutModule.AbsoluteLayout {
return new absoluteLayoutModule.AbsoluteLayout();
}
var actualValue = viewModule.getViewById(absoluteLayout, "LT")._getCurrentLayoutBounds();
var width = actualValue.right - actualValue.left;
var height = actualValue.bottom - actualValue.top;
public snippet() {
// <snippet module="ui/layouts/absolute-layout" title="absolute-layout">
// ## Creating and populating a AbsoluteLayout with children
// ``` JavaScript
var absoluteLayout = new absoluteLayoutModule.AbsoluteLayout();
absoluteLayout.width = 230;
absoluteLayout.height = 230;
absoluteLayout.style.backgroundColor = new colorModule.Color("LightGray");
var label = new labelModule.Label();
//// In absolute layout place of an UI element is determined by 4 parameters : left, top, width and height.
absoluteLayoutModule.AbsoluteLayout.setLeft(label, 10);
absoluteLayoutModule.AbsoluteLayout.setTop(label, 10);
label.width = 100;
label.height = 100;
label.text = "LT";
label.id = "LT";
label.style.backgroundColor = new colorModule.Color("Red");
absoluteLayout.addChild(label);
// ```
// </snippet>
}
public testAll() {
let absoluteLayout = this.testView;
absoluteLayout.width = 230;
absoluteLayout.height = 230;
absoluteLayout.style.backgroundColor = new colorModule.Color("LightGray");
let label = new labelModule.Label();
absoluteLayoutModule.AbsoluteLayout.setLeft(label, 10);
absoluteLayoutModule.AbsoluteLayout.setTop(label, 10);
label.width = 100;
label.height = 100;
label.text = "LT";
label.style.backgroundColor = new colorModule.Color("Red");
absoluteLayout.addChild(label);
this.waitUntilTestElementLayoutIsValid();
let actualValue = label._getCurrentLayoutBounds();
let width = actualValue.right - actualValue.left;
let height = actualValue.bottom - actualValue.top;
TKUnit.assertEqual(actualValue.left, layoutHelper.dip(10), "ActualLeft");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(10), "ActualTop");
TKUnit.assertEqual(width, layoutHelper.dip(100), "ActualWidth");
TKUnit.assertEqual(height, layoutHelper.dip(100), "Actualheight");
});
}
}
export function test_padding() {
var absoluteLayout = new absoluteLayoutModule.AbsoluteLayout();
absoluteLayout.width = 200;
absoluteLayout.height = 200;
absoluteLayout.paddingLeft = 5;
absoluteLayout.paddingTop = 15;
public test_padding() {
let absoluteLayout = this.testView;
absoluteLayout.width = 200;
absoluteLayout.height = 200;
absoluteLayout.paddingLeft = 5;
absoluteLayout.paddingTop = 15;
// Left Top
var btn = new layoutHelper.MyButton();
btn.width = 100;
btn.height = 100;
absoluteLayoutModule.AbsoluteLayout.setLeft(btn, 20);
absoluteLayoutModule.AbsoluteLayout.setTop(btn, 20);
absoluteLayout.addChild(btn);
helper.buildUIAndRunTest(absoluteLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return absoluteLayout.isLayoutValid;
}, 1);
// Left Top
let btn = new layoutHelper.MyButton();
btn.width = 100;
btn.height = 100;
absoluteLayoutModule.AbsoluteLayout.setLeft(btn, 20);
absoluteLayoutModule.AbsoluteLayout.setTop(btn, 20);
absoluteLayout.addChild(btn);
this.waitUntilTestElementLayoutIsValid();
layoutHelper.assertMeasure(btn, 100, 100);
layoutHelper.assertLayout(btn, 25, 35, 100, 100);
});
}
}
export function createTestCase(): AbsoluteLayoutTest {
return new AbsoluteLayoutTest();
}

View File

@ -4,6 +4,7 @@ import {DockLayout} from "ui/layouts/dock-layout";
import TKUnit = require("../TKUnit");
import helper = require("./layout-helper");
import navHelper = require("../ui/helper");
import testModule = require("../ui-test");
// <snippet module="ui/layouts/dock-layout" title="dock-layout">
// # DockLayout
@ -16,11 +17,11 @@ import dockModule = require("ui/layouts/dock-layout");
//```XML
//<Page>
// <DockLayout stretchLastChild="true" >
// <Button dock="left" text = "left" style ="background-color: red; margin: 5;"/ >/ >
// <Button dock="top" text = "top" style ="background-color: lightblue; margin: 5;"/ >
// <Button dock="right" text = "right" style ="background-color: lightgreen; margin: 5;"/ >
// <Button dock="bottom" text = "bottom" style ="background-color: lightpink; margin: 5;"/ >
// <Button text="fill" style ="background-color: wheat; margin: 5;"/ >
// <Button dock="left" text="left" style="background-color: red; margin: 5;"/ >/ >
// <Button dock="top" text="top" style="background-color: lightblue; margin: 5;"/ >
// <Button dock="right" text="right" style="background-color: lightgreen; margin: 5;"/ >
// <Button dock="bottom" text="bottom" style="background-color: lightpink; margin: 5;"/ >
// <Button text="fill" style="background-color: wheat; margin: 5;"/ >
// </DockLayout >
//</Page>
//```
@ -32,184 +33,164 @@ import enums = require("ui/enums");
// ```
// </snippet>
var testPage: pageModule.Page;
var rootLayout: DockLayout;
var tmp: button.Button;
export class DockLayoutTest extends testModule.UITest<DockLayout> {
export function setUpModule() {
var pageFactory = function () {
testPage = new pageModule.Page();
tmp = new button.Button();
tmp.text = "Loading test";
testPage.content = tmp;
return testPage;
};
public create(): DockLayout {
let rootLayout = new DockLayout();
rootLayout.height = 300;
rootLayout.width = 300;
return rootLayout;
}
navHelper.navigate(pageFactory);
public test_stretchLastChild_DefaultValue() {
TKUnit.assertEqual(this.testView.stretchLastChild, true, "Default stretchLastChild.");
}
public test_dock_DefaultValue() {
var testBtn = new button.Button();
var value = dockModule.DockLayout.getDock(testBtn);
TKUnit.assertEqual(value, enums.Dock.left, "Default dock value.");
}
public test_setInvalidDock_Throws() {
var testBtn = new button.Button();
TKUnit.assertThrows(() => {
dockModule.DockLayout.setDock(testBtn, "invalid");
});
}
public test_dock_left() {
var testBtn = new helper.MyButton();
testBtn.width = 20;
this.testView.stretchLastChild = false;
this.testView.addChild(testBtn);
this.waitUntilTestElementLayoutIsValid();
helper.assertLayout(testBtn, 0, 0, 20, 300);
}
public test_dock_right() {
var testBtn = new helper.MyButton();
testBtn.width = 20;
dockModule.DockLayout.setDock(testBtn, enums.Dock.right);
this.testView.stretchLastChild = false;
this.testView.addChild(testBtn);
this.waitUntilTestElementLayoutIsValid();
helper.assertLayout(testBtn, 280, 0, 20, 300);
}
public test_dock_top() {
var testBtn = new helper.MyButton();
testBtn.height = 20;
dockModule.DockLayout.setDock(testBtn, enums.Dock.top);
this.testView.stretchLastChild = false;
this.testView.addChild(testBtn);
this.waitUntilTestElementLayoutIsValid();
helper.assertLayout(testBtn, 0, 0, 300, 20);
}
public test_dock_button() {
var testBtn = new helper.MyButton();
testBtn.height = 20;
dockModule.DockLayout.setDock(testBtn, enums.Dock.bottom);
this.testView.stretchLastChild = false;
this.testView.addChild(testBtn);
this.waitUntilTestElementLayoutIsValid();
helper.assertLayout(testBtn, 0, 280, 300, 20);
}
public test_dock_left_stretched() {
var testBtn = new helper.MyButton();
this.testView.addChild(testBtn);
this.waitUntilTestElementLayoutIsValid();
helper.assertLayout(testBtn, 0, 0, 300, 300);
}
public test_dock_left_top_righ_bottom_fill() {
var testBtnLeft = new helper.MyButton();
testBtnLeft.width = 20;
this.testView.addChild(testBtnLeft);
var testBtnTop = new helper.MyButton();
testBtnTop.height = 20;
dockModule.DockLayout.setDock(testBtnTop, enums.Dock.top);
this.testView.addChild(testBtnTop);
var testBtnRight = new helper.MyButton();
testBtnRight.width = 20;
dockModule.DockLayout.setDock(testBtnRight, enums.Dock.right);
this.testView.addChild(testBtnRight);
var testBtnBottom = new helper.MyButton();
testBtnBottom.height = 20;
dockModule.DockLayout.setDock(testBtnBottom, enums.Dock.bottom);
this.testView.addChild(testBtnBottom);
var testBtnFill = new helper.MyButton();
dockModule.DockLayout.setDock(testBtnFill, enums.Dock.bottom);
this.testView.addChild(testBtnFill);
this.waitUntilTestElementLayoutIsValid();
helper.assertLayout(testBtnLeft, 0, 0, 20, 300, "Left button");
helper.assertLayout(testBtnTop, 20, 0, 280, 20, "Top button");
helper.assertLayout(testBtnRight, 280, 20, 20, 280, "Right button");
helper.assertLayout(testBtnBottom, 20, 280, 260, 20, "Bottom button");
helper.assertLayout(testBtnFill, 20, 20, 260, 260, "Fill button");
}
public test_padding() {
var testBtn = new helper.MyButton();
this.testView.addChild(testBtn);
this.testView.paddingLeft = 10;
this.testView.paddingTop = 20;
this.testView.paddingRight = 30;
this.testView.paddingBottom = 40;
this.waitUntilTestElementLayoutIsValid();
helper.assertMeasure(testBtn, 260, 240);
helper.assertLayout(testBtn, 10, 20, 260, 240);
}
public test_codesnippets() {
// <snippet module="ui/layouts/dock-layout" title="dock-layout">
// ## Create DockLayout
// ``` JavaScript
var dockLayout = new dockModule.DockLayout();
// ```
// ## Add child view to layout
// ``` JavaScript
var btn = new button.Button();
dockLayout.addChild(btn);
// ```
// ## Remove child view from layout
// ``` JavaScript
dockLayout.removeChild(btn);
// ```
// ## Setting the dock proeprty
// ``` JavaScript
var btnDockedToRight = new button.Button();
dockModule.DockLayout.setDock(btnDockedToRight, enums.Dock.right);
dockLayout.addChild(btnDockedToRight);
// ```
// </snippet>
}
}
export function tearDownModule() {
navHelper.goBack();
testPage = null;
rootLayout = null;
tmp = null;
}
export function setUp() {
rootLayout = new DockLayout();
rootLayout.height = 300;
rootLayout.width = 300;
testPage.content = rootLayout;
}
export function tearDown() {
testPage.content = tmp;
}
export function test_stretchLastChild_DefaultValue() {
TKUnit.assertEqual(rootLayout.stretchLastChild, true, "Default stretchLastChild.");
}
export function test_dock_DefaultValue() {
var testBtn = new button.Button();
var value = dockModule.DockLayout.getDock(testBtn);
TKUnit.assertEqual(value, enums.Dock.left, "Default dock value.");
}
export function test_setInvalidDock_Throws() {
var testBtn = new button.Button();
TKUnit.assertThrows(() => {
dockModule.DockLayout.setDock(testBtn, "invalid");
});
}
export function test_dock_left() {
var testBtn = new helper.MyButton();
testBtn.width = 20;
rootLayout.stretchLastChild = false;
rootLayout.addChild(testBtn);
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertLayout(testBtn, 0, 0, 20, 300);
}
export function test_dock_right() {
var testBtn = new helper.MyButton();
testBtn.width = 20;
dockModule.DockLayout.setDock(testBtn, enums.Dock.right);
rootLayout.stretchLastChild = false;
rootLayout.addChild(testBtn);
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertLayout(testBtn, 280, 0, 20, 300);
}
export function test_dock_top() {
var testBtn = new helper.MyButton();
testBtn.height = 20;
dockModule.DockLayout.setDock(testBtn, enums.Dock.top);
rootLayout.stretchLastChild = false;
rootLayout.addChild(testBtn);
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertLayout(testBtn, 0, 0, 300, 20);
}
export function test_dock_button() {
var testBtn = new helper.MyButton();
testBtn.height = 20;
dockModule.DockLayout.setDock(testBtn, enums.Dock.bottom);
rootLayout.stretchLastChild = false;
rootLayout.addChild(testBtn);
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertLayout(testBtn, 0, 280, 300, 20);
}
export function test_dock_left_stretched() {
var testBtn = new helper.MyButton();
rootLayout.addChild(testBtn);
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertLayout(testBtn, 0, 0, 300, 300);
}
export function test_dock_left_top_righ_bottom_fill() {
var testBtnLeft = new helper.MyButton();
testBtnLeft.width = 20;
rootLayout.addChild(testBtnLeft);
var testBtnTop = new helper.MyButton();
testBtnTop.height = 20;
dockModule.DockLayout.setDock(testBtnTop, enums.Dock.top);
rootLayout.addChild(testBtnTop);
var testBtnRight = new helper.MyButton();
testBtnRight.width = 20;
dockModule.DockLayout.setDock(testBtnRight, enums.Dock.right);
rootLayout.addChild(testBtnRight);
var testBtnBottom = new helper.MyButton();
testBtnBottom.height = 20;
dockModule.DockLayout.setDock(testBtnBottom, enums.Dock.bottom);
rootLayout.addChild(testBtnBottom);
var testBtnFill = new helper.MyButton();
dockModule.DockLayout.setDock(testBtnFill, enums.Dock.bottom);
rootLayout.addChild(testBtnFill);
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertLayout(testBtnLeft, 0, 0, 20, 300, "Left button");
helper.assertLayout(testBtnTop, 20, 0, 280, 20, "Top button");
helper.assertLayout(testBtnRight, 280, 20, 20, 280, "Right button");
helper.assertLayout(testBtnBottom, 20, 280, 260, 20, "Bottom button");
helper.assertLayout(testBtnFill, 20, 20, 260, 260, "Fill button");
}
export function test_padding() {
var testBtn = new helper.MyButton();
rootLayout.addChild(testBtn);
rootLayout.paddingLeft = 10;
rootLayout.paddingTop = 20;
rootLayout.paddingRight = 30;
rootLayout.paddingBottom = 40;
TKUnit.waitUntilReady(() => { return rootLayout.isLayoutValid; });
helper.assertMeasure(testBtn, 260, 240);
helper.assertLayout(testBtn, 10, 20, 260, 240);
}
export function test_codesnippets() {
// <snippet module="ui/layouts/dock-layout" title="dock-layout">
// ## Create DockLayout
// ``` JavaScript
var dockLayout = new dockModule.DockLayout();
// ```
// ## Add child view to layout
// ``` JavaScript
var btn = new button.Button();
dockLayout.addChild(btn);
// ```
// ## Remove child view from layout
// ``` JavaScript
dockLayout.removeChild(btn);
// ```
// ## Setting the dock proeprty
// ``` JavaScript
var btnDockedToRight = new button.Button();
dockModule.DockLayout.setDock(btnDockedToRight, enums.Dock.right);
dockLayout.addChild(btnDockedToRight);
// ```
// </snippet>
}
export function createTestCase(): DockLayoutTest {
return new DockLayoutTest();
}

File diff suppressed because it is too large Load Diff

View File

@ -6,241 +6,205 @@ import helper = require("./layout-helper");
import navHelper = require("../ui/helper");
import enums = require("ui/enums");
import utils = require("utils/utils");
import testModule = require("../ui-test");
var ASYNC = 2;
export class StackLayoutTest extends testModule.UITest<StackLayout> {
var tmp: Button;
var newPage: Page;
var rootLayout: helper.MyStackLayout;
var btn1: helper.MyButton;
var btn2: helper.MyButton;
private rootLayout: helper.MyStackLayout;
private btn1: helper.MyButton;
private btn2: helper.MyButton;
export function setUpModule() {
var pageFactory = function () {
newPage = new Page();
tmp = new Button();
tmp.text = "Loading test";
newPage.content = tmp;
return newPage;
};
public create(): StackLayout {
this.rootLayout = new helper.MyStackLayout();
this.btn1 = new helper.MyButton();
this.btn1.text = "btn1";
this.rootLayout.addChild(this.btn1);
this.btn2 = new helper.MyButton();
this.btn2.text = "btn2";
this.rootLayout.addChild(this.btn2);
return this.rootLayout;
}
navHelper.navigate(pageFactory);
public test_orientation_DefaultValue() {
TKUnit.assertEqual(this.rootLayout.orientation, enums.Orientation.vertical, "Default orientation should be Vertical.");
}
public test_SetWrongOrientation_ShouldThrowError() {
TKUnit.assertThrows(() => { this.rootLayout.orientation = "not_valid"; },
"Setting invalid value for orientation should throw exception.");
}
public test_Orientation_Change() {
this.waitUntilTestElementLayoutIsValid();
var arrangeCount = this.rootLayout.arrangeCount;
TKUnit.assert(this.rootLayout.orientation === enums.Orientation.vertical, "Default orientation should be Vertical.");
this.rootLayout.orientation = enums.Orientation.horizontal;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.rootLayout.measureCount, 2, "Orientation change should invalidate measure.");
TKUnit.assertEqual(this.rootLayout.arrangeCount, 2, "Orientation change should invalidate arrange.");
}
public test_ShouldMeasureWith_AtMost_OnVertical() {
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.rootLayout.orientation, enums.Orientation.vertical, "StackLayout should be vertical.");
TKUnit.assert(this.rootLayout.measured, "Layout should be measured.");
TKUnit.assert(this.rootLayout.arranged, "Layout should be arranged.");
var specs = this.btn1._getCurrentMeasureSpecs();
TKUnit.assertEqual(utils.layout.getMeasureSpecMode(specs.heightMeasureSpec), utils.layout.AT_MOST, "Layout should measure child with AT_MOST Height in vertical orientation.");
}
public test_ShouldMeasureWith_AtMost_OnHorizontal() {
this.rootLayout.orientation = enums.Orientation.horizontal;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assert(this.rootLayout.measured, "Layout should be measured.");
TKUnit.assert(this.rootLayout.arranged, "Layout should be arranged.");
var specs = this.btn1._getCurrentMeasureSpecs();
TKUnit.assertEqual(utils.layout.getMeasureSpecMode(specs.widthMeasureSpec), utils.layout.AT_MOST, "Layout should measure child with AT_MOST Width in horizontal orientation.");
}
public test_DesiredSize_Vertical() {
this.rootLayout.verticalAlignment = enums.VerticalAlignment.top;
this.rootLayout.horizontalAlignment = enums.HorizontalAlignment.left;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.rootLayout.getMeasuredWidth(), Math.max(this.btn1.getMeasuredWidth(), this.btn2.getMeasuredWidth()), "Layout getMeasuredWidth should be Max of children getMeasuredWidth");
TKUnit.assertEqual(this.rootLayout.getMeasuredHeight(), (this.btn1.getMeasuredHeight() + this.btn2.getMeasuredHeight()), "Layout getMeasuredHeight should be Sum of children getMeasuredHeight");
}
public test_DesiredSize_Horizontal() {
this.rootLayout.horizontalAlignment = enums.HorizontalAlignment.left;
this.rootLayout.verticalAlignment = enums.VerticalAlignment.top;
this.rootLayout.orientation = enums.Orientation.horizontal;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.rootLayout.getMeasuredWidth(), (this.btn1.getMeasuredWidth() + this.btn2.getMeasuredWidth()), "Layout getMeasuredWidth should be Sum of children getMeasuredWidth");
TKUnit.assertEqual(this.rootLayout.getMeasuredHeight(), Math.max(this.btn1.getMeasuredHeight(), this.btn2.getMeasuredHeight()), "Layout getMeasuredHeight should be Max of children getMeasuredHeight");
}
public test_Padding_Vertical() {
this.rootLayout.width = 300;
this.rootLayout.height = 300;
this.rootLayout.paddingLeft = 10;
this.rootLayout.paddingTop = 20;
this.rootLayout.paddingRight = 30;
this.rootLayout.paddingBottom = 40;
this.btn1.height = 50;
this.btn2.height = 50;
this.waitUntilTestElementLayoutIsValid();
helper.assertMeasure(this.btn1, 260, 50);
helper.assertMeasure(this.btn2, 260, 50);
helper.assertLayout(this.btn1, 10, 20, 260, 50, "btn1");
helper.assertLayout(this.btn2, 10, 70, 260, 50, "btn2");
}
public test_Padding_Horizontal() {
this.rootLayout.width = 300;
this.rootLayout.height = 300;
this.rootLayout.orientation = enums.Orientation.horizontal;
this.rootLayout.paddingLeft = 10;
this.rootLayout.paddingTop = 20;
this.rootLayout.paddingRight = 30;
this.rootLayout.paddingBottom = 40;
this.btn1.width = 50;
this.btn2.width = 50;
this.waitUntilTestElementLayoutIsValid();
helper.assertMeasure(this.btn1, 50, 240);
helper.assertMeasure(this.btn2, 50, 240);
helper.assertLayout(this.btn1, 10, 20, 50, 240, "btn1");
helper.assertLayout(this.btn2, 60, 20, 50, 240, "btn2");
}
private assertChildTexts(expected, layout, message) {
let texts: Array<string> = [];
layout._eachChildView((child: { text: string }) => texts.push(child.text));
TKUnit.assertEqual(expected, texts.join('|'), message);
}
public test_insertChildAtPosition() {
this.assertChildTexts("btn1|btn2", this.rootLayout, "initial 2 buttons");
let newChild = new Button();
newChild.text = 'in-between';
this.rootLayout.insertChild(newChild, 1);
this.assertChildTexts("btn1|in-between|btn2", this.rootLayout, "button inserted at correct location");
}
public test_getChildIndex() {
let lastChildIndex = this.rootLayout.getChildrenCount() - 1;
let lastButton = <Button>this.rootLayout.getChildAt(lastChildIndex);
TKUnit.assertEqual("btn2", lastButton.text);
TKUnit.assertEqual(lastChildIndex, this.rootLayout.getChildIndex(lastButton));
let nonChild = new Button();
TKUnit.assertEqual(-1, this.rootLayout.getChildIndex(nonChild));
}
public test_codesnippets() {
// <snippet module="ui/layouts/stack-layout" title="stack-layout">
// ### import StackLayout and Button classes
// var StackLayout = require("ui/layouts/stack-layout").StackLayout;
// var Button = require("ui/button").Button;
// ### Create StackLayout
// ``` JavaScript
var stackLayout = new StackLayout();
// ```
// ### Declaring a StackLayout.
//```XML
// <Page>
// <StackLayout orientation="horizontal">
// <Label text="This is Label 1" />
// </StackLayout>
// </Page>
//```
// </snippet>
// ### Add child view to layout
// ``` JavaScript
var btn = new Button();
stackLayout.addChild(btn);
// ```
// ### Remove child view from layout
// ``` JavaScript
stackLayout.removeChild(btn);
// ```
// ### Change layout orientation to Horizontal
// ``` JavaScript
stackLayout.orientation = enums.Orientation.horizontal;
// ```
// </snippet>
}
}
export function tearDownModule() {
navHelper.goBack();
tmp = null;
newPage = null;
rootLayout = null;
btn1 = null;
btn2 = null;
}
export function setUp() {
rootLayout = new helper.MyStackLayout();
btn1 = new helper.MyButton();
btn1.text = "btn1";
rootLayout.addChild(btn1);
btn2 = new helper.MyButton();
btn2.text = "btn2";
rootLayout.addChild(btn2);
newPage.content = rootLayout;
}
export function tearDown() {
newPage.content = tmp;
}
export function test_orientation_DefaultValue() {
TKUnit.assertEqual(rootLayout.orientation, enums.Orientation.vertical, "Default orientation should be Vertical.");
}
export function test_SetWrongOrientation_ShouldThrowError() {
TKUnit.assertThrows(() => { rootLayout.orientation = "not_valid"; },
"Setting invalid value for orientation should throw exception.");
}
export function test_Orientation_Change() {
TKUnit.waitUntilReady(function () {
return rootLayout.arranged;
}, ASYNC);
var arrangeCount = rootLayout.arrangeCount;
TKUnit.assert(rootLayout.orientation === enums.Orientation.vertical, "Default orientation should be Vertical.");
rootLayout.orientation = enums.Orientation.horizontal;
TKUnit.waitUntilReady(function () {
return rootLayout.arrangeCount > arrangeCount;
}, ASYNC);
TKUnit.assertEqual(rootLayout.measureCount, 2, "Orientation change should invalidate measure.");
TKUnit.assertEqual(rootLayout.arrangeCount, 2, "Orientation change should invalidate arrange.");
}
export function test_ShouldMeasureWith_AtMost_OnVertical() {
TKUnit.waitUntilReady(function () {
return btn1.isLayoutValid;
}, ASYNC);
TKUnit.assertEqual(rootLayout.orientation, enums.Orientation.vertical, "StackLayout should be vertical.");
TKUnit.assert(rootLayout.measured, "Layout should be measured.");
TKUnit.assert(rootLayout.arranged, "Layout should be arranged.");
var specs = btn1._getCurrentMeasureSpecs();
TKUnit.assertEqual(utils.layout.getMeasureSpecMode(specs.heightMeasureSpec), utils.layout.AT_MOST, "Layout should measure child with AT_MOST Height in vertical orientation.");
}
export function test_ShouldMeasureWith_AtMost_OnHorizontal() {
rootLayout.orientation = enums.Orientation.horizontal;
TKUnit.waitUntilReady(function () {
return btn1.arranged;
}, ASYNC);
TKUnit.assert(rootLayout.measured, "Layout should be measured.");
TKUnit.assert(rootLayout.arranged, "Layout should be arranged.");
var specs = btn1._getCurrentMeasureSpecs();
TKUnit.assertEqual(utils.layout.getMeasureSpecMode(specs.widthMeasureSpec), utils.layout.AT_MOST, "Layout should measure child with AT_MOST Width in horizontal orientation.");
}
export function test_DesiredSize_Vertical() {
rootLayout.verticalAlignment = enums.VerticalAlignment.top;
rootLayout.horizontalAlignment = enums.HorizontalAlignment.left;
TKUnit.waitUntilReady(function () {
return btn2.arranged;
}, ASYNC);
TKUnit.assertEqual(rootLayout.getMeasuredWidth(), Math.max(btn1.getMeasuredWidth(), btn2.getMeasuredWidth()), "Layout getMeasuredWidth should be Max of children getMeasuredWidth");
TKUnit.assertEqual(rootLayout.getMeasuredHeight(), (btn1.getMeasuredHeight() + btn2.getMeasuredHeight()), "Layout getMeasuredHeight should be Sum of children getMeasuredHeight");
}
export function test_DesiredSize_Horizontal() {
rootLayout.horizontalAlignment = enums.HorizontalAlignment.left;
rootLayout.verticalAlignment = enums.VerticalAlignment.top;
rootLayout.orientation = enums.Orientation.horizontal;
TKUnit.waitUntilReady(function () {
return btn2.arranged;
}, ASYNC);
TKUnit.assertEqual(rootLayout.getMeasuredWidth(), (btn1.getMeasuredWidth() + btn2.getMeasuredWidth()), "Layout getMeasuredWidth should be Sum of children getMeasuredWidth");
TKUnit.assertEqual(rootLayout.getMeasuredHeight(), Math.max(btn1.getMeasuredHeight(), btn2.getMeasuredHeight()), "Layout getMeasuredHeight should be Max of children getMeasuredHeight");
}
export function test_Padding_Vertical() {
rootLayout.width = 300;
rootLayout.height = 300;
rootLayout.paddingLeft = 10;
rootLayout.paddingTop = 20;
rootLayout.paddingRight = 30;
rootLayout.paddingBottom = 40;
btn1.height = 50;
btn2.height = 50;
TKUnit.waitUntilReady(function () {
return btn2.arranged;
}, ASYNC);
helper.assertMeasure(btn1, 260, 50);
helper.assertMeasure(btn2, 260, 50);
helper.assertLayout(btn1, 10, 20, 260, 50, "btn1");
helper.assertLayout(btn2, 10, 70, 260, 50, "btn2");
}
export function test_Padding_Horizontal() {
rootLayout.width = 300;
rootLayout.height = 300;
rootLayout.orientation = enums.Orientation.horizontal;
rootLayout.paddingLeft = 10;
rootLayout.paddingTop = 20;
rootLayout.paddingRight = 30;
rootLayout.paddingBottom = 40;
btn1.width = 50;
btn2.width = 50;
TKUnit.waitUntilReady(function () {
return btn2.arranged;
}, ASYNC);
helper.assertMeasure(btn1, 50, 240);
helper.assertMeasure(btn2, 50, 240);
helper.assertLayout(btn1, 10, 20, 50, 240, "btn1");
helper.assertLayout(btn2, 60, 20, 50, 240, "btn2");
}
function assertChildTexts(expected, layout, message) {
let texts: Array<string> = [];
layout._eachChildView((child: {text: string}) => texts.push(child.text));
TKUnit.assertEqual(expected, texts.join('|'), message);
}
export function test_insertChildAtPosition() {
assertChildTexts("btn1|btn2", rootLayout, "initial 2 buttons");
let newChild = new Button();
newChild.text = 'in-between';
rootLayout.insertChild(newChild, 1);
assertChildTexts("btn1|in-between|btn2", rootLayout, "button inserted at correct location");
}
export function test_getChildIndex() {
let lastChildIndex = rootLayout.getChildrenCount() - 1;
let lastButton = <Button>rootLayout.getChildAt(lastChildIndex);
TKUnit.assertEqual("btn2", lastButton.text);
TKUnit.assertEqual(lastChildIndex, rootLayout.getChildIndex(lastButton));
let nonChild = new Button();
TKUnit.assertEqual(-1, rootLayout.getChildIndex(nonChild));
}
export function test_codesnippets() {
// <snippet module="ui/layouts/stack-layout" title="stack-layout">
// ### Create StackLayout
// ``` JavaScript
var stackLayout = new StackLayout();
// ```
// ### Declaring a StackLayout.
//```XML
// <Page>
// <StackLayout orientation="horizontal">
// <Label text="This is Label 1" />
// </StackLayout>
// </Page>
//```
// </snippet>
// ### Add child view to layout
// ``` JavaScript
var btn = new Button();
stackLayout.addChild(btn);
// ```
// ### Remove child view from layout
// ``` JavaScript
stackLayout.removeChild(btn);
// ```
// ### Change layout orientation to Horizontal
// ``` JavaScript
stackLayout.orientation = enums.Orientation.horizontal;
// ```
// </snippet>
}
export function createTestCase(): StackLayoutTest {
return new StackLayoutTest();
}

View File

@ -3,6 +3,7 @@ import viewModule = require("ui/core/view");
import labelModule = require("ui/label");
import helper = require("../ui/helper");
import layoutHelper = require("./layout-helper");
import testModule = require("../ui-test");
// <snippet module="ui/layouts/wrap-layout" title="WrapLayout">
// # WrapLayout
@ -17,220 +18,174 @@ import enums = require("ui/enums");
// ```
// </snippet>
var _createWrapLayoutFunc = function (childCount: number, childWidth?: number, childHeight?: number): wrapLayoutModule.WrapLayout {
// <snippet module="ui/layouts/wrap-layout" title="WrapLayout">
// ## Creating a WrapLayout
// ``` JavaScript
var wrapLayout = new wrapLayoutModule.WrapLayout();
// ```
// </snippet>
export class WrapLayoutTest extends testModule.UITest<wrapLayoutModule.WrapLayout> {
// ### Declaring a WrapLayout.
//```XML
// <Page>
// <WrapLayout>
// <Label text="This is Label 1" />
// <Label text="This is Label 2" />
// <Label text="This is Label 3" />
// <Label text="This is Label 4" />
// </WrapLayout>
// </Page>
//```
// </snippet>
public create(): wrapLayoutModule.WrapLayout {
// <snippet module="ui/layouts/wrap-layout" title="WrapLayout">
// ## Creating a WrapLayout
// ``` JavaScript
var wrapLayout = new wrapLayoutModule.WrapLayout();
// ```
// </snippet>
wrapLayout.width = 200;
wrapLayout.height = 200;
// ### Declaring a WrapLayout.
//```XML
// <Page>
// <WrapLayout>
// <Label text="This is Label 1" />
// <Label text="This is Label 2" />
// <Label text="This is Label 3" />
// <Label text="This is Label 4" />
// </WrapLayout>
// </Page>
//```
// </snippet>
var label;
var i;
for (i = 0; i < childCount; i++) {
label = new labelModule.Label();
label.text = "" + i;
label.id = "" + i;
wrapLayout.width = 200;
wrapLayout.height = 200;
label.width = childWidth || 100;
label.height = childHeight || 100;
wrapLayout.addChild(label);
var label;
var i;
for (i = 0; i < 2; i++) {
label = new labelModule.Label();
label.text = "" + i;
label.id = "" + i;
label.width = 100;
label.height = 100;
wrapLayout.addChild(label);
}
return wrapLayout;
}
return wrapLayout;
}
public testHorizontalOrientation() {
export function testHorizontalOrientation() {
var wrapLayout = _createWrapLayoutFunc(2);
wrapLayout.orientation = enums.Orientation.horizontal;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
this.testView.orientation = enums.Orientation.horizontal;
this.waitUntilTestElementLayoutIsValid();
var actualValue = wrapLayout.getChildAt(0)._getCurrentLayoutBounds();
let actualValue = this.testView.getChildAt(0)._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 0");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop on Index 0");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 0");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom on Index 0");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, layoutHelper.dip(100), "ActualLeft on Index 1");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop on Index 1");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(200), "ActualRight on Index 1");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom on Index 1");
});
}
}
export function testVerticalOrientation() {
var wrapLayout = _createWrapLayoutFunc(2);
// <snippet module="ui/layouts/wrap-layout" title="WrapLayout">
// ## Setting the orientation of a wrap-layout.
// ``` JavaScript
wrapLayout.orientation = enums.Orientation.vertical;
// ```
// </snippet>
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 0");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop on Index 0");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 0");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom on Index 0");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 1");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop on Index 1");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 1");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom on Index 1");
});
}
export function testChangeOrientation() {
var wrapLayout = _createWrapLayoutFunc(2);
wrapLayout.orientation = enums.Orientation.horizontal;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
public testVerticalOrientation() {
var wrapLayout = this.testView;
// <snippet module="ui/layouts/wrap-layout" title="WrapLayout">
// ## Setting the orientation of a wrap-layout.
// ``` JavaScript
wrapLayout.orientation = enums.Orientation.vertical;
// ```
// </snippet>
this.waitUntilTestElementLayoutIsValid();
TKUnit.waitUntilReady(() => {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
let actualValue = this.testView.getChildAt(0)._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 0");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop on Index 0");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 0");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom on Index 0");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 1");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop on Index 1");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 1");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom on Index 1");
});
}
}
export function testItemWidth() {
var wrapLayout = _createWrapLayoutFunc(2);
wrapLayout.itemWidth = 50;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
public testChangeOrientation() {
this.testView.orientation = enums.Orientation.horizontal;
this.waitUntilTestElementLayoutIsValid();
this.testView.orientation = enums.Orientation.vertical;
this.waitUntilTestElementLayoutIsValid();
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().left;
let actualValue = this.testView.getChildAt(0)._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 0");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop on Index 0");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 0");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom on Index 0");
actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft on Index 1");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop on Index 1");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight on Index 1");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom on Index 1");
}
public testItemWidth() {
this.testView.itemWidth = 50;
this.waitUntilTestElementLayoutIsValid();
let actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds().left;
TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualLeft on Index 1");
});
}
}
export function testChangeItemWidth() {
var wrapLayout = _createWrapLayoutFunc(2);
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
public testChangeItemWidth() {
this.waitUntilTestElementLayoutIsValid();
this.testView.itemWidth = 50;
this.waitUntilTestElementLayoutIsValid();
wrapLayout.itemWidth = 50;
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
});
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().left;
let actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds().left;
TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualLeft on Index 1");
});
}
}
export function testItemHeight() {
var wrapLayout = _createWrapLayoutFunc(2);
wrapLayout.itemHeight = 50;
wrapLayout.orientation = enums.Orientation.vertical;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
public testItemHeight() {
this.testView.itemHeight = 50;
this.testView.orientation = enums.Orientation.vertical;
this.waitUntilTestElementLayoutIsValid();
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().top;
let actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds().top;
TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualTop on Index 1");
});
}
}
export function testChangeItemHeight() {
var wrapLayout = _createWrapLayoutFunc(2);
wrapLayout.orientation = enums.Orientation.vertical;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
public testChangeItemHeight() {
this.testView.orientation = enums.Orientation.vertical;
this.waitUntilTestElementLayoutIsValid();
this.testView.itemHeight = 50;
this.waitUntilTestElementLayoutIsValid();
wrapLayout.itemHeight = 50;
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
});
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().top;
let actualValue = this.testView.getChildAt(1)._getCurrentLayoutBounds().top;
TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualTop on Index 1");
});
}
}
export function testPaddingLeftAndTop() {
var wrapLayout = new wrapLayoutModule.WrapLayout();
wrapLayout.paddingLeft = 20;
wrapLayout.paddingTop = 30;
public testPaddingLeftAndTop() {
this.testView.removeChildren();
this.testView.paddingLeft = 20;
this.testView.paddingTop = 30;
var btn = new layoutHelper.MyButton();
btn.width = 50;
btn.height = 50;
wrapLayout.addChild(btn);
var btn = new layoutHelper.MyButton();
btn.width = 50;
btn.height = 50;
this.testView.addChild(btn);
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
this.waitUntilTestElementLayoutIsValid();
layoutHelper.assertLayout(btn, 20, 30, 50, 50);
});
}
}
export function testPaddingRight() {
var wrapLayout = new wrapLayoutModule.WrapLayout();
wrapLayout.paddingRight = 30;
wrapLayout.width = 200;
public testPaddingRight() {
this.testView.removeChildren();
this.testView.paddingRight = 30;
this.testView.width = 200;
var btn1 = new layoutHelper.MyButton();
wrapLayout.addChild(btn1);
btn1.width = 100;
btn1.height = 50;
var btn1 = new layoutHelper.MyButton();
this.testView.addChild(btn1);
btn1.width = 100;
btn1.height = 50;
var btn2 = new layoutHelper.MyButton();
btn2.width = 80;
btn2.height = 50;
wrapLayout.addChild(btn2);
var btn2 = new layoutHelper.MyButton();
btn2.width = 80;
btn2.height = 50;
this.testView.addChild(btn2);
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
this.waitUntilTestElementLayoutIsValid();
layoutHelper.assertMeasure(btn1, 100, 50);
layoutHelper.assertMeasure(btn2, 80, 50);
@ -239,29 +194,25 @@ export function testPaddingRight() {
// because for the padding (200 - 100 - 30) = 70 button wants 80
layoutHelper.assertLayout(btn1, 0, 0, 100, 50, "button1");
layoutHelper.assertLayout(btn2, 0, 50, 80, 50, "button2");
});
}
}
export function testPaddingBottom() {
var wrapLayout = new wrapLayoutModule.WrapLayout();
wrapLayout.paddingBottom = 30;
wrapLayout.height = 200;
wrapLayout.orientation = enums.Orientation.vertical;
public testPaddingBottom() {
this.testView.removeChildren();
this.testView.paddingBottom = 30;
this.testView.height = 200;
this.testView.orientation = enums.Orientation.vertical;
var btn1 = new layoutHelper.MyButton();
wrapLayout.addChild(btn1);
btn1.width = 50;
btn1.height = 100;
var btn1 = new layoutHelper.MyButton();
this.testView.addChild(btn1);
btn1.width = 50;
btn1.height = 100;
var btn2 = new layoutHelper.MyButton();
btn2.width = 50;
btn2.height = 80;
wrapLayout.addChild(btn2);
var btn2 = new layoutHelper.MyButton();
btn2.width = 50;
btn2.height = 80;
this.testView.addChild(btn2);
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
this.waitUntilTestElementLayoutIsValid();
layoutHelper.assertMeasure(btn1, 50, 100);
layoutHelper.assertMeasure(btn2, 50, 80);
@ -270,5 +221,9 @@ export function testPaddingBottom() {
// because of the padding (200 - 100 - 30) = 70 button wants 80
layoutHelper.assertLayout(btn1, 0, 0, 50, 100, "button1");
layoutHelper.assertLayout(btn2, 50, 0, 50, 80, "button2");
});
}
}
export function createTestCase(): WrapLayoutTest {
return new WrapLayoutTest();
}

View File

@ -128,6 +128,27 @@ function printRunTestStats() {
}
}
function time(): number {
if (global.android) {
return java.lang.System.nanoTime() / 1000000; // 1 ms = 1000000 ns
}
else {
return CACurrentMediaTime() * 1000;
}
}
function startLog(): void {
let testsName: string = this.name;
TKUnit.write("START " + testsName + " TESTS.", trace.messageType.info);
this.start = time();
}
function log(): void {
let testsName: string = this.name;
let duration = time() - this.start;
TKUnit.write(testsName + " COMPLETED for " + duration, trace.messageType.info);
}
export var runAll = function (moduleName?: string) {
if (running) {
// TODO: We may schedule pending run requests
@ -143,19 +164,18 @@ export var runAll = function (moduleName?: string) {
}
var testModule = allTests[name];
//var moduleStart = function (moduleName) {
// return function () {
// TKUnit.write("--- " + moduleName + " TESTS BEGIN ---", trace.messageType.info);
// }
//};
//testsQueue.push(new TestInfo(moduleStart(name)));
var test = testModule.createTestCase ? testModule.createTestCase() : testModule;
test.name = name;
testsQueue.push(new TestInfo(startLog, test));
if (test.setUpModule) {
testsQueue.push(new TestInfo(test.setUpModule, test));
}
for (var testName in test) {
var testFunction = test[testName];
if ((typeof (testFunction) === "function") && (testName.substring(0, 4) == "test")) {
@ -172,13 +192,7 @@ export var runAll = function (moduleName?: string) {
if (test.tearDownModule) {
testsQueue.push(new TestInfo(test.tearDownModule, test));
}
//var moduleEnd = function (moduleName) {
// return function () {
// TKUnit.write("--- " + moduleName + " TESTS COMPLETE --- ", trace.messageType.info);
// };
//}
//testsQueue.push(new TestInfo(moduleEnd(name)));
testsQueue.push(new TestInfo(log, test));
}
testsQueue.push(new TestInfo(printRunTestStats));

View File

@ -1,12 +1,12 @@
import pageModule = require("ui/page");
import navHelper = require("./ui/helper");
import viewModule = require("ui/core/view");
import {Page} from "ui/page";
import {View} from "ui/core/view";
import trace = require("trace");
import navHelper = require("./ui/helper");
import TKUnit = require("./TKUnit");
export class UITest<T extends viewModule.View> implements trace.TraceWriter {
export class UITest<T extends View> implements trace.TraceWriter {
private _testPage: pageModule.Page;
private _testPage: Page;
private _testView: T;
private _errorMessage;
@ -14,7 +14,7 @@ export class UITest<T extends viewModule.View> implements trace.TraceWriter {
return this._errorMessage;
}
public get testPage(): pageModule.Page {
public get testPage(): Page {
return this._testPage;
}
@ -41,7 +41,7 @@ export class UITest<T extends viewModule.View> implements trace.TraceWriter {
public setUpModule(): void {
var pageFactory = () => {
var page = new pageModule.Page();
var page = new Page();
this._testPage = page;
return page;
};
@ -67,6 +67,7 @@ export class UITest<T extends viewModule.View> implements trace.TraceWriter {
this._testPage.content = null;
this._testPage.bindingContext = null;
this._testPage.css = "";
this._testView = null;
this._errorMessage = undefined;
}
@ -77,6 +78,6 @@ export class UITest<T extends viewModule.View> implements trace.TraceWriter {
}
}
export function createTestCase(): UITest<viewModule.View> {
export function createTestCase(): UITest<View> {
return null;
}

View File

@ -5,6 +5,7 @@ import buttonModule = require("ui/button");
import page = require("ui/page");
import button = require("ui/button");
import enums = require("ui/enums");
import testModule = require("../../ui-test");
// <snippet module="ui/scroll-view" title="scroll-view">
// # ScrollView
@ -24,278 +25,248 @@ import scrollViewModule = require("ui/scroll-view");
// </snippet>
var ASYNC = 5;
var tmp: buttonModule.Button;
var newPage: page.Page;
// <snippet module="ui/scroll-view" title="scroll-view">
// ### Creating a ScrollView
// ``` JavaScript
var scrollView = new scrollViewModule.ScrollView();
// ```
// </snippet>
export function setUpModule() {
var pageFactory = function (): page.Page {
newPage = new page.Page();
tmp = new buttonModule.Button();
tmp.text = "Loading test";
newPage.content = tmp;
return newPage;
};
helper.navigate(pageFactory);
}
export function tearDownModule() {
helper.goBack();
tmp = null;
newPage = null;
scrollView = null;
}
export function setUp() {
scrollView = new scrollViewModule.ScrollView();
newPage.content = scrollView;
}
export function tearDown() {
newPage.content = tmp;
}
function waitForLayout() {
TKUnit.waitUntilReady(function () {
return scrollView.content.isLayoutValid;
}, ASYNC);
}
export function test_default_TNS_values() {
TKUnit.assertEqual(scrollView.orientation, enums.Orientation.vertical, "Default scrollView.orientation");
TKUnit.assertEqual(scrollView.verticalOffset, 0, "Default scrollView.verticalOffset");
TKUnit.assertEqual(scrollView.horizontalOffset, 0, "Default scrollView.horizontalOffset");
}
export function test_vertical_oriantation_creates_correct_native_view() {
scrollView.orientation = enums.Orientation.vertical;
if (app.android) {
TKUnit.assert(scrollView.android instanceof android.widget.ScrollView, "android property is android.widget.ScrollView");
class ScrollLayoutTest extends testModule.UITest<scrollViewModule.ScrollView> {
public create(): scrollViewModule.ScrollView {
return new scrollViewModule.ScrollView();
}
else if (app.ios) {
TKUnit.assert(scrollView.ios instanceof UIScrollView, "ios property is UIScrollView");
public test_snippets() {
// <snippet module="ui/scroll-view" title="scroll-view">
// ### Creating a ScrollView
// ``` JavaScript
var scrollView = new scrollViewModule.ScrollView();
// ```
// </snippet>
}
public test_default_TNS_values() {
TKUnit.assertEqual(this.testView.orientation, enums.Orientation.vertical, "Default this.testView.orientation");
TKUnit.assertEqual(this.testView.verticalOffset, 0, "Default this.testView.verticalOffset");
TKUnit.assertEqual(this.testView.horizontalOffset, 0, "Default this.testView.horizontalOffset");
}
public test_vertical_oriantation_creates_correct_native_view() {
this.testView.orientation = enums.Orientation.vertical;
if (app.android) {
TKUnit.assert(this.testView.android instanceof org.nativescript.widgets.VerticalScrollView, "android property should be instanceof org.nativescript.widgets.VerticalScrollView");
}
else if (app.ios) {
TKUnit.assert(this.testView.ios instanceof UIScrollView, "ios property is UIScrollView");
}
}
public test_horizontal_oriantation_creates_correct_native_view() {
this.testView.orientation = enums.Orientation.horizontal;
if (app.android) {
TKUnit.assert(this.testView.android instanceof org.nativescript.widgets.HorizontalScrollView, "android property should be instanceof org.nativescript.widgets.HorizontalScrollView");
}
else if (app.ios) {
TKUnit.assert(this.testView.ios instanceof UIScrollView, "ios property is UIScrollView");
}
}
public test_scrollabeHeight_vertical_orientation_when_content_is_small() {
this.testView.orientation = enums.Orientation.vertical;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.height = 100;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.scrollableHeight, 0, "this.testView.scrollableHeight");
TKUnit.assertEqual(this.testView.scrollableWidth, 0, "this.testView.scrollableWidth");
}
public test_scrollabeHeight_vertical_orientation_when_content_is_big() {
this.testView.orientation = enums.Orientation.vertical;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.height = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertAreClose(this.testView.scrollableHeight, 200, 0.4, "this.testView.scrollableHeight");
TKUnit.assertEqual(this.testView.scrollableWidth, 0, "this.testView.scrollableWidth");
}
public test_scrollabeWidth_horizontal_orientation_when_content_is_small() {
this.testView.orientation = enums.Orientation.vertical;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.width = 100;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.scrollableHeight, 0, "this.testView.scrollableHeight");
TKUnit.assertEqual(this.testView.scrollableWidth, 0, "this.testView.scrollableWidth");
}
public test_scrollabeWidth_horizontal_orientation_when_content_is_big() {
this.testView.orientation = enums.Orientation.horizontal;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.width = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.scrollableHeight, 0, "this.testView.scrollableHeight");
TKUnit.assertAreClose(this.testView.scrollableWidth, 300, 0.4, "this.testView.scrollableWidth");
}
public test_scrollToVerticalOffset_no_animation() {
this.testView.orientation = enums.Orientation.vertical;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.height = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.verticalOffset, 0, "this.testView.verticalOffset");
this.testView.scrollToVerticalOffset(100, false);
TKUnit.assertAreClose(this.testView.verticalOffset, 100, 0.1, "this.testView.verticalOffset");
}
public test_scrollToVerticalOffset_with_animation() {
this.testView.orientation = enums.Orientation.vertical;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.height = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.verticalOffset, 0, "this.testView.verticalOffset");
this.testView.scrollToVerticalOffset(100, true);
// No synchronous change.
TKUnit.assertEqual(this.testView.verticalOffset, 0, "this.testView.verticalOffset");
TKUnit.waitUntilReady(() => { return TKUnit.areClose(this.testView.verticalOffset, 100, 0.1); });
// The scrolling animation should be finished by now
TKUnit.assertAreClose(this.testView.verticalOffset, 100, 0.1, "this.testView.verticalOffset");
}
public test_scrollToHorizontalOffset_no_animation() {
this.testView.orientation = enums.Orientation.horizontal;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.width = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.horizontalOffset, 0, "this.testView.horizontalOffset");
this.testView.scrollToHorizontalOffset(100, false);
TKUnit.assertAreClose(this.testView.horizontalOffset, 100, 0.1, "this.testView.horizontalOffset");
}
public test_scrollToHorizontalOffset_with_animation() {
this.testView.orientation = enums.Orientation.horizontal;
this.testView.width = 200;
this.testView.height = 300;
let btn = new button.Button();
btn.text = "test";
btn.width = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
TKUnit.assertEqual(this.testView.horizontalOffset, 0, "this.testView.horizontalOffset");
this.testView.scrollToHorizontalOffset(100, true);
// No synchronous change.
TKUnit.assertEqual(this.testView.horizontalOffset, 0, "this.testView.horizontalOffset");
TKUnit.waitUntilReady(() => { return TKUnit.areClose(this.testView.horizontalOffset, 100, 0.1); });
// The scrolling animation should be finished by now
TKUnit.assertAreClose(this.testView.horizontalOffset, 100, 0.1, "this.testView.horizontalOffset");
}
public test_scrollView_persistsState_vertical() {
this.testView.orientation = enums.Orientation.vertical;
this.testView.width = 200;
this.testView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.height = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
this.testView.scrollToVerticalOffset(100, false);
TKUnit.assertAreClose(this.testView.verticalOffset, 100, 0.1, "this.testView.verticalOffset before navigation");
helper.do_PageTest_WithButton((t) => {
// Just navigate forward and back.
});
// Wait for the page to reload.
TKUnit.waitUntilReady(() => { return TKUnit.areClose(this.testView.verticalOffset, 100, 0.1); });
// Check verticalOffset after navigation
TKUnit.assertAreClose(this.testView.verticalOffset, 100, 0.1, "this.testView.verticalOffset after navigation");
}
public test_scrollView_persistsState_horizontal() {
this.testView.orientation = enums.Orientation.horizontal;
this.testView.width = 200;
this.testView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.width = 500;
this.testView.content = btn;
this.waitUntilTestElementLayoutIsValid();
this.testView.scrollToHorizontalOffset(100, false);
TKUnit.assertAreClose(this.testView.horizontalOffset, 100, 0.1, "this.testView.horizontalOffset before navigation");
helper.do_PageTest_WithButton((t) => {
// Just navigate forward and back.
});
// Wait for the page to reload.
TKUnit.waitUntilReady(() => { return TKUnit.areClose(this.testView.horizontalOffset, 100, 0.1); });
// Check verticalOffset after navigation
TKUnit.assertAreClose(this.testView.horizontalOffset, 100, 0.1, "this.testView.horizontalOffset after navigation");
}
}
export function test_horizontal_oriantation_creates_correct_native_view() {
scrollView.orientation = enums.Orientation.horizontal;
if (app.android) {
TKUnit.assert(scrollView.android instanceof android.widget.HorizontalScrollView, "android property is android.widget.HorizontalScrollView");
}
else if (app.ios) {
TKUnit.assert(scrollView.ios instanceof UIScrollView, "ios property is UIScrollView");
}
}
export function test_scrollabeHeight_vertical_orientation_when_content_is_small() {
scrollView.orientation = enums.Orientation.vertical;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.height = 100;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.scrollableHeight, 0, "scrollView.scrollableHeight");
TKUnit.assertEqual(scrollView.scrollableWidth, 0, "scrollView.scrollableWidth");
}
export function test_scrollabeHeight_vertical_orientation_when_content_is_big() {
scrollView.orientation = enums.Orientation.vertical;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.height = 500;
scrollView.content = btn;
waitForLayout();
TKUnit.assertAreClose(scrollView.scrollableHeight, 200, 0.4, "scrollView.scrollableHeight");
TKUnit.assertEqual(scrollView.scrollableWidth, 0, "scrollView.scrollableWidth");
}
export function test_scrollabeWidth_horizontal_orientation_when_content_is_small() {
scrollView.orientation = enums.Orientation.vertical;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.width = 100;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.scrollableHeight, 0, "scrollView.scrollableHeight");
TKUnit.assertEqual(scrollView.scrollableWidth, 0, "scrollView.scrollableWidth");
}
export function test_scrollabeWidth_horizontal_orientation_when_content_is_big() {
scrollView.orientation = enums.Orientation.horizontal;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.width = 500;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.scrollableHeight, 0, "scrollView.scrollableHeight");
TKUnit.assertAreClose(scrollView.scrollableWidth, 300, 0.4, "scrollView.scrollableWidth");
}
export function test_scrollToVerticalOffset_no_animation() {
scrollView.orientation = enums.Orientation.vertical;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.height = 500;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.verticalOffset, 0, "scrollView.verticalOffset");
scrollView.scrollToVerticalOffset(100, false);
TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset");
}
export function test_scrollToVerticalOffset_with_animation() {
scrollView.orientation = enums.Orientation.vertical;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.height = 500;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.verticalOffset, 0, "scrollView.verticalOffset");
scrollView.scrollToVerticalOffset(100, true);
// No synchronous change.
TKUnit.assertEqual(scrollView.verticalOffset, 0, "scrollView.verticalOffset");
TKUnit.waitUntilReady(() => { return scrollView.verticalOffset === 100 }, ASYNC);
// The scrolling animation should be finished by now
TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset");
}
export function test_scrollToHorizontalOffset_no_animation() {
scrollView.orientation = enums.Orientation.horizontal;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.width = 500;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.horizontalOffset, 0, "scrollView.horizontalOffset");
scrollView.scrollToHorizontalOffset(100, false);
TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset");
}
export function test_scrollToHorizontalOffset_with_animation() {
scrollView.orientation = enums.Orientation.horizontal;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.width = 500;
scrollView.content = btn;
waitForLayout();
TKUnit.assertEqual(scrollView.horizontalOffset, 0, "scrollView.horizontalOffset");
scrollView.scrollToHorizontalOffset(100, true);
// No synchronous change.
TKUnit.assertEqual(scrollView.horizontalOffset, 0, "scrollView.horizontalOffset");
TKUnit.waitUntilReady(() => { return scrollView.horizontalOffset === 100 }, ASYNC);
// The scrolling animation should be finished by now
TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset");
}
export function test_scrollView_persistsState_vertical() {
scrollView.orientation = enums.Orientation.vertical;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.height = 500;
scrollView.content = btn;
waitForLayout();
scrollView.scrollToVerticalOffset(100, false);
TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset before navigation");
helper.do_PageTest_WithButton((t) => {
// Just navigate forward and back.
});
// Wait for the page to reload.
TKUnit.waitUntilReady(function () {
return Math.abs(scrollView.verticalOffset - 100) < 0.1;
}, ASYNC);
// Check verticalOffset after navigation
TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset after navigation");
}
export function test_scrollView_persistsState_horizontal() {
scrollView.orientation = enums.Orientation.horizontal;
scrollView.width = 200;
scrollView.height = 300;
var btn = new button.Button();
btn.text = "test";
btn.width = 500;
scrollView.content = btn;
waitForLayout();
scrollView.scrollToHorizontalOffset(100, false);
TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset before navigation");
helper.do_PageTest_WithButton((t) => {
// Just navigate forward and back.
});
// Wait for the page to reload.
TKUnit.waitUntilReady(function () {
return Math.abs(scrollView.horizontalOffset - 100) < 0.1;
}, ASYNC);
// Check verticalOffset after navigation
TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset after navigation");
}
export function createTestCase(): ScrollLayoutTest {
return new ScrollLayoutTest();
}

View File

@ -1,6 +1,7 @@
import TKUnit = require("../../TKUnit");
import helper = require("../helper");
import page = require("ui/page");
import testModule = require("../../ui-test");
// <snippet module="ui/web-view" title="WebView">
// # WebView
@ -20,230 +21,174 @@ import webViewModule = require("ui/web-view");
// </snippet>
var _createWebViewFunc = function (): webViewModule.WebView {
// <snippet module="ui/web-view" title="WebView">
// ### Creating a WebView
// ``` JavaScript
var webView = new webViewModule.WebView();
// ```
// </snippet>
return webView;
}
export class WebViewTest extends testModule.UITest<webViewModule.WebView> {
function prepare(): webViewModule.WebView {
var newPage: page.Page;
var webView = _createWebViewFunc();
var pageFactory = function (): page.Page {
newPage = new page.Page();
newPage.content = webView;
return newPage;
};
helper.navigate(pageFactory);
return webView;
}
export var testLoadExistingUrl = function () {
var webView = prepare();
var testFinished = false;
var actualUrl;
var actualError;
// <snippet module="ui/web-view" title="WebView">
// ### Using WebView
// ``` JavaScript
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
// <hide>
actualUrl = args.url;
actualError = args.error;
testFinished = true;
// </hide>
var message;
if (!args.error) {
message = "WebView finished loading " + args.url;
}
else {
message = "Error loading " + args.url + ": " + args.error;
}
});
webView.url = "http://nsbuild01.telerik.com/docs/";
// ```
// </snippet>
TKUnit.wait(4);
helper.goBack();
if (testFinished) {
TKUnit.assert(actualUrl === "http://nsbuild01.telerik.com/docs/", "args.url should equal http://nsbuild01.telerik.com/docs/");
TKUnit.assert(actualError === undefined, actualError);
public create(): webViewModule.WebView {
// <snippet module="ui/web-view" title="WebView">
// ### Creating a WebView
// ``` JavaScript
let webView = new webViewModule.WebView();
// ```
// </snippet>
return webView;
}
else {
TKUnit.assert(false, "TIMEOUT");
public testLoadExistingUrl(done) {
let webView = this.testView;
// <snippet module="ui/web-view" title="WebView">
// ### Using WebView
// ``` JavaScript
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
let message;
if (!args.error) {
message = "WebView finished loading " + args.url;
}
else {
message = "Error loading " + args.url + ": " + args.error;
}
// <hide>
try {
TKUnit.assertEqual(args.url, "http://nsbuild01.telerik.com/docs/", "args.url");
TKUnit.assertNull(args.error, "args.error");
done(null);
}
catch (e) {
done(e);
}
// </hide>
});
webView.url = "http://nsbuild01.telerik.com/docs/";
// ```
// </snippet>
}
public testLoadLocalFile(done) {
let webView = this.testView;
// <snippet module="ui/web-view" title="WebView">
// ### Using WebView
// ``` JavaScript
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
// <hide>
let actual;
let expectedTitle = 'MyTitle';
let expectedHtml = '<span style="color:red">Test</span>';
if (webView.ios) {
actual = webView.ios.stringByEvaluatingJavaScriptFromString("document.body.innerHTML").trim();
} else if (webView.android) {
actual = webView.android.getTitle();
}
try {
TKUnit.assertEqual(actual, webView.ios ? expectedHtml : expectedTitle, "File ~/ui/web-view/test.html not loaded properly.");
TKUnit.assertNull(args.error, "args.error");
done(null);
}
catch (e) {
done(e);
}
// </hide>
let message;
if (!args.error) {
message = "WebView finished loading " + args.url;
}
else {
message = "Error loading " + args.url + ": " + args.error;
}
});
webView.src = "~/ui/web-view/test.html";
// ```
// </snippet>
}
public testLoadHTMLString(done) {
let webView = this.testView;
// <snippet module="ui/web-view" title="WebView">
// ### Using WebView
// ``` JavaScript
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
// <hide>
let actual;
let expected;
if (webView.ios) {
actual = webView.ios.stringByEvaluatingJavaScriptFromString("document.body.innerHTML").trim();
expected = '<span style="color:red">Test</span>';
} else if (webView.android) {
actual = webView.android.getTitle();
expected = 'MyTitle';
}
try {
TKUnit.assertEqual(actual, expected, "HTML string not loaded properly. Actual: ");
TKUnit.assertNull(args.error, "args.error");
done(null);
}
catch (e) {
done(e);
}
// </hide>
let message;
if (!args.error) {
message = "WebView finished loading " + args.url;
}
else {
message = "Error loading " + args.url + ": " + args.error;
}
});
webView.src = '<!DOCTYPE html><html><head><title>MyTitle</title><meta charset="utf-8" /></head><body><span style="color:red">Test</span></body></html>';
// ```
// </snippet>
}
public testLoadInvalidUrl(done) {
let webView = this.testView;
let actualError;
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
if (actualError) {
// Android call this twice -- the second time args.error is undefined.
return;
}
actualError = args.error;
try {
TKUnit.assert(actualError !== undefined, "There should be an error.");
done(null);
}
catch (e) {
done(e);
}
});
webView.url = "kofti://mnogokofti";
}
public testLoadUpperCaseSrc(done) {
let webView = this.testView;
let targetSrc = "HTTP://nsbuild01.telerik.com/docs/";
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
try {
TKUnit.assertEqual(args.url, targetSrc.toLowerCase(), "args.url");
TKUnit.assertNull(args.error, "args.error");
done(null);
}
catch (e) {
done(e);
}
});
webView.src = targetSrc;
}
}
export var testLoadLocalFile = function () {
var webView = prepare();
var testFinished = false;
var actualHtml;
var actualTitle;
var actualError;
var expectedTitle = 'MyTitle';
var expectedHtml = '<span style="color:red">Test</span>';
// <snippet module="ui/web-view" title="WebView">
// ### Using WebView
// ``` JavaScript
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
// <hide>
if (webView.ios) {
actualHtml = webView.ios.stringByEvaluatingJavaScriptFromString("document.body.innerHTML").trim();
} else if (webView.android) {
actualTitle = webView.android.getTitle()
}
actualError = args.error;
testFinished = true;
// </hide>
var message;
if (!args.error) {
message = "WebView finished loading " + args.url;
}
else {
message = "Error loading " + args.url + ": " + args.error;
}
});
webView.src = "~/ui/web-view/test.html";
// ```
// </snippet>
TKUnit.wait(4);
helper.goBack();
if (testFinished) {
if (webView.ios) {
TKUnit.assert(actualHtml === expectedHtml, "File ~/ui/web-view/test.html not loaded properly. Actual: " + actualHtml);
} else if (webView.android) {
TKUnit.assert(actualTitle === expectedTitle, "File ~/ui/web-view/test.html not loaded properly. Actual: " + actualTitle);
}
TKUnit.assert(actualError === undefined, actualError);
}
else {
TKUnit.assert(false, "TIMEOUT");
}
}
export var testLoadHTMLString = function () {
var webView = prepare();
var testFinished = false;
var actualHtml;
var actualTitle;
var actualError;
var expectedTitle = 'MyTitle';
var expectedHtml = '<span style="color:red">Test</span>';
// <snippet module="ui/web-view" title="WebView">
// ### Using WebView
// ``` JavaScript
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
// <hide>
if (webView.ios) {
actualHtml = webView.ios.stringByEvaluatingJavaScriptFromString("document.body.innerHTML").trim();
} else if (webView.android) {
actualTitle = webView.android.getTitle()
}
actualError = args.error;
testFinished = true;
// </hide>
var message;
if (!args.error) {
message = "WebView finished loading " + args.url;
}
else {
message = "Error loading " + args.url + ": " + args.error;
}
});
webView.src = '<!DOCTYPE html><html><head><title>MyTitle</title><meta charset="utf-8" /></head><body><span style="color:red">Test</span></body></html>';
// ```
// </snippet>
TKUnit.wait(4);
helper.goBack();
if (testFinished) {
if (webView.ios) {
TKUnit.assert(actualHtml === expectedHtml, "HTML string not loaded properly. Actual: " + actualHtml);
} else if (webView.android) {
TKUnit.assert(actualTitle === expectedTitle, "HTML string not loaded properly. Actual: " + actualTitle);
}
TKUnit.assert(actualError === undefined, actualError);
}
else {
TKUnit.assert(false, "TIMEOUT");
}
}
export var testLoadInvalidUrl = function () {
var webView = prepare();
var testFinished = false;
var actualError;
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
if (actualError) {
// Android call this twice -- the second time args.error is undefined.
return;
}
actualError = args.error;
testFinished = true;
});
webView.url = "kofti://mnogokofti";
TKUnit.wait(4);
helper.goBack();
if (testFinished) {
TKUnit.assert(actualError !== undefined, "There should be an error.");
}
else {
TKUnit.assert(false, "TIMEOUT");
}
}
export var testLoadUpperCaseSrc = function () {
var webView = prepare();
var testFinished = false;
var actualSrc;
var actualError;
webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
actualSrc = args.url;
actualError = args.error;
testFinished = true;
});
var targetSrc = "HTTP://nsbuild01.telerik.com/docs/";
webView.src = targetSrc;
TKUnit.wait(4);
helper.goBack();
if (testFinished) {
TKUnit.assert(actualSrc === targetSrc.toLowerCase(), "args.url should equal '" + targetSrc.toLowerCase() + "'");
TKUnit.assert(actualError === undefined, actualError);
}
else {
TKUnit.assert(false, "TIMEOUT");
}
}
export function createTestCase(): WebViewTest {
return new WebViewTest();
}