mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Improve unit-tests (#1946)
* Improved unit-tests speed & reliability * Fixed iOS tests. Improved message output
This commit is contained in:
@@ -193,7 +193,7 @@ export function assertNotEqual(actual: any, expected: any, message?: string) {
|
||||
if (types.isUndefined(actual) && types.isUndefined(expected)) {
|
||||
equals = true;
|
||||
}
|
||||
else if (!types.isUndefined(actual) && !types.isUndefined(expected)) {
|
||||
else if (!types.isNullOrUndefined(actual) && !types.isNullOrUndefined(expected)) {
|
||||
if (types.isFunction(actual.equals)) {
|
||||
|
||||
// Use the equals method
|
||||
|
||||
@@ -9,8 +9,6 @@ var topmost = frameModule.topmost();
|
||||
import labelModule = require("ui/label");
|
||||
import pagesModule = require("ui/page");
|
||||
|
||||
import TKUnit = require("./TKUnit");
|
||||
|
||||
export var ignore_test_DummyTestForSnippetOnly0 = function () {
|
||||
// <snippet module="ui/frame" title="frame">
|
||||
// ### Navigating to a Module
|
||||
@@ -57,9 +55,4 @@ export var ignore_test_DummyTestForSnippetOnly3 = function () {
|
||||
topmost.goBack();
|
||||
// ```
|
||||
// </snippet>
|
||||
}
|
||||
|
||||
export function test_currentEntry() {
|
||||
var moduleName = frameModule.topmost().currentEntry.moduleName;
|
||||
TKUnit.assert(moduleName === "tests/app/mainPage" || moduleName === "app/mainPage", "Expected frameModule.topmost().currentEntry.moduleName to return tests/app/mainPage or app/mainPage but instead returned " + moduleName);
|
||||
}
|
||||
@@ -84,6 +84,10 @@ export var test_ClearHistory = function () {
|
||||
|
||||
var currentPage: Page;
|
||||
|
||||
currentPage = topmostFrame().currentPage;
|
||||
topmostFrame().navigate({ create: pageFactory, clearHistory: true });
|
||||
TKUnit.waitUntilReady(() => { return topmostFrame().currentPage !== currentPage; });
|
||||
|
||||
currentPage = topmostFrame().currentPage;
|
||||
topmostFrame().navigate({ create: pageFactory });
|
||||
TKUnit.waitUntilReady(() => { return topmostFrame().currentPage !== currentPage; });
|
||||
|
||||
@@ -3,7 +3,6 @@ import * as helper from "../ui/helper";
|
||||
import * as platform from "platform";
|
||||
import * as trace from "trace";
|
||||
import {Color} from "color";
|
||||
import {GC} from "utils/utils";
|
||||
import {NavigationEntry, NavigationTransition} from "ui/frame";
|
||||
import {Page} from "ui/page";
|
||||
import {AnimationCurve} from "ui/enums"
|
||||
@@ -13,7 +12,7 @@ function _testTransition(navigationTransition: NavigationTransition) {
|
||||
trace.write(`Testing ${testId}`, trace.categories.Test);
|
||||
var navigationEntry: NavigationEntry = {
|
||||
create: function (): Page {
|
||||
var page = new Page();
|
||||
let page = new Page();
|
||||
page.id = testId;
|
||||
page.style.backgroundColor = new Color(255, Math.round(Math.random() * 255), Math.round(Math.random() * 255), Math.round(Math.random() * 255));
|
||||
return page;
|
||||
@@ -24,9 +23,6 @@ function _testTransition(navigationTransition: NavigationTransition) {
|
||||
|
||||
helper.navigateWithEntry(navigationEntry);
|
||||
TKUnit.wait(0.100);
|
||||
helper.goBack();
|
||||
TKUnit.wait(0.100);
|
||||
GC();
|
||||
}
|
||||
|
||||
// Extremely slow. Run only if needed.
|
||||
@@ -79,6 +75,4 @@ export var test_Transitions = function () {
|
||||
var customTransition = new customTransitionModule.CustomTransition();
|
||||
_testTransition({ instance: customTransition });
|
||||
}
|
||||
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
@@ -110,6 +110,7 @@ var testsWithLongDelay = {
|
||||
testLoadInvalidUrl: 10000
|
||||
}
|
||||
|
||||
var duration;
|
||||
var running = false;
|
||||
var testsQueue = new Array<TestInfo>();
|
||||
|
||||
@@ -127,7 +128,7 @@ function printRunTestStats() {
|
||||
|
||||
for (j = 0; j < allTests.length; j++) {
|
||||
let testName = allTests[j].testName;
|
||||
let duration = allTests[j].duration / 1000;
|
||||
let duration = Math.round(allTests[j].duration / 1000);
|
||||
|
||||
if (!allTests[j].isPassed) {
|
||||
failedTestCount++;
|
||||
@@ -144,7 +145,7 @@ function printRunTestStats() {
|
||||
}
|
||||
|
||||
|
||||
let finalMessage = "=== ALL TESTS COMPLETE === \n" + (allTests.length - failedTestCount) + " OK, " + failedTestCount + " failed" + "\n";
|
||||
let finalMessage = `=== ALL TESTS COMPLETE for ${Math.round(TKUnit.time() - duration)} ms === \n${(allTests.length - failedTestCount)} OK, ${failedTestCount} failed\n`;
|
||||
TKUnit.write(finalMessage, messageType.info);
|
||||
for (j = 0; j < failedTestInfo.length; j++) {
|
||||
let failureMessage = failedTestInfo[j];
|
||||
@@ -210,7 +211,7 @@ export var runAll = function (testSelector?: string) {
|
||||
|
||||
var totalSuccess = 0;
|
||||
var totalFailed: Array<TKUnit.TestFailure> = [];
|
||||
testsQueue.push(new TestInfo(function () { running = true; }));
|
||||
testsQueue.push(new TestInfo(() => { running = true; duration = TKUnit.time(); }));
|
||||
for (var name in allTests) {
|
||||
if (singleModuleName && (singleModuleName !== name.toLowerCase())) {
|
||||
continue;
|
||||
|
||||
@@ -54,7 +54,6 @@ export class UITest<T extends View> implements trace.TraceWriter {
|
||||
this._testPage = null;
|
||||
this._testView = null;
|
||||
trace.removeWriter(this);
|
||||
navHelper.goBack();
|
||||
}
|
||||
|
||||
public setUp() {
|
||||
|
||||
@@ -179,12 +179,7 @@ export function test_actionItem_inherit_bindingContext() {
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
try {
|
||||
TKUnit.assertEqual(page.actionBar.actionItems.getItemAt(0).text, "item", "actionItem.text");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
TKUnit.assertEqual(page.actionBar.actionItems.getItemAt(0).text, "item", "actionItem.text");
|
||||
}
|
||||
|
||||
export function test_actionBar_inherit_bindingContext_inXML() {
|
||||
@@ -325,12 +320,7 @@ export function test_ActionBarItemBindingToEvent() {
|
||||
}
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
try {
|
||||
testAction([p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p]);
|
||||
}
|
||||
|
||||
export function test_Setting_ActionItems_doesnt_thrown() {
|
||||
@@ -358,12 +348,7 @@ export function test_Setting_ActionItems_doesnt_thrown() {
|
||||
gotException = true;
|
||||
}
|
||||
|
||||
try {
|
||||
TKUnit.assert(!gotException, "Expected: false, Actual: " + gotException);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
TKUnit.assert(!gotException, "Expected: false, Actual: " + gotException);
|
||||
}
|
||||
|
||||
export function test_Setting_ActionItemsWithNumberAsText_doesnt_thrown() {
|
||||
@@ -379,12 +364,7 @@ export function test_Setting_ActionItemsWithNumberAsText_doesnt_thrown() {
|
||||
gotException = true;
|
||||
}
|
||||
|
||||
try {
|
||||
TKUnit.assert(!gotException, "Expected: false, Actual: " + gotException);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
TKUnit.assert(!gotException, "Expected: false, Actual: " + gotException);
|
||||
}
|
||||
|
||||
export function test_CanDefineEverythingAsContentBetweenTheTwoTags() {
|
||||
@@ -432,13 +412,8 @@ export function test_LoadedEventsOrder() {
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
try {
|
||||
TKUnit.arrayAssert(loadedEvents, new Array<string>("content", "action-bar", "page"));
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
};
|
||||
TKUnit.arrayAssert(loadedEvents, new Array<string>("content", "action-bar", "page"));
|
||||
}
|
||||
|
||||
export function test_LoadedEventsOrder_WithoutPageContent() {
|
||||
var loadedEvents = new Array<string>();
|
||||
@@ -457,13 +432,8 @@ export function test_LoadedEventsOrder_WithoutPageContent() {
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
try {
|
||||
TKUnit.arrayAssert(loadedEvents, new Array<string>("action-bar", "page"));
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
};
|
||||
TKUnit.arrayAssert(loadedEvents, new Array<string>("action-bar", "page"));
|
||||
}
|
||||
|
||||
export function test_setId() {
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
@@ -479,10 +449,7 @@ export function test_setId() {
|
||||
catch (e) {
|
||||
TKUnit.assert(false, "Failed to apply property 'id' to actionBar before its nativeView is ready.");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function createPageAndNavigate() {
|
||||
var page: PageModule.Page;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import actionTestsCommon = require("./action-bar-tests-common");
|
||||
import helper = require("../helper");
|
||||
import TKUnit = require("../../TKUnit");
|
||||
import { ActionItem } from "ui/action-bar";
|
||||
import { Visibility } from "ui/enums";
|
||||
@@ -10,34 +9,24 @@ export function test_actionItem_visibility() {
|
||||
var actionItem = new ActionItem();
|
||||
actionItem.text = "Test";
|
||||
var page = actionTestsCommon.createPageAndNavigate();
|
||||
try {
|
||||
page.actionBar.actionItems.addItem(actionItem);
|
||||
var toolbar = <android.support.v7.widget.Toolbar>(<any>page.actionBar)._toolbar;
|
||||
var menu = toolbar.getMenu();
|
||||
page.actionBar.actionItems.addItem(actionItem);
|
||||
var toolbar = <android.support.v7.widget.Toolbar>(<any>page.actionBar)._toolbar;
|
||||
var menu = toolbar.getMenu();
|
||||
|
||||
TKUnit.assertTrue(menu.hasVisibleItems(), "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
TKUnit.assertFalse(menu.hasVisibleItems(), "Visibility does not work");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
TKUnit.assertTrue(menu.hasVisibleItems(), "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
TKUnit.assertFalse(menu.hasVisibleItems(), "Visibility does not work");
|
||||
}
|
||||
|
||||
export function test_navigationButton_visibility() {
|
||||
var actionItem = new ActionItem();
|
||||
actionItem.icon = "~/small-image.png";
|
||||
var page = actionTestsCommon.createPageAndNavigate();
|
||||
try {
|
||||
page.actionBar.navigationButton = actionItem;
|
||||
page.actionBar.navigationButton = actionItem;
|
||||
|
||||
var toolbar = <android.support.v7.widget.Toolbar>(<any>page.actionBar)._toolbar;
|
||||
var toolbar = <android.support.v7.widget.Toolbar>(<any>page.actionBar)._toolbar;
|
||||
|
||||
TKUnit.assertNotNull(toolbar.getNavigationIcon(), "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
TKUnit.assertNull(toolbar.getNavigationIcon(), "Visibility does not work");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
}
|
||||
TKUnit.assertNotNull(toolbar.getNavigationIcon(), "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
TKUnit.assertNull(toolbar.getNavigationIcon(), "Visibility does not work");
|
||||
}
|
||||
@@ -40,7 +40,6 @@ export function test_NavBar_isVisible_when_MenuItems_areSet() {
|
||||
}
|
||||
finally {
|
||||
page.off(view.View.loadedEvent, handler);
|
||||
helper.goBack();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +78,6 @@ export function test_NavBarItemsAreClearedFromNativeWhenClearedFromNativeScript(
|
||||
}
|
||||
finally {
|
||||
page.off(view.View.loadedEvent, handler);
|
||||
helper.goBack();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,50 +87,41 @@ export function test_actionItem_visibility() {
|
||||
actionItem.ios.position = "left";
|
||||
var page = actionTestsCommon.createPageAndNavigate();
|
||||
|
||||
try {
|
||||
page.actionBar.actionItems.addItem(actionItem);
|
||||
page.actionBar.actionItems.addItem(actionItem);
|
||||
|
||||
var viewController = (<UIViewController>page.ios);
|
||||
var navigationItem: UINavigationItem = viewController.navigationItem;
|
||||
var viewController = (<UIViewController>page.ios);
|
||||
var navigationItem: UINavigationItem = viewController.navigationItem;
|
||||
|
||||
var leftBarButtonItemsCount = navigationItem.leftBarButtonItems ? navigationItem.leftBarButtonItems.count : 0;
|
||||
TKUnit.assertEqual(leftBarButtonItemsCount, 1, "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
|
||||
TKUnit.waitUntilReady(() => {
|
||||
leftBarButtonItemsCount = navigationItem.leftBarButtonItems ? navigationItem.leftBarButtonItems.count : 0;
|
||||
|
||||
return leftBarButtonItemsCount === 0;
|
||||
});
|
||||
var leftBarButtonItemsCount = navigationItem.leftBarButtonItems ? navigationItem.leftBarButtonItems.count : 0;
|
||||
TKUnit.assertEqual(leftBarButtonItemsCount, 1, "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
|
||||
TKUnit.waitUntilReady(() => {
|
||||
leftBarButtonItemsCount = navigationItem.leftBarButtonItems ? navigationItem.leftBarButtonItems.count : 0;
|
||||
TKUnit.assertEqual(leftBarButtonItemsCount, 0, "Visibility does not work");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
return leftBarButtonItemsCount === 0;
|
||||
});
|
||||
|
||||
leftBarButtonItemsCount = navigationItem.leftBarButtonItems ? navigationItem.leftBarButtonItems.count : 0;
|
||||
TKUnit.assertEqual(leftBarButtonItemsCount, 0, "Visibility does not work");
|
||||
}
|
||||
|
||||
export function test_navigationButton_visibility() {
|
||||
var actionItem = new actionBar.ActionItem();
|
||||
actionItem.text = "Test";
|
||||
var page = actionTestsCommon.createPageAndNavigate();
|
||||
try {
|
||||
page.actionBar.navigationButton = actionItem;
|
||||
|
||||
var viewController = (<UIViewController>page.ios);
|
||||
var navigationItem: UINavigationItem = viewController.navigationItem;
|
||||
page.actionBar.navigationButton = actionItem;
|
||||
|
||||
TKUnit.assertFalse(navigationItem.hidesBackButton, "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
var viewController = (<UIViewController>page.ios);
|
||||
var navigationItem: UINavigationItem = viewController.navigationItem;
|
||||
|
||||
TKUnit.waitUntilReady(() => {
|
||||
return navigationItem.hidesBackButton;
|
||||
});
|
||||
TKUnit.assertFalse(navigationItem.hidesBackButton, "Visibility does not work");
|
||||
actionItem.visibility = Visibility.collapse;
|
||||
|
||||
TKUnit.assertTrue(navigationItem.hidesBackButton, "Visibility does not work");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
}
|
||||
TKUnit.waitUntilReady(() => {
|
||||
return navigationItem.hidesBackButton;
|
||||
});
|
||||
|
||||
TKUnit.assertTrue(navigationItem.hidesBackButton, "Visibility does not work");
|
||||
}
|
||||
@@ -49,14 +49,12 @@ export var test_AnimatingProperties = function(done) {
|
||||
////console.log("Animation finished.");
|
||||
// <hide>
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
// </hide>
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e.message);
|
||||
// <hide>
|
||||
helper.goBack();
|
||||
done(e);
|
||||
// </hide>
|
||||
});
|
||||
@@ -94,7 +92,6 @@ export var test_CancellingAnimation = function(done) {
|
||||
.catch((e) => {
|
||||
////console.log("Animation cancelled");
|
||||
// <hide>
|
||||
helper.goBack();
|
||||
if (!e) {
|
||||
done(new Error("Cancel path did not have proper error"));
|
||||
} else if (e.toString() === "Error: Animation cancelled.") {
|
||||
@@ -138,7 +135,6 @@ export var test_CancellingAnimate = function(done) {
|
||||
.catch((e) => {
|
||||
////console.log("Animation cancelled");
|
||||
// <hide>
|
||||
helper.goBack();
|
||||
if (!e) {
|
||||
done(new Error("Cancel path did not have proper error"));
|
||||
} else if (e.toString() === "Error: Animation cancelled.") {
|
||||
@@ -183,14 +179,12 @@ export var test_ChainingAnimations = function(done) {
|
||||
////console.log("Animation finished");
|
||||
// <hide>
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
// </hide>
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e.message);
|
||||
// <hide>
|
||||
helper.goBack();
|
||||
done(e);
|
||||
// </hide>
|
||||
});
|
||||
@@ -230,14 +224,12 @@ export var test_ReusingAnimations = function(done) {
|
||||
////console.log("Animation finished");
|
||||
// <hide>
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
// </hide>
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e.message);
|
||||
// <hide>
|
||||
helper.goBack();
|
||||
done(e);
|
||||
// </hide>
|
||||
});
|
||||
@@ -284,14 +276,12 @@ export var test_AnimatingMultipleViews = function(done) {
|
||||
assertIOSNativeTransformIsCorrect(label1);
|
||||
assertIOSNativeTransformIsCorrect(label2);
|
||||
assertIOSNativeTransformIsCorrect(label3);
|
||||
helper.goBack();
|
||||
done();
|
||||
// </hide>
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e.message);
|
||||
// <hide>
|
||||
helper.goBack();
|
||||
done(e);
|
||||
// </hide>
|
||||
});
|
||||
@@ -318,11 +308,9 @@ export var test_AnimateOpacity = function(done) {
|
||||
label.animate({ opacity: 0.75 })
|
||||
.then(() => {
|
||||
TKUnit.assertEqual(label.opacity, 0.75, "label.opacity");
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -419,11 +407,9 @@ export var test_AnimateBackgroundColor = function(done) {
|
||||
label.animate({ backgroundColor: red })
|
||||
.then(() => {
|
||||
TKUnit.assert(label.backgroundColor.equals(red));
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -450,11 +436,9 @@ export var test_AnimateBackgroundColor_FromString = function(done) {
|
||||
label.animate({ backgroundColor: <any>expected })
|
||||
.then(() => {
|
||||
TKUnit.assert(label.backgroundColor.equals(clr));
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -480,11 +464,9 @@ export var test_AnimateTranslate = function(done) {
|
||||
TKUnit.assertEqual(label.translateX, 100, "label.translateX");
|
||||
TKUnit.assertEqual(label.translateY, 200, "label.translateY");
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -510,11 +492,9 @@ export var test_AnimateScale = function(done) {
|
||||
TKUnit.assertEqual(label.scaleX, 2, "label.scaleX");
|
||||
TKUnit.assertEqual(label.scaleY, 3, "label.scaleY");
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -539,11 +519,9 @@ export var test_AnimateRotate = function(done) {
|
||||
.then(() => {
|
||||
TKUnit.assertEqual(label.rotate, 123, "label.rotate");
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -576,11 +554,9 @@ export var test_AnimateTranslateScaleAndRotateSimultaneously = function(done) {
|
||||
TKUnit.assertEqual(label.scaleY, 3, "label.scaleY");
|
||||
TKUnit.assertEqual(label.rotate, 123, "label.rotate");
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -623,11 +599,9 @@ export var test_AnimateTranslateScaleAndRotateSequentially = function(done) {
|
||||
TKUnit.assertEqual(label.scaleY, 3, "label.scaleY");
|
||||
TKUnit.assertEqual(label.rotate, 123, "label.rotate");
|
||||
assertIOSNativeTransformIsCorrect(label);
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -658,12 +632,10 @@ export var test_AnimationsAreAlwaysPlayed = function(done) {
|
||||
})
|
||||
.then(() => {
|
||||
TKUnit.assert(label.opacity === 1, `Label opacity should be 1 after second animation, actual value is ${label.opacity}.`);
|
||||
helper.goBack();
|
||||
done();
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e.message);
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -689,11 +661,9 @@ export var test_PlayPromiseIsResolvedWhenAnimationFinishes = function(done) {
|
||||
animation.play()
|
||||
.then(function onResolved() {
|
||||
TKUnit.assert(animation.isPlaying === false, "Animation.isPlaying should be false when animation play promise is resolved.");
|
||||
helper.goBack();
|
||||
done();
|
||||
}, function onRejected(e) {
|
||||
TKUnit.assert(1 === 2, "Animation play promise should be resolved, not rejected.");
|
||||
helper.goBack();
|
||||
done(e);
|
||||
});
|
||||
}
|
||||
@@ -719,11 +689,9 @@ export var test_PlayPromiseIsRejectedWhenAnimationIsCancelled = function(done) {
|
||||
animation.play()
|
||||
.then(function onResolved() {
|
||||
TKUnit.assert(1 === 2, "Animation play promise should be rejected, not resolved.");
|
||||
helper.goBack();
|
||||
done();
|
||||
}, function onRejected(e) {
|
||||
TKUnit.assert(animation.isPlaying === false, "Animation.isPlaying should be false when animation play promise is rejected.");
|
||||
helper.goBack();
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
@@ -247,7 +247,6 @@ exports.test_ExecuteCSSAnimation = function () {
|
||||
label.className = "l";
|
||||
TKUnit.waitUntilReady(function () { return new color.Color("green").equals(label.backgroundColor); }, 1);
|
||||
TKUnit.assert(new color.Color("green").equals(label.backgroundColor));
|
||||
helper.goBack();
|
||||
};
|
||||
// exports.test_ExecuteFillMode = function () {
|
||||
// let mainPage;
|
||||
|
||||
@@ -185,57 +185,52 @@ export var test_bindingContext_Change_IsReflected_Properly = function () {
|
||||
helper.do_PageTest_WithButton(test);
|
||||
}
|
||||
|
||||
export var test_WhenBindingIsSetToAnElement_AndElementIsRemoved_ShouldBeCollectedByGC = function (done) {
|
||||
var testFinished = false;
|
||||
var pageFactory = function () {
|
||||
var page = new pageModule.Page();
|
||||
var stack = new stackLayoutModule.StackLayout();
|
||||
export function test_WhenBindingIsSetToAnElement_AndElementIsRemoved_ShouldBeCollectedByGC(done) {
|
||||
let testFinished = false;
|
||||
|
||||
var expectedValue = "testValue";
|
||||
var sourcePropertyName = "testProperty";
|
||||
var targetPropertyName = "text";
|
||||
let page = helper.getCurrentPage();
|
||||
let stack = new stackLayoutModule.StackLayout();
|
||||
|
||||
page.on(viewModule.View.loadedEvent, () => {
|
||||
var model = new observable.Observable();
|
||||
model.set(sourcePropertyName, expectedValue);
|
||||
let expectedValue = "testValue";
|
||||
let sourcePropertyName = "testProperty";
|
||||
let targetPropertyName = "text";
|
||||
|
||||
function createButton(bindContext) {
|
||||
var button = new buttonModule.Button();
|
||||
button.bind({
|
||||
sourceProperty: sourcePropertyName,
|
||||
targetProperty: targetPropertyName
|
||||
}, bindContext);
|
||||
return new WeakRef(button);
|
||||
}
|
||||
stack.on(viewModule.View.loadedEvent, () => {
|
||||
var model = new observable.Observable();
|
||||
model.set(sourcePropertyName, expectedValue);
|
||||
|
||||
var weakRef = createButton(model);
|
||||
function createButton(bindContext) {
|
||||
let button = new buttonModule.Button();
|
||||
button.bind({
|
||||
sourceProperty: sourcePropertyName,
|
||||
targetProperty: targetPropertyName
|
||||
}, bindContext);
|
||||
return new WeakRef(button);
|
||||
}
|
||||
|
||||
try {
|
||||
stack.addChild(weakRef.get());
|
||||
TKUnit.assert(weakRef.get().text === expectedValue, "Binding is not working properly!");
|
||||
stack.removeChild(weakRef.get());
|
||||
TKUnit.waitUntilReady(() => { return !weakRef.get().isLoaded });
|
||||
utils.GC();
|
||||
TKUnit.assert(!weakRef.get(), "UIElement is still alive!");
|
||||
testFinished = true;
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
});
|
||||
var weakRef = createButton(model);
|
||||
|
||||
page.content = stack;
|
||||
return page;
|
||||
};
|
||||
try {
|
||||
stack.addChild(weakRef.get());
|
||||
TKUnit.assertEqual(weakRef.get().text, expectedValue, "Binding is not working properly!");
|
||||
stack.removeChild(weakRef.get());
|
||||
TKUnit.waitUntilReady(() => { return !weakRef.get().isLoaded });
|
||||
utils.GC();
|
||||
TKUnit.assert(!weakRef.get(), "UIElement is still alive!");
|
||||
testFinished = true;
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
});
|
||||
|
||||
page.content = stack;
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
TKUnit.waitUntilReady(() => { return testFinished });
|
||||
helper.goBack();
|
||||
done(null);
|
||||
}
|
||||
|
||||
export var test_OneBindableToBindMoreThanOneProperty_ToSameSource = function () {
|
||||
export function test_OneBindableToBindMoreThanOneProperty_ToSameSource() {
|
||||
var model = new observable.Observable();
|
||||
|
||||
var firstPropertyOptions: bindable.BindingOptions = {
|
||||
@@ -255,8 +250,8 @@ export var test_OneBindableToBindMoreThanOneProperty_ToSameSource = function ()
|
||||
model.set("name", "John");
|
||||
model.set("sourceProperty", "testValue");
|
||||
|
||||
TKUnit.assert(obj.get("test") === "John", "Binding does not updates target property.");
|
||||
TKUnit.assert(obj.get("targetProperty") === "testValue", "Binding does not updates target property1.");
|
||||
TKUnit.assertEqual(obj.get("test"), "John", "Binding does not updates target property.");
|
||||
TKUnit.assertEqual(obj.get("targetProperty"), "testValue", "Binding does not updates target property1.");
|
||||
}
|
||||
|
||||
export var test_MoreThanOneBindables_BindToASameSourceAndProperty = function () {
|
||||
@@ -275,8 +270,8 @@ export var test_MoreThanOneBindables_BindToASameSourceAndProperty = function ()
|
||||
|
||||
model.set("sourceProperty", "testValue");
|
||||
|
||||
TKUnit.assert(obj1.get("targetProperty") === "testValue", "Binding does not updates target property for first object.");
|
||||
TKUnit.assert(obj2.get("targetProperty") === "testValue", "Binding does not updates target property for second object.");
|
||||
TKUnit.assertEqual(obj1.get("targetProperty"), "testValue", "Binding does not updates target property for first object.");
|
||||
TKUnit.assertEqual(obj2.get("targetProperty"), "testValue", "Binding does not updates target property for second object.");
|
||||
}
|
||||
|
||||
class TestClass extends bindable.Bindable {
|
||||
@@ -887,51 +882,42 @@ export function test_NestedPropertiesBindingTwoTargetsAndReplacingSomeNestedObje
|
||||
}
|
||||
|
||||
export function test_NullSourcePropertyShouldNotCrash() {
|
||||
var expectedValue = "Expected Value";
|
||||
var target = new bindable.Bindable();
|
||||
var convFunc = function (value) {
|
||||
return value + "Converted";
|
||||
}
|
||||
var model = new observable.Observable();
|
||||
model.set("field", expectedValue);
|
||||
model.set("convFunc", convFunc);
|
||||
target.bind({
|
||||
sourceProperty: null,
|
||||
targetProperty: "targetProp",
|
||||
expression: "convFunc(field)"
|
||||
}, model);
|
||||
var expectedValue = "Expected Value";
|
||||
var target = new bindable.Bindable();
|
||||
var convFunc = function (value) {
|
||||
return value + "Converted";
|
||||
}
|
||||
var model = new observable.Observable();
|
||||
model.set("field", expectedValue);
|
||||
model.set("convFunc", convFunc);
|
||||
target.bind({
|
||||
sourceProperty: null,
|
||||
targetProperty: "targetProp",
|
||||
expression: "convFunc(field)"
|
||||
}, model);
|
||||
|
||||
TKUnit.assertEqual(target.get("targetProp"), convFunc(expectedValue));
|
||||
TKUnit.assertEqual(target.get("targetProp"), convFunc(expectedValue));
|
||||
}
|
||||
|
||||
export var test_BindingContextOfAChildElementIsNotOverwrittenBySettingTheBindingContextOfPage = function (done) {
|
||||
export function test_BindingContextOfAChildElementIsNotOverwrittenBySettingTheBindingContextOfPage() {
|
||||
var testFinished = false;
|
||||
var pageFactory = function () {
|
||||
var page = new pageModule.Page();
|
||||
var child = new stackLayoutModule.StackLayout();
|
||||
page.content = child;
|
||||
var childModel;
|
||||
page.on(pageModule.Page.navigatingToEvent, (args) => {
|
||||
childModel = new observable.Observable();
|
||||
child.bindingContext = childModel;
|
||||
TKUnit.assertEqual(child.bindingContext, childModel);
|
||||
page.off(pageModule.Page.navigatingToEvent);
|
||||
});
|
||||
page.on(pageModule.Page.loadedEvent, (args) => {
|
||||
TKUnit.assertEqual(child.bindingContext, childModel);
|
||||
(<pageModule.Page>args.object).bindingContext = new observable.Observable();
|
||||
TKUnit.assertEqual(child.bindingContext, childModel);
|
||||
page.off(pageModule.Page.loadedEvent);
|
||||
testFinished = true;
|
||||
});
|
||||
|
||||
return page;
|
||||
};
|
||||
let page = helper.getCurrentPage();
|
||||
let child = new stackLayoutModule.StackLayout();
|
||||
let childModel = new observable.Observable();
|
||||
child.bindingContext = childModel;
|
||||
TKUnit.assertEqual(child.bindingContext, childModel);
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
child.on(stackLayoutModule.StackLayout.loadedEvent, (args) => {
|
||||
TKUnit.assertEqual(child.bindingContext, childModel);
|
||||
page.bindingContext = new observable.Observable();
|
||||
TKUnit.assertEqual(child.bindingContext, childModel);
|
||||
child.off(stackLayoutModule.StackLayout.loadedEvent);
|
||||
testFinished = true;
|
||||
});
|
||||
|
||||
page.content = child;
|
||||
TKUnit.waitUntilReady(() => { return testFinished });
|
||||
helper.goBack();
|
||||
done(null);
|
||||
}
|
||||
|
||||
export var test_BindingHitsGetterTooManyTimes = function () {
|
||||
@@ -970,21 +956,21 @@ export function test_SupportFunctionsInExpressions() {
|
||||
return this.get("anyColor") === "red";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var bindableObj = new bindable.Bindable();
|
||||
|
||||
|
||||
bindableObj.bind({
|
||||
"sourceProperty": "$value",
|
||||
"targetProperty": "test",
|
||||
"expression": "isVisible() ? 'visible' : 'collapsed'"
|
||||
}, model);
|
||||
|
||||
|
||||
model.set("anyColor", "blue");
|
||||
|
||||
|
||||
TKUnit.assertEqual(bindableObj.get("test"), "collapsed", "When anyColor is blue test property should be collapsed.");
|
||||
|
||||
|
||||
model.set("anyColor", "red");
|
||||
|
||||
|
||||
TKUnit.assertEqual(bindableObj.get("test"), "visible", "When anyColor is red test property should be visible.");
|
||||
}
|
||||
|
||||
@@ -995,20 +981,20 @@ export function test_$ValueSupportWithinExpression() {
|
||||
return this.get("anyColor") === "red";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var bindableObj = new bindable.Bindable();
|
||||
|
||||
|
||||
bindableObj.bind({
|
||||
"sourceProperty": "$value",
|
||||
"targetProperty": "test",
|
||||
"expression": "$value.anyColor === 'red' ? 'red' : 'blue'"
|
||||
}, model);
|
||||
|
||||
|
||||
model.set("anyColor", "blue");
|
||||
|
||||
|
||||
TKUnit.assertEqual(bindableObj.get("test"), "blue", "When anyColor is blue test property should be blue too.");
|
||||
|
||||
|
||||
model.set("anyColor", "red");
|
||||
|
||||
|
||||
TKUnit.assertEqual(bindableObj.get("test"), "red", "When anyColor is red test property should be red too.");
|
||||
}
|
||||
@@ -5,100 +5,68 @@ import helper = require("../ui/helper");
|
||||
|
||||
export var test_BindingExpressions_ArrayAccess = function () {
|
||||
navigateToPage("bindingExpressions_arrayAccess_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "bindings");
|
||||
assertElementString("textField2", "1");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "bindings");
|
||||
assertElementString("textField2", "1");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_LogicalOperators = function () {
|
||||
navigateToPage("bindingExpressions_logicalOperators_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "true");
|
||||
assertElementString("textField2", "false");
|
||||
assertElementString("textField3", "true");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "true");
|
||||
assertElementString("textField2", "false");
|
||||
assertElementString("textField3", "true");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_UnaryOperators = function () {
|
||||
navigateToPage("bindingExpressions_unaryOperators_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "5");
|
||||
assertElementString("textField2", "-5");
|
||||
assertElementString("textField3", "3");
|
||||
assertElementString("textField4", "-3");
|
||||
assertElementString("textField5", "1");
|
||||
assertElementString("textField6", "-1");
|
||||
assertElementValueIsNaN("textField7");
|
||||
assertElementValueIsNaN("textField8");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "5");
|
||||
assertElementString("textField2", "-5");
|
||||
assertElementString("textField3", "3");
|
||||
assertElementString("textField4", "-3");
|
||||
assertElementString("textField5", "1");
|
||||
assertElementString("textField6", "-1");
|
||||
assertElementValueIsNaN("textField7");
|
||||
assertElementValueIsNaN("textField8");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_BinaryOperators = function () {
|
||||
navigateToPage("bindingExpressions_binaryOperators_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "1");
|
||||
assertElementString("textField2", "-1");
|
||||
assertElementString("textField3", "0");
|
||||
assertElementString("textField4", "0");
|
||||
assertElementString("textField5", "Infinity");
|
||||
assertElementString("textField6", "0");
|
||||
assertElementValueIsNaN("textField7");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "1");
|
||||
assertElementString("textField2", "-1");
|
||||
assertElementString("textField3", "0");
|
||||
assertElementString("textField4", "0");
|
||||
assertElementString("textField5", "Infinity");
|
||||
assertElementString("textField6", "0");
|
||||
assertElementValueIsNaN("textField7");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_ComparisonOperators = function () {
|
||||
navigateToPage("bindingExpressions_comparisonOperators_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "true");
|
||||
//assertElementString("textField2", "false");
|
||||
assertElementString("textField3", "true");
|
||||
//assertElementString("textField4", "false");
|
||||
assertElementString("textField5", "false");
|
||||
assertElementString("textField6", "true");
|
||||
assertElementString("textField7", "false");
|
||||
assertElementString("textField8", "true");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "true");
|
||||
//assertElementString("textField2", "false");
|
||||
assertElementString("textField3", "true");
|
||||
//assertElementString("textField4", "false");
|
||||
assertElementString("textField5", "false");
|
||||
assertElementString("textField6", "true");
|
||||
assertElementString("textField7", "false");
|
||||
assertElementString("textField8", "true");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_LogicalComparisonOperators = function () {
|
||||
navigateToPage("bindingExpressions_logicalComparisonOperators_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "false");
|
||||
assertElementString("textField2", "true");
|
||||
assertElementString("textField3", "Text");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "false");
|
||||
assertElementString("textField2", "true");
|
||||
assertElementString("textField3", "Text");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_TernaryOperator = function () {
|
||||
navigateToPage("bindingExpressions_ternaryOperator_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "by Pratchett");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "by Pratchett");
|
||||
}
|
||||
|
||||
export var test_BindingExpressions_GroupingParenthesis = function () {
|
||||
navigateToPage("bindingExpressions_groupingParenthesis_testPage");
|
||||
try {
|
||||
assertElementString("textField1", "21");
|
||||
assertElementString("textField2", "8");
|
||||
} finally {
|
||||
helper.goBack();
|
||||
}
|
||||
assertElementString("textField1", "21");
|
||||
assertElementString("textField2", "8");
|
||||
}
|
||||
|
||||
export var assertElementString = function (elementId: string, value: any) {
|
||||
|
||||
@@ -14,99 +14,148 @@ var DELTA = 0.1;
|
||||
export var ASYNC = 0.2;
|
||||
export var MEMORY_ASYNC = 2;
|
||||
|
||||
function clearPage(): void {
|
||||
let newPage = frame.topmost().currentPage;
|
||||
if (!newPage) {
|
||||
TKUnit.waitUntilReady(() => frame.topmost().currentPage !== null);
|
||||
newPage = frame.topmost().currentPage;
|
||||
}
|
||||
|
||||
if (!newPage) {
|
||||
throw new Error("NO CURRENT PAGE!!!!");
|
||||
}
|
||||
|
||||
newPage.style._resetValue(styling.properties.backgroundColorProperty);
|
||||
newPage.style._resetValue(styling.properties.colorProperty);
|
||||
newPage._resetValue(button.Button.bindingContextProperty);
|
||||
newPage._resetValue(button.Button.cssClassProperty);
|
||||
newPage._resetValue(button.Button.idProperty);
|
||||
}
|
||||
|
||||
export function do_PageTest(test: (views: Array<view.View>) => void, content: view.View, secondView: view.View, thirdView: view.View) {
|
||||
var newPage: page.Page;
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
newPage.content = content;
|
||||
return newPage;
|
||||
};
|
||||
|
||||
navigate(pageFactory);
|
||||
|
||||
try {
|
||||
test([newPage, content, secondView, thirdView, newPage.actionBar]);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
}
|
||||
clearPage();
|
||||
let newPage = frame.topmost().currentPage;
|
||||
newPage.content = content;
|
||||
test([newPage, content, secondView, thirdView, newPage.actionBar]);
|
||||
newPage.content = null;
|
||||
}
|
||||
|
||||
export function do_PageTest_WithButton(test: (views: Array<view.View>) => void) {
|
||||
var newPage: page.Page;
|
||||
var btn: button.Button;
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
btn = new button.Button();
|
||||
newPage.content = btn;
|
||||
return newPage;
|
||||
};
|
||||
|
||||
navigate(pageFactory);
|
||||
|
||||
try {
|
||||
test([newPage, btn, newPage.actionBar]);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
}
|
||||
clearPage();
|
||||
let newPage = frame.topmost().currentPage;
|
||||
let btn = new button.Button();
|
||||
newPage.content = btn;
|
||||
test([newPage, btn, newPage.actionBar]);
|
||||
newPage.content = null;
|
||||
}
|
||||
|
||||
export function do_PageTest_WithStackLayout_AndButton(test: (views: Array<view.View>) => void) {
|
||||
var newPage: page.Page;
|
||||
var stackLayout;
|
||||
var btn;
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
stackLayout = new stackLayoutModule.StackLayout();
|
||||
btn = new button.Button();
|
||||
|
||||
stackLayout.addChild(btn);
|
||||
newPage.content = stackLayout;
|
||||
return newPage;
|
||||
};
|
||||
|
||||
navigate(pageFactory);
|
||||
|
||||
try {
|
||||
test([newPage, stackLayout, btn, newPage.actionBar]);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
}
|
||||
clearPage();
|
||||
let newPage = frame.topmost().currentPage;
|
||||
let stackLayout = new stackLayoutModule.StackLayout();
|
||||
let btn = new button.Button();
|
||||
stackLayout.addChild(btn);
|
||||
newPage.content = stackLayout;
|
||||
test([newPage, stackLayout, btn, newPage.actionBar]);
|
||||
newPage.content = null;
|
||||
}
|
||||
|
||||
export function do_PageTest_WithStackLayout_AndButton_NavigatedBack(test: (views: Array<view.View>) => void,
|
||||
assert: (views: Array<view.View>) => void) {
|
||||
|
||||
var newPage: page.Page;
|
||||
var stackLayout;
|
||||
var btn;
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
stackLayout = new stackLayoutModule.StackLayout();
|
||||
btn = new button.Button();
|
||||
stackLayout.addChild(btn);
|
||||
newPage.content = stackLayout;
|
||||
return newPage;
|
||||
};
|
||||
|
||||
navigate(pageFactory);
|
||||
|
||||
try {
|
||||
test([newPage, stackLayout, btn, newPage.actionBar]);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
//export function buildUIAndRunTest(controlToTest, testFunction, pageCss?, testDelay?) {
|
||||
export function buildUIAndRunTest(controlToTest, testFunction, pageCss?) {
|
||||
clearPage();
|
||||
let newPage = frame.topmost().currentPage;
|
||||
newPage.content = controlToTest;
|
||||
if (pageCss) {
|
||||
newPage.css = pageCss;
|
||||
}
|
||||
|
||||
try {
|
||||
assert([newPage, stackLayout, btn, newPage.actionBar]);
|
||||
}
|
||||
finally {
|
||||
// wait to ensure asynchronous navigation
|
||||
TKUnit.wait(ASYNC);
|
||||
testFunction([controlToTest, newPage]);
|
||||
newPage.content = null;
|
||||
newPage.css = null;
|
||||
}
|
||||
|
||||
export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: () => T, interactWithViewFunc?: (view: T) => void, done?) {
|
||||
clearPage();
|
||||
let newPage = frame.topmost().currentPage;
|
||||
let sp = new stackLayoutModule.StackLayout();
|
||||
let testFinished = false;
|
||||
|
||||
sp.on("loaded", () => {
|
||||
let weakRef = new WeakRef(createFunc());
|
||||
try {
|
||||
sp.addChild(weakRef.get());
|
||||
|
||||
if (interactWithViewFunc) {
|
||||
interactWithViewFunc(weakRef.get());
|
||||
}
|
||||
|
||||
sp.removeChild(weakRef.get());
|
||||
if (newPage.ios) {
|
||||
/* tslint:disable:no-unused-expression */
|
||||
// Could cause GC on the next call.
|
||||
// NOTE: Don't replace this with forceGC();
|
||||
new ArrayBuffer(4 * 1024 * 1024);
|
||||
}
|
||||
utils.GC();
|
||||
|
||||
TKUnit.waitUntilReady(() => { return weakRef.get() ? !(weakRef.get().isLoaded) : true; }, MEMORY_ASYNC);
|
||||
TKUnit.assert(!weakRef.get(), weakRef.get() + " leaked!");
|
||||
testFinished = true;
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
});
|
||||
|
||||
newPage.content = sp;
|
||||
|
||||
TKUnit.waitUntilReady(() => { return testFinished; }, MEMORY_ASYNC);
|
||||
done(null);
|
||||
}
|
||||
|
||||
export function navigateToModuleAndRunTest(moduleName, context, testFunction) {
|
||||
let page = navigateToModule(moduleName, context);
|
||||
testFunction(page);
|
||||
}
|
||||
|
||||
export function navigate(pageFactory: () => page.Page, navigationContext?: any): page.Page {
|
||||
let entry: frame.NavigationEntry = { create: pageFactory, animated: false, context: navigationContext, clearHistory: true };
|
||||
return navigateWithEntry(entry);
|
||||
}
|
||||
|
||||
export function navigateWithHistory(pageFactory: () => page.Page, navigationContext?: any): page.Page {
|
||||
let entry: frame.NavigationEntry = { create: pageFactory, animated: false, context: navigationContext, clearHistory: false };
|
||||
return navigateWithEntry(entry);
|
||||
}
|
||||
|
||||
export function navigateToModule(moduleName: string, context?: any): page.Page {
|
||||
let entry: frame.NavigationEntry = { moduleName: moduleName, context: context, animated: false, clearHistory: true };
|
||||
return navigateWithEntry(entry);
|
||||
}
|
||||
|
||||
export function navigateWithEntry(entry: frame.NavigationEntry): page.Page {
|
||||
let page = frame.resolvePageFromEntry(entry);
|
||||
entry.moduleName = null;
|
||||
entry.animated = false
|
||||
entry.create = function () {
|
||||
return page;
|
||||
}
|
||||
|
||||
let currentPage = getCurrentPage();
|
||||
frame.topmost().navigate(entry);
|
||||
TKUnit.waitUntilReady(() => getCurrentPage() !== null && getCurrentPage() !== currentPage);
|
||||
return page;
|
||||
}
|
||||
|
||||
export function getCurrentPage(): page.Page {
|
||||
return frame.topmost().currentPage;
|
||||
}
|
||||
|
||||
export function assertAreClose(actual: number, expected: number, message: string): void {
|
||||
var density = utils.layout.getDisplayDensity();
|
||||
var delta = Math.floor(density) !== density ? 1.1 : DELTA;
|
||||
|
||||
TKUnit.assertAreClose(actual, expected, delta, message);
|
||||
}
|
||||
|
||||
export function assertViewColor(testView: view.View, hexColor: string, valueSource?: number) {
|
||||
@@ -123,119 +172,6 @@ export function assertViewBackgroundColor(testView: view.View, hexColor: string)
|
||||
TKUnit.assertEqual(testView.style.backgroundColor.hex, hexColor, "backgroundColor property");
|
||||
}
|
||||
|
||||
//export function buildUIAndRunTest(controlToTest, testFunction, pageCss?, testDelay?) {
|
||||
export function buildUIAndRunTest(controlToTest, testFunction, pageCss?) {
|
||||
var newPage: page.Page;
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
newPage.content = controlToTest;
|
||||
if (pageCss) {
|
||||
newPage.css = pageCss;
|
||||
}
|
||||
return newPage;
|
||||
};
|
||||
|
||||
navigate(pageFactory);
|
||||
TKUnit.assert(newPage.isLoaded, "The page should be loaded here.");
|
||||
try {
|
||||
testFunction([controlToTest, newPage]);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
}
|
||||
}
|
||||
|
||||
export function navigateToModuleAndRunTest(moduleName, context, testFunction) {
|
||||
navigateToModule(moduleName, context);
|
||||
try {
|
||||
testFunction(frame.topmost().currentPage);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
}
|
||||
}
|
||||
|
||||
export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: () => T, interactWithViewFunc?: (view: T) => void, done?) {
|
||||
var newPage: page.Page;
|
||||
var testFinished = false;
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
var sp = new stackLayoutModule.StackLayout();
|
||||
newPage.content = sp;
|
||||
var loaded = false;
|
||||
|
||||
newPage.on("loaded", () => {
|
||||
loaded = true;
|
||||
var weakRef = new WeakRef(createFunc());
|
||||
try {
|
||||
sp.addChild(weakRef.get());
|
||||
|
||||
if (interactWithViewFunc) {
|
||||
interactWithViewFunc(weakRef.get());
|
||||
}
|
||||
|
||||
sp.removeChild(weakRef.get());
|
||||
if (newPage.ios) {
|
||||
/* tslint:disable:no-unused-expression */
|
||||
// Could cause GC on the next call.
|
||||
// NOTE: Don't replace this with forceGC();
|
||||
new ArrayBuffer(4 * 1024 * 1024);
|
||||
}
|
||||
utils.GC();
|
||||
|
||||
TKUnit.waitUntilReady(() => { return weakRef.get() ? !(weakRef.get().isLoaded) : true; }, MEMORY_ASYNC);
|
||||
TKUnit.assert(!weakRef.get(), weakRef.get() + " leaked!");
|
||||
testFinished = true;
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
});
|
||||
|
||||
return newPage;
|
||||
};
|
||||
|
||||
try {
|
||||
navigate(pageFactory);
|
||||
TKUnit.waitUntilReady(() => { return testFinished; }, MEMORY_ASYNC);
|
||||
}
|
||||
finally {
|
||||
goBack();
|
||||
done(null);
|
||||
}
|
||||
}
|
||||
|
||||
export function navigate(pageFactory: () => page.Page, navigationContext?: any) {
|
||||
var currentPage = frame.topmost().currentPage;
|
||||
frame.topmost().navigate({ create: pageFactory, animated: false, context: navigationContext });
|
||||
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage && frame.topmost().currentPage.isLoaded && !currentPage.isLoaded; });
|
||||
}
|
||||
|
||||
export function navigateToModule(moduleName: string, context?: any) {
|
||||
var currentPage = frame.topmost().currentPage;
|
||||
frame.topmost().navigate({ moduleName: moduleName, context: context, animated: false });
|
||||
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage && frame.topmost().currentPage.isLoaded && !currentPage.isLoaded; });
|
||||
}
|
||||
|
||||
export function navigateWithEntry(navigationEntry: frame.NavigationEntry) {
|
||||
var currentPage = frame.topmost().currentPage;
|
||||
frame.topmost().navigate(navigationEntry);
|
||||
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage && frame.topmost().currentPage.isLoaded && !currentPage.isLoaded; });
|
||||
}
|
||||
|
||||
export function goBack(): void {
|
||||
var currentPage = frame.topmost().currentPage;
|
||||
frame.topmost().goBack();
|
||||
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage && frame.topmost().currentPage.isLoaded && !currentPage.isLoaded; });
|
||||
}
|
||||
|
||||
export function assertAreClose(actual: number, expected: number, message: string): void {
|
||||
var density = utils.layout.getDisplayDensity();
|
||||
var delta = Math.floor(density) !== density ? 1.1 : DELTA;
|
||||
|
||||
TKUnit.assertAreClose(actual, expected, delta, message);
|
||||
}
|
||||
|
||||
export function forceGC() {
|
||||
if (platform.device.os === platform.platformNames.ios) {
|
||||
/* tslint:disable:no-unused-expression */
|
||||
@@ -243,5 +179,6 @@ export function forceGC() {
|
||||
new ArrayBuffer(4 * 1024 * 1024);
|
||||
TKUnit.wait(ASYNC);
|
||||
}
|
||||
|
||||
utils.GC();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
import TKUnit = require("../../TKUnit");
|
||||
import helper = require("../helper");
|
||||
import page = require("ui/page");
|
||||
import types = require("utils/types");
|
||||
|
||||
// <snippet module="ui/html-view" title="HtmlView">
|
||||
@@ -32,15 +31,9 @@ var _createHtmlViewFunc = function (): htmlViewModule.HtmlView {
|
||||
}
|
||||
|
||||
export var testLoadHTMLString = function () {
|
||||
var newPage: page.Page;
|
||||
var htmlView = _createHtmlViewFunc();
|
||||
var pageFactory = function (): page.Page {
|
||||
newPage = new page.Page();
|
||||
newPage.content = htmlView;
|
||||
return newPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
let page = helper.getCurrentPage();
|
||||
let htmlView = _createHtmlViewFunc();
|
||||
page.content = htmlView;
|
||||
|
||||
// <snippet module="ui/html-view" title="HtmlView">
|
||||
// ### Using HtmlView
|
||||
@@ -49,11 +42,9 @@ export var testLoadHTMLString = function () {
|
||||
// ```
|
||||
// </snippet>
|
||||
|
||||
helper.goBack();
|
||||
|
||||
if (htmlView.ios) {
|
||||
TKUnit.assert(!types.isNullOrUndefined(htmlView.ios.attributedText), "HTML string not loaded properly. Actual: " + htmlView.ios.attributedText);
|
||||
} else if (htmlView.android) {
|
||||
TKUnit.assert(htmlView.android.getText(), "HTML string not loaded properly. Actual: " + htmlView.android.getText());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@
|
||||
import helper = require("../helper");
|
||||
import viewModule = require("ui/core/view");
|
||||
import listPickerTestsNative = require("./list-picker-tests-native");
|
||||
import pageModule = require("ui/page");
|
||||
import application = require("application");
|
||||
|
||||
// <snippet module="ui/list-picker" title="ListPicker">
|
||||
@@ -174,29 +173,17 @@ export var testSettingSelectedIndexLargerThanCountShouldThrow = function () {
|
||||
}
|
||||
|
||||
export var testWhenSelectingAnItemNativelySelectedIndexIsUpdatedProperly = function () {
|
||||
var listPicker: listPickerModule.ListPicker;
|
||||
var mainPage: pageModule.Page;
|
||||
var pageFactory = function (): pageModule.Page {
|
||||
listPicker = _createListPicker();
|
||||
listPicker.items = _createItems(2);
|
||||
mainPage = new pageModule.Page();
|
||||
mainPage.content = listPicker;
|
||||
return mainPage;
|
||||
};
|
||||
let listPicker = _createListPicker();
|
||||
let mainPage = helper.getCurrentPage();
|
||||
listPicker.items = _createItems(2);
|
||||
mainPage.content = listPicker;
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
var expectedValue = 1;
|
||||
let expectedValue = 1;
|
||||
listPickerTestsNative.selectNativeItem(listPicker, expectedValue);
|
||||
TKUnit.wait(helper.ASYNC);
|
||||
TKUnit.waitUntilReady(() => listPicker.selectedIndex === 1);
|
||||
|
||||
var actualValue = listPicker.selectedIndex;
|
||||
try {
|
||||
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
let actualValue = listPicker.selectedIndex;
|
||||
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
|
||||
}
|
||||
|
||||
export var test_Android_MaxValueIsOneLessThanItemsCount = function () {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
// # Page
|
||||
// Using a page requires the Page module.
|
||||
// ``` JavaScript
|
||||
import PageModule = require("ui/page");
|
||||
import pageModule = require("ui/page");
|
||||
//// FrameModule is needed in order to have an option to navigate to the new page.
|
||||
import FrameModule = require("ui/frame");
|
||||
import frameModule = require("ui/frame");
|
||||
// ```
|
||||
|
||||
// ### Attaching event handler for the Page loaded event to set bindingContext.
|
||||
@@ -23,25 +23,25 @@ import FrameModule = require("ui/frame");
|
||||
|
||||
// </snippet>
|
||||
import TKUnit = require("../../TKUnit");
|
||||
import LabelModule = require("ui/label");
|
||||
import stackLayoutModule = require("ui/layouts/stack-layout");
|
||||
import labelModule = require("ui/label");
|
||||
import {StackLayout} from "ui/layouts/stack-layout";
|
||||
import helper = require("../helper");
|
||||
import view = require("ui/core/view");
|
||||
import observable = require("data/observable");
|
||||
import {Page, ShownModallyData} from "ui/page";
|
||||
import {Page, ShownModallyData, NavigatedData} from "ui/page";
|
||||
import {Label} from "ui/label";
|
||||
import {EventData} from "data/observable";
|
||||
|
||||
export function addLabelToPage(page: PageModule.Page, text?: string) {
|
||||
var label = new LabelModule.Label();
|
||||
export function addLabelToPage(page: Page, text?: string) {
|
||||
var label = new Label();
|
||||
label.text = text || "The quick brown fox jumps over the lazy dog.";
|
||||
page.content = label;
|
||||
}
|
||||
|
||||
export function test_AfterPageLoaded_is_called_NativeInstance_is_created() {
|
||||
|
||||
var page: PageModule.Page;
|
||||
var label: LabelModule.Label;
|
||||
var page: Page;
|
||||
var label: Label;
|
||||
var nativeInstanceCreated = false;
|
||||
|
||||
var handler = function (data) {
|
||||
@@ -50,11 +50,11 @@ export function test_AfterPageLoaded_is_called_NativeInstance_is_created() {
|
||||
}
|
||||
}
|
||||
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
page = new PageModule.Page();
|
||||
var pageFactory = function (): Page {
|
||||
page = new Page();
|
||||
page.on(view.View.loadedEvent, handler);
|
||||
|
||||
label = new LabelModule.Label();
|
||||
label = new Label();
|
||||
label.text = "Text";
|
||||
page.content = label;
|
||||
return page;
|
||||
@@ -62,32 +62,31 @@ export function test_AfterPageLoaded_is_called_NativeInstance_is_created() {
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
TKUnit.assert(nativeInstanceCreated, "Expected: true, Actual: " + nativeInstanceCreated);
|
||||
TKUnit.assertTrue(nativeInstanceCreated, "nativeInstanceCreated");
|
||||
page.off(view.View.loadedEvent, handler);
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
export function test_PageLoaded_is_called_once() {
|
||||
|
||||
var page1: PageModule.Page;
|
||||
var page2: PageModule.Page;
|
||||
var page1: Page;
|
||||
var page2: Page;
|
||||
|
||||
var loaded = 0;
|
||||
var handler = function (data) {
|
||||
loaded++;
|
||||
}
|
||||
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
page1 = new PageModule.Page();
|
||||
var pageFactory = function (): Page {
|
||||
page1 = new Page();
|
||||
addLabelToPage(page1, "Page 1");
|
||||
return page1;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.assert(loaded === 0, "Expected: 0, Actual: " + loaded);
|
||||
TKUnit.assertEqual(loaded, 0);
|
||||
|
||||
var pageFactory2 = function (): PageModule.Page {
|
||||
page2 = new PageModule.Page();
|
||||
var pageFactory2 = function (): Page {
|
||||
page2 = new Page();
|
||||
addLabelToPage(page2, "Page 2");
|
||||
page2.on(view.View.loadedEvent, handler);
|
||||
return page2;
|
||||
@@ -95,22 +94,22 @@ export function test_PageLoaded_is_called_once() {
|
||||
|
||||
helper.navigate(pageFactory2);
|
||||
|
||||
TKUnit.assert(loaded === 1, "Expected: 1, Actual: " + loaded);
|
||||
TKUnit.assertEqual(loaded, 1);
|
||||
page2.off(view.View.loadedEvent, handler);
|
||||
helper.goBack();
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
export function test_NavigateToNewPage() {
|
||||
var currentPage;
|
||||
currentPage = FrameModule.topmost().currentPage;
|
||||
var topFrame = frameModule.topmost();
|
||||
currentPage = topFrame.currentPage;
|
||||
|
||||
// <snippet module="ui/page" title="Page">
|
||||
// ### Creating and navigating to the created page.
|
||||
// ``` JavaScript
|
||||
var testPage: PageModule.Page;
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
testPage = new PageModule.Page();
|
||||
var label = new LabelModule.Label();
|
||||
var testPage: Page;
|
||||
var pageFactory = function (): Page {
|
||||
testPage = new pageModule.Page();
|
||||
let label = new labelModule.Label();
|
||||
label.text = "The quick brown fox jumps over the lazy dog.";
|
||||
testPage.content = label;
|
||||
return testPage;
|
||||
@@ -119,13 +118,11 @@ export function test_NavigateToNewPage() {
|
||||
create: pageFactory,
|
||||
animated: false
|
||||
};
|
||||
var topFrame = FrameModule.topmost();
|
||||
topFrame.navigate(navEntry);
|
||||
// ```
|
||||
// </snippet>
|
||||
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage !== currentPage });
|
||||
currentPage = topFrame.currentPage;
|
||||
TKUnit.waitUntilReady(() => { return testPage.isLayoutValid });
|
||||
|
||||
// <snippet module="ui/page" title="Page">
|
||||
// ### Navigating backward is as simple as calling a single method.
|
||||
@@ -134,7 +131,7 @@ export function test_NavigateToNewPage() {
|
||||
// ```
|
||||
// </snippet>
|
||||
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage !== currentPage });
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage !== null && topFrame.currentPage === currentPage });
|
||||
TKUnit.assert(testPage.parent === undefined, "Page.parent should become undefined after navigating back");
|
||||
TKUnit.assert(testPage._context === undefined, "Page._context should become undefined after navigating back");
|
||||
TKUnit.assert(testPage.isLoaded === false, "Page.isLoaded should become false after navigating back");
|
||||
@@ -151,79 +148,86 @@ export function test_PageNavigation_EventSequence_WithoutTransition() {
|
||||
}
|
||||
|
||||
function _test_PageNavigation_EventSequence(withTransition: boolean) {
|
||||
var testPage: PageModule.Page;
|
||||
var testPage: Page;
|
||||
var context = { property: "this is the context" };
|
||||
var eventSequence = [];
|
||||
var pageFactory = function () {
|
||||
testPage = new PageModule.Page();
|
||||
testPage = new Page();
|
||||
addLabelToPage(testPage);
|
||||
|
||||
testPage.on(PageModule.Page.navigatingToEvent, function (data: PageModule.NavigatedData) {
|
||||
testPage.on(Page.navigatingToEvent, function (data: NavigatedData) {
|
||||
eventSequence.push("navigatingTo");
|
||||
TKUnit.assertEqual(data.context, context, "navigatingTo: navigationContext");
|
||||
});
|
||||
|
||||
testPage.on(PageModule.Page.loadedEvent, function (data: observable.EventData) {
|
||||
testPage.on(Page.loadedEvent, function (data: observable.EventData) {
|
||||
eventSequence.push("loaded");
|
||||
TKUnit.assertNotEqual(FrameModule.topmost().currentPage, data.object);
|
||||
TKUnit.assertNotEqual(frameModule.topmost().currentPage, data.object);
|
||||
});
|
||||
|
||||
testPage.on(PageModule.Page.navigatedToEvent, function (data: PageModule.NavigatedData) {
|
||||
testPage.on(Page.navigatedToEvent, function (data: NavigatedData) {
|
||||
eventSequence.push("navigatedTo");
|
||||
TKUnit.assertEqual(data.context, context, "navigatedTo : navigationContext");
|
||||
TKUnit.assertEqual(FrameModule.topmost().currentPage, data.object);
|
||||
TKUnit.assertEqual(frameModule.topmost().currentPage, data.object);
|
||||
});
|
||||
|
||||
testPage.on(PageModule.Page.navigatingFromEvent, function (data: PageModule.NavigatedData) {
|
||||
testPage.on(Page.navigatingFromEvent, function (data: NavigatedData) {
|
||||
eventSequence.push("navigatingFrom");
|
||||
TKUnit.assertEqual(data.context, context, "navigatingFrom: navigationContext");
|
||||
});
|
||||
|
||||
testPage.on(PageModule.Page.navigatedFromEvent, function (data: PageModule.NavigatedData) {
|
||||
testPage.on(Page.navigatedFromEvent, function (data: NavigatedData) {
|
||||
eventSequence.push("navigatedFrom");
|
||||
TKUnit.assertEqual(data.context, context, "navigatedFrom: navigationContext");
|
||||
});
|
||||
|
||||
testPage.on(PageModule.Page.unloadedEvent, function (data) {
|
||||
testPage.on(Page.unloadedEvent, function (data) {
|
||||
eventSequence.push("unloaded");
|
||||
});
|
||||
|
||||
return testPage;
|
||||
};
|
||||
|
||||
let currentPage = frameModule.topmost().currentPage;
|
||||
if (withTransition) {
|
||||
var navigationTransition: FrameModule.NavigationTransition = {
|
||||
var navigationTransition: frameModule.NavigationTransition = {
|
||||
name: "slide",
|
||||
duration: 100,
|
||||
};
|
||||
var navigationEntry: FrameModule.NavigationEntry = {
|
||||
var navigationEntry: frameModule.NavigationEntry = {
|
||||
create: pageFactory,
|
||||
context: context,
|
||||
animated: true,
|
||||
transition: navigationTransition
|
||||
}
|
||||
helper.navigateWithEntry(navigationEntry);
|
||||
frameModule.topmost().navigate(navigationEntry);
|
||||
}
|
||||
else {
|
||||
helper.navigate(pageFactory, context);
|
||||
var navigationEntry: frameModule.NavigationEntry = {
|
||||
create: pageFactory,
|
||||
context: context,
|
||||
}
|
||||
frameModule.topmost().navigate(navigationEntry);
|
||||
}
|
||||
|
||||
helper.goBack();
|
||||
TKUnit.waitUntilReady(() => frameModule.topmost().currentPage !== null && frameModule.topmost().currentPage === testPage);
|
||||
|
||||
frameModule.goBack();
|
||||
TKUnit.waitUntilReady(() => frameModule.topmost().currentPage !== null && frameModule.topmost().currentPage === currentPage);
|
||||
|
||||
var expectedEventSequence = ["navigatingTo", "loaded", "navigatedTo", "navigatingFrom", "unloaded", "navigatedFrom"];
|
||||
TKUnit.arrayAssert(eventSequence, expectedEventSequence, "Actual event sequence is not equal to expected. Actual: " + eventSequence + "; Expected: " + expectedEventSequence);
|
||||
}
|
||||
|
||||
export function test_NavigateTo_WithContext() {
|
||||
var currentPage;
|
||||
currentPage = FrameModule.topmost().currentPage;
|
||||
let currentPage = frameModule.topmost().currentPage;
|
||||
// <snippet module="ui/page" title="Page">
|
||||
// ### Pass data to the new page.
|
||||
// ``` JavaScript
|
||||
var testPage: PageModule.Page;
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
testPage = new PageModule.Page();
|
||||
testPage.on(PageModule.Page.navigatedToEvent, function () {
|
||||
var testPage: pageModule.Page;
|
||||
var pageFactory = function (): pageModule.Page {
|
||||
testPage = new pageModule.Page();
|
||||
testPage.on(pageModule.Page.navigatedToEvent, function () {
|
||||
////console.log(JSON.stringify(context));
|
||||
});
|
||||
return testPage;
|
||||
@@ -233,149 +237,153 @@ export function test_NavigateTo_WithContext() {
|
||||
context: "myContext",
|
||||
animated: false
|
||||
};
|
||||
var topFrame = FrameModule.topmost();
|
||||
let topFrame = frameModule.topmost();
|
||||
topFrame.navigate(navEntry);
|
||||
// ```
|
||||
// </snippet>
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage !== currentPage });
|
||||
TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage !== currentPage && testPage.isLayoutValid);
|
||||
|
||||
var actualContextValue = testPage.navigationContext;
|
||||
TKUnit.assert(actualContextValue === "myContext", "Expected: myContext" + ", Actual: " + actualContextValue);
|
||||
helper.goBack();
|
||||
TKUnit.assertEqual(actualContextValue, "myContext");
|
||||
|
||||
TKUnit.assert(testPage.navigationContext === undefined, "Navigation context should be cleared on navigating back");
|
||||
topFrame.goBack();
|
||||
TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage === currentPage);
|
||||
|
||||
TKUnit.assertNull(testPage.navigationContext, "Navigation context should be cleared on navigating back");
|
||||
}
|
||||
|
||||
export function test_FrameBackStack_WhenNavigatingForwardAndBack() {
|
||||
var testPage: Page;
|
||||
var pageFactory = function () {
|
||||
var testPage = new PageModule.Page();
|
||||
testPage = new Page();
|
||||
addLabelToPage(testPage);
|
||||
return testPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
let topFrame = frameModule.topmost();
|
||||
let currentPage = topFrame.currentPage;
|
||||
|
||||
var topFrame = FrameModule.topmost();
|
||||
TKUnit.assert(topFrame.backStack.length === 1, "Expected: 1, Actual: " + topFrame.backStack.length);
|
||||
TKUnit.assert(topFrame.canGoBack(), "We should can go back.");
|
||||
helper.goBack();
|
||||
topFrame.navigate(pageFactory);
|
||||
TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage === testPage);
|
||||
|
||||
TKUnit.assert(topFrame.backStack.length === 0, "Expected: 0, Actual: " + topFrame.backStack.length);
|
||||
TKUnit.assert(topFrame.canGoBack() === false, "canGoBack should return false.");
|
||||
TKUnit.assertEqual(topFrame.backStack.length, 1);
|
||||
TKUnit.assertTrue(topFrame.canGoBack(), "We should can go back.");
|
||||
|
||||
topFrame.goBack();
|
||||
TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage === currentPage);
|
||||
|
||||
TKUnit.assertEqual(topFrame.backStack.length, 0);
|
||||
TKUnit.assertFalse(topFrame.canGoBack(), "canGoBack should return false.");
|
||||
}
|
||||
|
||||
export function test_LoadPageFromModule() {
|
||||
let topFrame = frameModule.topmost();
|
||||
helper.navigateToModule("ui/page/test-page-module");
|
||||
var topFrame = FrameModule.topmost();
|
||||
TKUnit.assert(topFrame.currentPage.content instanceof LabelModule.Label, "Content of the test page should be a Label created within test-page-module.");
|
||||
var testLabel = <LabelModule.Label>topFrame.currentPage.content;
|
||||
TKUnit.assert(testLabel.text === "Label created within a page module.");
|
||||
helper.goBack();
|
||||
|
||||
TKUnit.assert(topFrame.currentPage.content instanceof Label, "Content of the test page should be a Label created within test-page-module.");
|
||||
let testLabel = <Label>topFrame.currentPage.content;
|
||||
TKUnit.assertEqual(testLabel.text, "Label created within a page module.");
|
||||
}
|
||||
|
||||
export function test_LoadPageFromDeclarativeWithCSS() {
|
||||
let topFrame = frameModule.topmost();
|
||||
helper.navigateToModule("ui/page/test-page-declarative-css");
|
||||
var topFrame = FrameModule.topmost();
|
||||
TKUnit.assert(topFrame.currentPage.content instanceof LabelModule.Label, "Content of the test page should be a Label created within test-page-module-css.");
|
||||
var testLabel = <LabelModule.Label>topFrame.currentPage.content;
|
||||
TKUnit.assert(testLabel.text === "Label created within a page declarative file with css.");
|
||||
TKUnit.assert(testLabel.style.backgroundColor.hex === "#ff00ff00", "Expected: #ff00ff00, Actual: " + testLabel.style.backgroundColor.hex);
|
||||
helper.goBack();
|
||||
|
||||
TKUnit.assert(topFrame.currentPage.content instanceof Label, "Content of the test page should be a Label created within test-page-module-css.");
|
||||
var testLabel = <Label>topFrame.currentPage.content;
|
||||
TKUnit.assertEqual(testLabel.text, "Label created within a page declarative file with css.");
|
||||
TKUnit.assertEqual(testLabel.style.backgroundColor.hex, "#ff00ff00");
|
||||
}
|
||||
|
||||
export function test_LoadPageFromModuleWithCSS() {
|
||||
let topFrame = frameModule.topmost();
|
||||
helper.navigateToModule("ui/page/test-page-module-css");
|
||||
var topFrame = FrameModule.topmost();
|
||||
TKUnit.assert(topFrame.currentPage.content instanceof LabelModule.Label, "Content of the test page should be a Label created within test-page-module-css.");
|
||||
var testLabel = <LabelModule.Label>topFrame.currentPage.content;
|
||||
TKUnit.assert(testLabel.text === "Label created within a page module css.");
|
||||
TKUnit.assert(testLabel.style.backgroundColor.hex === "#ff00ff00", "Expected: #ff00ff00, Actual: " + testLabel.style.backgroundColor.hex);
|
||||
helper.goBack();
|
||||
|
||||
TKUnit.assert(topFrame.currentPage.content instanceof Label, "Content of the test page should be a Label created within test-page-module-css.");
|
||||
var testLabel = <Label>topFrame.currentPage.content;
|
||||
TKUnit.assertEqual(testLabel.text, "Label created within a page module css.");
|
||||
TKUnit.assertEqual(testLabel.style.backgroundColor.hex, "#ff00ff00");
|
||||
}
|
||||
|
||||
export function test_NavigateToPageCreatedWithNavigationEntry() {
|
||||
var expectedText = "Label created with a NavigationEntry";
|
||||
var testPage: PageModule.Page;
|
||||
var testPage: Page;
|
||||
var pageFactory = function () {
|
||||
testPage = new PageModule.Page();
|
||||
testPage = new Page();
|
||||
addLabelToPage(testPage, expectedText);
|
||||
return testPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
var actualContent = <LabelModule.Label>testPage.content;
|
||||
TKUnit.assert(actualContent.text === expectedText, "Expected: " + expectedText + ", Actual: " + actualContent.text);
|
||||
helper.goBack();
|
||||
var actualContent = <Label>testPage.content;
|
||||
TKUnit.assertEqual(actualContent.text, expectedText);
|
||||
}
|
||||
|
||||
export function test_cssShouldBeAppliedToAllNestedElements() {
|
||||
var label: LabelModule.Label;
|
||||
var StackLayout: stackLayoutModule.StackLayout;
|
||||
var pageFactory = function () {
|
||||
var testPage = new PageModule.Page();
|
||||
label = new LabelModule.Label();
|
||||
label.text = expectedText;
|
||||
StackLayout = new stackLayoutModule.StackLayout();
|
||||
StackLayout.addChild(label);
|
||||
testPage.content = StackLayout;
|
||||
testPage.css = "stackLayout {background-color: #ffff0000;} label {background-color: #ff00ff00;}";
|
||||
let expectedText = "Some text";
|
||||
let testPage = new Page();
|
||||
let label = new Label();
|
||||
label.text = expectedText;
|
||||
|
||||
let stackLayout = new StackLayout();
|
||||
stackLayout.addChild(label);
|
||||
testPage.content = stackLayout;
|
||||
testPage.css = "stackLayout {background-color: #ffff0000;} label {background-color: #ff00ff00;}";
|
||||
|
||||
let pageFactory = function () {
|
||||
return testPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
var expectedText = "Some text";
|
||||
TKUnit.assert(label.style.backgroundColor.hex === "#ff00ff00", "Expected: #ff00ff00, Actual: " + label.style.backgroundColor.hex);
|
||||
TKUnit.assert(StackLayout.style.backgroundColor.hex === "#ffff0000", "Expected: #ffff0000, Actual: " + StackLayout.style.backgroundColor.hex);
|
||||
helper.goBack();
|
||||
|
||||
TKUnit.assertEqual(label.style.backgroundColor.hex, "#ff00ff00");
|
||||
TKUnit.assertEqual(stackLayout.style.backgroundColor.hex, "#ffff0000");
|
||||
}
|
||||
|
||||
export function test_cssShouldBeAppliedAfterChangeToAllNestedElements() {
|
||||
var testPage: PageModule.Page;
|
||||
var label: LabelModule.Label;
|
||||
var StackLayout: stackLayoutModule.StackLayout;
|
||||
var pageFactory = function () {
|
||||
testPage = new PageModule.Page();
|
||||
label = new LabelModule.Label();
|
||||
label.text = expectedText;
|
||||
StackLayout = new stackLayoutModule.StackLayout();
|
||||
StackLayout.addChild(label);
|
||||
testPage.content = StackLayout;
|
||||
testPage.css = "stackLayout {background-color: #ffff0000;} label {background-color: #ff00ff00;}";
|
||||
let expectedText = "Some text";
|
||||
let testPage = new Page();
|
||||
let label = new Label();
|
||||
label.text = expectedText;
|
||||
|
||||
let stackLayout = new StackLayout();
|
||||
stackLayout.addChild(label);
|
||||
testPage.content = stackLayout;
|
||||
testPage.css = "stackLayout {background-color: #ffff0000;} label {background-color: #ff00ff00;}";
|
||||
|
||||
let pageFactory = function () {
|
||||
return testPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
var expectedText = "Some text";
|
||||
TKUnit.assert(label.style.backgroundColor.hex === "#ff00ff00", "Expected: #ff00ff00, Actual: " + label.style.backgroundColor.hex);
|
||||
TKUnit.assert(StackLayout.style.backgroundColor.hex === "#ffff0000", "Expected: #ffff0000, Actual: " + StackLayout.style.backgroundColor.hex);
|
||||
TKUnit.assertEqual(label.style.backgroundColor.hex, "#ff00ff00");
|
||||
TKUnit.assertEqual(stackLayout.style.backgroundColor.hex, "#ffff0000");
|
||||
|
||||
testPage.css = "stackLayout {background-color: #ff0000ff;} label {background-color: #ffff0000;}";
|
||||
TKUnit.assert(label.style.backgroundColor.hex === "#ffff0000", "Expected: #ffff0000, Actual: " + label.style.backgroundColor.hex);
|
||||
TKUnit.assert(StackLayout.style.backgroundColor.hex === "#ff0000ff", "Expected: #ff0000ff, Actual: " + StackLayout.style.backgroundColor.hex);
|
||||
helper.goBack();
|
||||
TKUnit.assertEqual(label.style.backgroundColor.hex, "#ffff0000");
|
||||
TKUnit.assertEqual(stackLayout.style.backgroundColor.hex, "#ff0000ff");
|
||||
}
|
||||
|
||||
export function test_page_backgroundColor_is_white() {
|
||||
helper.do_PageTest_WithButton(function testBackground(views: Array<view.View>) {
|
||||
var page = <PageModule.Page>views[0];
|
||||
TKUnit.assertEqual(page.style.backgroundColor.hex.toLowerCase(), "#ffffff", "page background-color");
|
||||
});
|
||||
let page = new Page();
|
||||
let factory = () => page;
|
||||
helper.navigate(factory);
|
||||
TKUnit.assertEqual(page.style.backgroundColor.hex.toLowerCase(), "#ffffff", "page background-color");
|
||||
}
|
||||
|
||||
export function test_WhenPageIsLoadedFrameCurrentPageIsNotYetTheSameAsThePage() {
|
||||
var page;
|
||||
var loadedEventHandler = function (args) {
|
||||
TKUnit.assert(FrameModule.topmost().currentPage !== args.object, `When a page is loaded it should not yet be the current page. Loaded: ${args.object.id}; Current: ${FrameModule.topmost().currentPage.id};`);
|
||||
TKUnit.assertNotEqual(frameModule.topmost().currentPage, args.object, "When a page is loaded it should not yet be the current page.");
|
||||
}
|
||||
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
page = new PageModule.Page();
|
||||
var pageFactory = function (): Page {
|
||||
page = new Page();
|
||||
page.id = "newPage";
|
||||
page.on(view.View.loadedEvent, loadedEventHandler);
|
||||
var label = new LabelModule.Label();
|
||||
var label = new Label();
|
||||
label.text = "Text";
|
||||
page.content = label;
|
||||
return page;
|
||||
@@ -383,20 +391,19 @@ export function test_WhenPageIsLoadedFrameCurrentPageIsNotYetTheSameAsThePage()
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
page.off(view.View.loadedEvent, loadedEventHandler);
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
export function test_WhenPageIsNavigatedToFrameCurrentPageIsNowTheSameAsThePage() {
|
||||
var page;
|
||||
var navigatedEventHandler = function (args) {
|
||||
TKUnit.assert(FrameModule.topmost().currentPage === args.object, `frame.topmost().currentPage should be equal to args.object page instance in the page.navigatedTo event handler. Expected: ${args.object.id}; Actual: ${FrameModule.topmost().currentPage.id};`);
|
||||
TKUnit.assertEqual(frameModule.topmost().currentPage, args.object, `frame.topmost().currentPage should be equal to args.object page instance in the page.navigatedTo event handler. Expected: ${args.object.id}; Actual: ${frameModule.topmost().currentPage.id};`);
|
||||
}
|
||||
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
page = new PageModule.Page();
|
||||
var pageFactory = function (): Page {
|
||||
page = new Page();
|
||||
page.id = "newPage";
|
||||
page.on(PageModule.Page.navigatedToEvent, navigatedEventHandler);
|
||||
var label = new LabelModule.Label();
|
||||
page.on(Page.navigatedToEvent, navigatedEventHandler);
|
||||
var label = new Label();
|
||||
label.text = "Text";
|
||||
page.content = label;
|
||||
return page;
|
||||
@@ -404,7 +411,6 @@ export function test_WhenPageIsNavigatedToFrameCurrentPageIsNowTheSameAsThePage(
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
page.off(view.View.loadedEvent, navigatedEventHandler);
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
export function test_WhenNavigatingForwardAndBack_IsBackNavigationIsCorrect() {
|
||||
@@ -412,7 +418,7 @@ export function test_WhenNavigatingForwardAndBack_IsBackNavigationIsCorrect() {
|
||||
var page2;
|
||||
var forwardCounter = 0;
|
||||
var backCounter = 0;
|
||||
var navigatedEventHandler = function (args: PageModule.NavigatedData) {
|
||||
var navigatedEventHandler = function (args: NavigatedData) {
|
||||
if (args.isBackNavigation) {
|
||||
backCounter++;
|
||||
}
|
||||
@@ -421,26 +427,29 @@ export function test_WhenNavigatingForwardAndBack_IsBackNavigationIsCorrect() {
|
||||
}
|
||||
}
|
||||
|
||||
var pageFactory1 = function (): PageModule.Page {
|
||||
page1 = new PageModule.Page();
|
||||
page1.on(PageModule.Page.navigatedToEvent, navigatedEventHandler);
|
||||
var pageFactory1 = function (): Page {
|
||||
page1 = new Page();
|
||||
page1.on(Page.navigatedToEvent, navigatedEventHandler);
|
||||
return page1;
|
||||
};
|
||||
|
||||
var pageFactory2 = function (): PageModule.Page {
|
||||
page2 = new PageModule.Page();
|
||||
page2.on(PageModule.Page.navigatedToEvent, navigatedEventHandler);
|
||||
var pageFactory2 = function (): Page {
|
||||
page2 = new Page();
|
||||
page2.on(Page.navigatedToEvent, navigatedEventHandler);
|
||||
return page2;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory1);
|
||||
helper.navigate(pageFactory2);
|
||||
helper.goBack();
|
||||
let topFrame = frameModule.topmost();
|
||||
helper.navigateWithHistory(pageFactory1);
|
||||
helper.navigateWithHistory(pageFactory2);
|
||||
|
||||
frameModule.goBack();
|
||||
TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage === page1);
|
||||
|
||||
TKUnit.assertEqual(forwardCounter, 2, "Forward navigation counter should be 1");
|
||||
TKUnit.assertEqual(backCounter, 1, "Backward navigation counter should be 1");
|
||||
page1.off(PageModule.Page.navigatedToEvent, navigatedEventHandler);
|
||||
page2.off(PageModule.Page.navigatedToEvent, navigatedEventHandler);
|
||||
helper.goBack();
|
||||
page1.off(Page.navigatedToEvent, navigatedEventHandler);
|
||||
page2.off(Page.navigatedToEvent, navigatedEventHandler);
|
||||
}
|
||||
|
||||
export function test_WhenPageIsNavigatedToItCanShowAnotherPageAsModal() {
|
||||
@@ -498,27 +507,22 @@ export function test_WhenPageIsNavigatedToItCanShowAnotherPageAsModal() {
|
||||
return masterPage;
|
||||
};
|
||||
|
||||
try {
|
||||
helper.navigate(masterPageFactory);
|
||||
helper.navigate(masterPageFactory);
|
||||
|
||||
TKUnit.waitUntilReady(() => { return modalUnloaded > 0; });
|
||||
TKUnit.assertEqual(shownModally, 1, "shownModally");
|
||||
TKUnit.assertEqual(modalLoaded, 1, "modalLoaded");
|
||||
TKUnit.assertEqual(modalUnloaded, 1, "modalUnloaded");
|
||||
TKUnit.waitUntilReady(() => { return modalUnloaded > 0; });
|
||||
TKUnit.assertEqual(shownModally, 1, "shownModally");
|
||||
TKUnit.assertEqual(modalLoaded, 1, "modalLoaded");
|
||||
TKUnit.assertEqual(modalUnloaded, 1, "modalUnloaded");
|
||||
|
||||
masterPage.off(Page.navigatedToEvent, navigatedToEventHandler);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
masterPage.off(Page.navigatedToEvent, navigatedToEventHandler);
|
||||
}
|
||||
|
||||
//export function test_ModalPage_Layout_is_Correct() {
|
||||
// var testPage: PageModule.Page;
|
||||
// var label: LabelModule.Label;
|
||||
// var testPage: Page;
|
||||
// var label: Label;
|
||||
// var pageFactory = function () {
|
||||
// testPage = new PageModule.Page();
|
||||
// label = new LabelModule.Label();
|
||||
// testPage = new Page();
|
||||
// label = new Label();
|
||||
// label.text = "Will Show modal page";
|
||||
// testPage.content = label;
|
||||
// return testPage;
|
||||
@@ -534,7 +538,7 @@ export function test_WhenPageIsNavigatedToItCanShowAnotherPageAsModal() {
|
||||
// var closeCallback: Function = (<any>testPage).close;
|
||||
|
||||
// try {
|
||||
// var layout = <stackLayoutModule.StackLayout>childPage.content;
|
||||
// var layout = <StackLayout>childPage.content;
|
||||
// var repeater = layout.getChildAt(1);
|
||||
// TKUnit.assertTrue(repeater.isLayoutValid, "layout should be valid.");
|
||||
// var bounds = repeater._getCurrentLayoutBounds();
|
||||
|
||||
@@ -7,39 +7,11 @@ import frame = require("ui/frame");
|
||||
|
||||
global.moduleMerge(PageTestCommon, exports);
|
||||
|
||||
export var test_NavigateToNewPage_WithAndroidCache = function () {
|
||||
var testPage: PageModule.Page;
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
testPage = new PageModule.Page();
|
||||
var label = new LabelModule.Label();
|
||||
label.text = "The quick brown fox jumps over the lazy dog.";
|
||||
testPage.content = label;
|
||||
return testPage;
|
||||
};
|
||||
|
||||
var androidFrame = frame.topmost().android;
|
||||
var cachingBefore = androidFrame.cachePagesOnNavigate;
|
||||
try {
|
||||
androidFrame.cachePagesOnNavigate = true;
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
helper.goBack();
|
||||
}
|
||||
finally {
|
||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||
}
|
||||
|
||||
TKUnit.assert(testPage.parent === undefined, "Page.parent should become undefined after navigating back");
|
||||
TKUnit.assert(testPage.isLoaded === false, "Page.isLoaded should become false after navigating back");
|
||||
TKUnit.assert(testPage.frame === undefined, "Page.frame should become undefined after navigating back");
|
||||
TKUnit.assert(testPage._isAddedToNativeVisualTree === false, "Page._isAddedToNativeVisualTree should become false after navigating back");
|
||||
}
|
||||
|
||||
export var test_NavigateToNewPage_InnerControl_WithAndroidCache = function () {
|
||||
export function test_NavigateToNewPage_WithAndroidCache() {
|
||||
var testPage: PageModule.Page;
|
||||
var label: LabelModule.Label;
|
||||
var pageFactory = function () {
|
||||
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
testPage = new PageModule.Page();
|
||||
label = new LabelModule.Label();
|
||||
label.text = "The quick brown fox jumps over the lazy dog.";
|
||||
@@ -50,16 +22,23 @@ export var test_NavigateToNewPage_InnerControl_WithAndroidCache = function () {
|
||||
var androidFrame = frame.topmost().android;
|
||||
var cachingBefore = androidFrame.cachePagesOnNavigate;
|
||||
try {
|
||||
let currentPage = frame.topmost().currentPage;
|
||||
androidFrame.cachePagesOnNavigate = true;
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
helper.navigateWithHistory(pageFactory);
|
||||
|
||||
helper.goBack();
|
||||
frame.goBack();
|
||||
TKUnit.waitUntilReady(() => frame.topmost().currentPage !== null && frame.topmost().currentPage === currentPage);
|
||||
}
|
||||
finally {
|
||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||
}
|
||||
|
||||
TKUnit.assert(testPage.parent === undefined, "Page.parent should become undefined after navigating back");
|
||||
TKUnit.assert(testPage.isLoaded === false, "Page.isLoaded should become false after navigating back");
|
||||
TKUnit.assert(testPage.frame === undefined, "Page.frame should become undefined after navigating back");
|
||||
TKUnit.assert(testPage._isAddedToNativeVisualTree === false, "Page._isAddedToNativeVisualTree should become false after navigating back");
|
||||
|
||||
TKUnit.assert(label._context === undefined, "InnerControl._context should not be set after navigate back.");
|
||||
TKUnit.assert(label.android === undefined, "InnerControl.android should not be set after navigate back.");
|
||||
TKUnit.assert(label._nativeView === undefined, "InnerControl._nativeView hould not be set after navigate back.");
|
||||
@@ -75,9 +54,10 @@ export var test_NavigateToNewPage_InnerControl = function () {
|
||||
return testPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
helper.goBack();
|
||||
let currentPage = frame.topmost().currentPage;
|
||||
helper.navigateWithHistory(pageFactory);
|
||||
frame.goBack();
|
||||
TKUnit.waitUntilReady(() => frame.topmost().currentPage !== null && frame.topmost().currentPage === currentPage);
|
||||
|
||||
var label = <LabelModule.Label>testPage.content;
|
||||
|
||||
@@ -99,7 +79,7 @@ export var test_ChangePageCaching_AfterNavigated_Throws = function () {
|
||||
var androidFrame = frame.topmost().android;
|
||||
var cachingBefore = androidFrame.cachePagesOnNavigate;
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
helper.navigateWithHistory(pageFactory);
|
||||
|
||||
try {
|
||||
TKUnit.assertThrows(() => {
|
||||
@@ -111,7 +91,6 @@ export var test_ChangePageCaching_AfterNavigated_Throws = function () {
|
||||
);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||
}
|
||||
}
|
||||
@@ -134,7 +113,6 @@ export var test_SetPageCaching_ToTheSameValue_AfterNavigated_DoesNotThrow = func
|
||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||
}
|
||||
}
|
||||
@@ -151,4 +129,4 @@ export var test_ChangePageCaching_BeforeNavigated_DoesNotThrow = function () {
|
||||
finally {
|
||||
androidFrame.cachePagesOnNavigate = cachingBefore;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import helper = require("../helper");
|
||||
import {View} from "ui/core/view";
|
||||
import {EventData} from "data/observable";
|
||||
import uiUtils = require("ui/utils");
|
||||
import * as frame from "ui/frame";
|
||||
|
||||
global.moduleMerge(PageTestCommon, exports);
|
||||
|
||||
@@ -17,11 +18,13 @@ export function test_NavigateToNewPage_InnerControl() {
|
||||
return testPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
helper.goBack();
|
||||
|
||||
let currentPage = helper.getCurrentPage();
|
||||
helper.navigateWithHistory(pageFactory);
|
||||
var label = <Label>testPage.content;
|
||||
|
||||
frame.goBack();
|
||||
TKUnit.waitUntilReady(() => !label.isLoaded && frame.topmost().currentPage === currentPage);
|
||||
|
||||
TKUnit.assertEqual(label._context, undefined, "label._context should be undefined after navigate back.");
|
||||
TKUnit.assertEqual(label.android, undefined, "label.android should be undefined after navigate back.");
|
||||
TKUnit.assertFalse(label.isLoaded, "label.isLoaded should become false after navigating back");
|
||||
@@ -60,16 +63,11 @@ export function test_WhenShowingModalPageUnloadedIsNotFiredForTheMasterPage() {
|
||||
return masterPage;
|
||||
};
|
||||
|
||||
try {
|
||||
helper.navigate(masterPageFactory);
|
||||
TKUnit.waitUntilReady(() => { return modalUnloaded > 0; });
|
||||
TKUnit.assert(!masterPageUnloaded, "Master page should not raise 'unloaded' when showing modal!");
|
||||
masterPage.off(View.loadedEvent, navigatedToEventHandler);
|
||||
masterPage.off(View.unloadedEvent, unloadedEventHandler);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
helper.navigate(masterPageFactory);
|
||||
TKUnit.waitUntilReady(() => { return modalUnloaded > 0; });
|
||||
TKUnit.assert(!masterPageUnloaded, "Master page should not raise 'unloaded' when showing modal!");
|
||||
masterPage.off(View.loadedEvent, navigatedToEventHandler);
|
||||
masterPage.off(View.unloadedEvent, unloadedEventHandler);
|
||||
}
|
||||
|
||||
export function test_page_no_anctionBar_measure_no_spanUnderBackground_measure_layout_size_isCorrect() {
|
||||
@@ -79,39 +77,34 @@ export function test_page_no_anctionBar_measure_no_spanUnderBackground_measure_l
|
||||
let lbl = new Label();
|
||||
page.content = lbl;
|
||||
|
||||
try {
|
||||
helper.navigate(() => { return page; });
|
||||
TKUnit.waitUntilReady(() => { return page.isLayoutValid; });
|
||||
TKUnit.assertTrue(page.isLoaded, "page NOT loaded!");
|
||||
helper.navigate(() => { return page; });
|
||||
TKUnit.waitUntilReady(() => { return page.isLayoutValid; });
|
||||
TKUnit.assertTrue(page.isLoaded, "page NOT loaded!");
|
||||
|
||||
let bounds = page._getCurrentLayoutBounds();
|
||||
let pageHeight = bounds.bottom - bounds.top;
|
||||
let frameBounds = page.frame._getCurrentLayoutBounds();
|
||||
let frameHeight = frameBounds.bottom - frameBounds.top;
|
||||
TKUnit.assertEqual(pageHeight, frameHeight, "Page height should match Frame height.");
|
||||
let bounds = page._getCurrentLayoutBounds();
|
||||
let pageHeight = bounds.bottom - bounds.top;
|
||||
let frameBounds = page.frame._getCurrentLayoutBounds();
|
||||
let frameHeight = frameBounds.bottom - frameBounds.top;
|
||||
TKUnit.assertEqual(pageHeight, frameHeight, "Page height should match Frame height.");
|
||||
|
||||
let contentHeight = lbl._getCurrentLayoutBounds().bottom - lbl._getCurrentLayoutBounds().top;
|
||||
let statusBarHeight = uiUtils.ios.getStatusBarHeight();
|
||||
TKUnit.assertEqual(contentHeight, frameHeight - statusBarHeight, "Page.content height should match Frame height - statusBar height.");
|
||||
let contentHeight = lbl._getCurrentLayoutBounds().bottom - lbl._getCurrentLayoutBounds().top;
|
||||
let statusBarHeight = uiUtils.ios.getStatusBarHeight();
|
||||
TKUnit.assertEqual(contentHeight, frameHeight - statusBarHeight, "Page.content height should match Frame height - statusBar height.");
|
||||
|
||||
page.backgroundSpanUnderStatusBar = false;
|
||||
TKUnit.waitUntilReady(() => { return page.isLayoutValid; });
|
||||
pageHeight = page._getCurrentLayoutBounds().bottom - page._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertEqual(pageHeight, frameHeight - statusBarHeight, "Page should be given Frame height - statusBar height.");
|
||||
page.backgroundSpanUnderStatusBar = false;
|
||||
TKUnit.waitUntilReady(() => { return page.isLayoutValid; });
|
||||
pageHeight = page._getCurrentLayoutBounds().bottom - page._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertEqual(pageHeight, frameHeight - statusBarHeight, "Page should be given Frame height - statusBar height.");
|
||||
|
||||
contentHeight = lbl._getCurrentLayoutBounds().bottom - lbl._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertEqual(contentHeight, pageHeight, "Page.content height should match Page height.");
|
||||
contentHeight = lbl._getCurrentLayoutBounds().bottom - lbl._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertEqual(contentHeight, pageHeight, "Page.content height should match Page height.");
|
||||
|
||||
page.actionBarHidden = false;
|
||||
TKUnit.waitUntilReady(() => { return page.isLayoutValid; });
|
||||
page.actionBarHidden = false;
|
||||
TKUnit.waitUntilReady(() => { return page.isLayoutValid; });
|
||||
|
||||
pageHeight = page._getCurrentLayoutBounds().bottom - page._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertEqual(pageHeight, frameHeight - statusBarHeight, "Page should be given Frame height - statusBar height.");
|
||||
pageHeight = page._getCurrentLayoutBounds().bottom - page._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertEqual(pageHeight, frameHeight - statusBarHeight, "Page should be given Frame height - statusBar height.");
|
||||
|
||||
contentHeight = lbl._getCurrentLayoutBounds().bottom - lbl._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertTrue(contentHeight < pageHeight, "Page.content be given less space than Page when ActionBar is shown.");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
contentHeight = lbl._getCurrentLayoutBounds().bottom - lbl._getCurrentLayoutBounds().top;
|
||||
TKUnit.assertTrue(contentHeight < pageHeight, "Page.content be given less space than Page when ActionBar is shown.");
|
||||
}
|
||||
@@ -1,10 +1,11 @@
|
||||
import TKUnit = require("../../TKUnit");
|
||||
import app = require("application");
|
||||
import helper = require("../helper");
|
||||
import button = require("ui/button");
|
||||
import enums = require("ui/enums");
|
||||
import testModule = require("../../ui-test");
|
||||
import layoutHelper = require("../../layouts/layout-helper");
|
||||
import {Page} from "ui/page";
|
||||
import * as frame from "ui/frame";
|
||||
|
||||
// <snippet module="ui/scroll-view" title="scroll-view">
|
||||
// # ScrollView
|
||||
@@ -170,9 +171,15 @@ class ScrollLayoutTest extends testModule.UITest<scrollViewModule.ScrollView> {
|
||||
this.testView.scrollToVerticalOffset(layoutHelper.dp(100), false);
|
||||
TKUnit.assertAreClose(layoutHelper.dip(this.testView.verticalOffset), 100, 0.1, "this.testView.verticalOffset before navigation");
|
||||
|
||||
helper.do_PageTest_WithButton((t) => {
|
||||
// Just navigate forward and back.
|
||||
});
|
||||
let page = new Page();
|
||||
let createFunc = () => {
|
||||
return page;
|
||||
};
|
||||
|
||||
let entry: frame.NavigationEntry = { create: createFunc, animated: false };
|
||||
frame.topmost().navigate(entry);
|
||||
TKUnit.waitUntilReady(() => page.isLayoutValid);
|
||||
frame.topmost().goBack();
|
||||
|
||||
// Wait for the page to reload.
|
||||
TKUnit.waitUntilReady(() => { return TKUnit.areClose(layoutHelper.dip(this.testView.verticalOffset), 100, 0.1); });
|
||||
@@ -189,9 +196,15 @@ class ScrollLayoutTest extends testModule.UITest<scrollViewModule.ScrollView> {
|
||||
|
||||
TKUnit.assertAreClose(layoutHelper.dip(this.testView.horizontalOffset), 100, 0.1, "this.testView.horizontalOffset before navigation");
|
||||
|
||||
helper.do_PageTest_WithButton((t) => {
|
||||
// Just navigate forward and back.
|
||||
});
|
||||
let page = new Page();
|
||||
let createFunc = () => {
|
||||
return page;
|
||||
};
|
||||
|
||||
let entry: frame.NavigationEntry = { create: createFunc, animated: false };
|
||||
frame.topmost().navigate(entry);
|
||||
TKUnit.waitUntilReady(() => page.isLayoutValid);
|
||||
frame.topmost().goBack();
|
||||
|
||||
// Wait for the page to reload.
|
||||
TKUnit.waitUntilReady(() => { return TKUnit.areClose(layoutHelper.dip(this.testView.horizontalOffset), 100, 0.1); });
|
||||
|
||||
@@ -29,7 +29,6 @@ export function setUpModule() {
|
||||
}
|
||||
|
||||
export function tearDownModule() {
|
||||
helper.goBack();
|
||||
testBtn = null;
|
||||
testPage = null;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,102 +1,61 @@
|
||||
import color = require("color");
|
||||
import button = require("ui/button");
|
||||
import page = require("ui/page");
|
||||
import stack = require("ui/layouts/stack-layout");
|
||||
import helper = require("../helper");
|
||||
|
||||
export var test_value_Inherited_stronger_than_Default = function () {
|
||||
var testPage: page.Page;
|
||||
var btn: button.Button;
|
||||
var pageFactory = function (): page.Page {
|
||||
testPage = new page.Page();
|
||||
var testStack = new stack.StackLayout();
|
||||
testPage.content = testStack;
|
||||
|
||||
btn = new button.Button();
|
||||
testStack.addChild(btn);
|
||||
testPage.css = "stackLayout { color: red; }";
|
||||
return testPage;
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
let page = helper.getCurrentPage();
|
||||
let btn = new button.Button();
|
||||
let testStack = new stack.StackLayout();
|
||||
page.content = testStack;
|
||||
testStack.addChild(btn);
|
||||
page.css = "stackLayout { color: red; }";
|
||||
helper.assertViewColor(btn, "#FF0000");
|
||||
|
||||
helper.goBack();
|
||||
page.css = "";
|
||||
}
|
||||
|
||||
export var test_value_Css_stronger_than_Inherited = function () {
|
||||
var testPage: page.Page;
|
||||
var btn: button.Button;
|
||||
var pageFactory = function (): page.Page {
|
||||
testPage = new page.Page();
|
||||
var testStack = new stack.StackLayout();
|
||||
testPage.content = testStack;
|
||||
let page = helper.getCurrentPage();
|
||||
let testStack = new stack.StackLayout();
|
||||
page.content = testStack;
|
||||
|
||||
btn = new button.Button();
|
||||
testStack.addChild(btn);
|
||||
testPage.css = "stackLayout { color: red; } button { color: blue; }";
|
||||
return testPage;
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
helper.navigate(pageFactory);
|
||||
let btn = new button.Button();
|
||||
testStack.addChild(btn);
|
||||
page.css = "stackLayout { color: red; } button { color: blue; }";
|
||||
|
||||
helper.assertViewColor(btn, "#0000FF");
|
||||
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
export var test_value_Local_stronger_than_Css = function () {
|
||||
var testPage: page.Page;
|
||||
var btn: button.Button;
|
||||
var pageFactory = function (): page.Page {
|
||||
testPage = new page.Page();
|
||||
var testStack = new stack.StackLayout();
|
||||
testPage.content = testStack;
|
||||
let testPage = helper.getCurrentPage();
|
||||
let testStack = new stack.StackLayout();
|
||||
testPage.content = testStack;
|
||||
|
||||
btn = new button.Button();
|
||||
testStack.addChild(btn);
|
||||
testPage.css = "button { color: red; }";
|
||||
return testPage;
|
||||
};
|
||||
|
||||
// Act & Assert
|
||||
helper.navigate(pageFactory);
|
||||
let btn = new button.Button();
|
||||
testStack.addChild(btn);
|
||||
testPage.css = "button { color: red; }";
|
||||
|
||||
helper.assertViewColor(btn, "#FF0000");
|
||||
btn.style.color = new color.Color("#0000FF");
|
||||
helper.assertViewColor(btn, "#0000FF");
|
||||
btn.style.color = undefined;
|
||||
helper.assertViewColor(btn, "#FF0000");
|
||||
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
export var test_value_VisualState_stronger_than_Local = function () {
|
||||
var testPage: page.Page;
|
||||
var btn: button.Button;
|
||||
var pageFactory = function (): page.Page {
|
||||
testPage = new page.Page();
|
||||
var testStack = new stack.StackLayout();
|
||||
testPage.content = testStack;
|
||||
let testPage = helper.getCurrentPage();
|
||||
|
||||
btn = new button.Button();
|
||||
btn.style.color = new color.Color("#FF0000");
|
||||
testStack.addChild(btn);
|
||||
testPage.css = "button:pressed { color: #0000FF; }";
|
||||
return testPage;
|
||||
};
|
||||
let testStack = new stack.StackLayout();
|
||||
testPage.content = testStack;
|
||||
|
||||
// Act & Assert
|
||||
helper.navigate(pageFactory);
|
||||
let btn = new button.Button();
|
||||
btn.style.color = new color.Color("#FF0000");
|
||||
testStack.addChild(btn);
|
||||
testPage.css = "button:pressed { color: #0000FF; }";
|
||||
|
||||
helper.assertViewColor(btn, "#FF0000");
|
||||
btn._goToVisualState("pressed");
|
||||
helper.assertViewColor(btn, "#0000FF");
|
||||
btn._goToVisualState("normal");
|
||||
helper.assertViewColor(btn, "#FF0000");
|
||||
|
||||
helper.goBack();
|
||||
}
|
||||
@@ -103,19 +103,19 @@ export function testWhenNavigatingBackToANonCachedPageContainingATabViewWithALis
|
||||
return tabViewPage;
|
||||
}
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "tab-view-page" }, ASYNC);
|
||||
TKUnit.waitUntilReady(() => { return tabViewIsFullyLoaded(tabView) }, ASYNC);
|
||||
helper.navigateWithHistory(pageFactory);
|
||||
TKUnit.waitUntilReady(() => topFrame.currentPage.id === "tab-view-page", ASYNC);
|
||||
TKUnit.waitUntilReady(() => tabViewIsFullyLoaded(tabView), ASYNC);
|
||||
|
||||
// This will navigate to a details page. The wait is inside the method.
|
||||
_clickTheFirstButtonInTheListViewNatively(tabView);
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "details-page" }, ASYNC);
|
||||
|
||||
helper.goBack();
|
||||
frameModule.goBack();
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "tab-view-page" }, ASYNC);
|
||||
TKUnit.waitUntilReady(() => { return tabViewIsFullyLoaded(tabView) }, ASYNC);
|
||||
|
||||
helper.goBack();
|
||||
frameModule.goBack();
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "mainPage" }, ASYNC);
|
||||
|
||||
if (topFrame.android) {
|
||||
@@ -156,6 +156,7 @@ function tabViewIsFullyLoaded(tabView: TabView): boolean {
|
||||
|
||||
function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack(enablePageCache: boolean) {
|
||||
var topFrame = frameModule.topmost();
|
||||
topFrame.currentPage.id = "mainPage";
|
||||
|
||||
var oldChache;
|
||||
if (topFrame.android) {
|
||||
@@ -197,15 +198,19 @@ function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack(enablePageCache
|
||||
tabView.items[i].view.on("unloaded", createUnloadedFor(i));
|
||||
}
|
||||
|
||||
helper.navigate(() => {
|
||||
var detailsPage = new Page();
|
||||
detailsPage.id = "details-page";
|
||||
detailsPage.content = new Label();
|
||||
var detailsPage = new Page();
|
||||
detailsPage.id = "details-page";
|
||||
|
||||
let createFunc = () => {
|
||||
return detailsPage;
|
||||
});
|
||||
};
|
||||
|
||||
let entry: frameModule.NavigationEntry = { create: createFunc, animated: false };
|
||||
topFrame.navigate(entry);
|
||||
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "details-page" }, ASYNC);
|
||||
|
||||
helper.goBack();
|
||||
|
||||
topFrame.goBack();
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "tab-view-page" }, ASYNC);
|
||||
TKUnit.waitUntilReady(() => { return tabViewIsFullyLoaded(tabView) }, ASYNC);
|
||||
|
||||
@@ -214,13 +219,16 @@ function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack(enablePageCache
|
||||
tabView.items[i].view.off("unloaded");
|
||||
}
|
||||
|
||||
helper.goBack();
|
||||
topFrame.goBack();
|
||||
|
||||
TKUnit.waitUntilReady(() => { return topFrame.currentPage.id === "mainPage" }, ASYNC);
|
||||
|
||||
if (topFrame.android) {
|
||||
topFrame.android.cachePagesOnNavigate = oldChache;
|
||||
}
|
||||
|
||||
topFrame.currentPage.id = null;
|
||||
|
||||
TKUnit.arrayAssert(loadedEventsCount, [1, 1]);
|
||||
TKUnit.arrayAssert(unloadedEventsCount, [1, 1]);
|
||||
}
|
||||
|
||||
@@ -99,15 +99,11 @@ export var test_parent_IsReset_WhenDetached_FromVisualTree = function () {
|
||||
cachedViews = views;
|
||||
}
|
||||
|
||||
helper.do_PageTest_WithButton(test);
|
||||
helper.do_PageTest_WithStackLayout_AndButton(test);
|
||||
|
||||
// the test will call goBack to the current frame and will remove the test page
|
||||
// verify the first view returned in the helper callback is detached (no parent)
|
||||
TKUnit.assert(types.isUndefined(cachedViews[0].parent));
|
||||
|
||||
// the button (second view) should have a parent
|
||||
TKUnit.assert(types.isDefined(cachedViews[1].parent));
|
||||
TKUnit.assert(cachedViews[1].parent === cachedViews[0]);
|
||||
TKUnit.assert(types.isUndefined(cachedViews[1].parent));
|
||||
TKUnit.assert(types.isDefined(cachedViews[2].parent));
|
||||
TKUnit.assert(cachedViews[2].parent === cachedViews[1]);
|
||||
}
|
||||
|
||||
export var test_domId_IsUnique = function () {
|
||||
@@ -152,14 +148,12 @@ export var test_event_LoadedUnloaded_IsRaised = function () {
|
||||
helper.do_PageTest_WithStackLayout_AndButton(test);
|
||||
}
|
||||
|
||||
export var test_bindingContext_IsInherited = function () {
|
||||
export function test_bindingContext_IsInherited() {
|
||||
var context = {};
|
||||
frame.topmost().bindingContext = context;
|
||||
|
||||
var test = function (views: Array<viewModule.View>) {
|
||||
var i;
|
||||
for (i = 0; i < views.length; i++) {
|
||||
TKUnit.assert(views[i].bindingContext === context);
|
||||
views[0].bindingContext = context;
|
||||
for (let i = 0; i < views.length; i++) {
|
||||
TKUnit.assertEqual(views[i].bindingContext, context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,8 +163,8 @@ export var test_bindingContext_IsInherited = function () {
|
||||
|
||||
export var test_isAddedToNativeVisualTree_IsUpdated = function () {
|
||||
var test = function (views: Array<viewModule.View>) {
|
||||
var i;
|
||||
for (i = 0; i < views.length; i++) {
|
||||
|
||||
for (let i = 0; i < views.length; i++) {
|
||||
TKUnit.assert(views[i]._isAddedToNativeVisualTree);
|
||||
}
|
||||
|
||||
@@ -243,17 +237,14 @@ export class TestButton extends button.Button {
|
||||
}
|
||||
|
||||
export var test_InheritableStylePropertiesWhenUsedWithExtendedClass_AreInherited = function () {
|
||||
var test = function (views: Array<viewModule.View>) {
|
||||
var redColor = new color.Color("red");
|
||||
views[0].style.color = redColor;
|
||||
let page = frame.topmost().currentPage;
|
||||
let redColor = new color.Color("red");
|
||||
page.style.color = redColor;
|
||||
|
||||
var newButton = new TestButton();
|
||||
views[1]._addView(newButton);
|
||||
let newButton = new TestButton();
|
||||
page.content = newButton;
|
||||
|
||||
TKUnit.assert(newButton.style.color === redColor);
|
||||
}
|
||||
|
||||
helper.do_PageTest_WithStackLayout_AndButton(test);
|
||||
TKUnit.assertEqual(newButton.style.color, redColor);
|
||||
}
|
||||
|
||||
var inheritanceTestDefaultValue = 42;
|
||||
|
||||
@@ -7,7 +7,7 @@ import types = require("utils/types");
|
||||
import stack = require("ui/layouts/stack-layout");
|
||||
import labelModule = require("ui/label");
|
||||
import background = require("ui/styling/background");
|
||||
|
||||
import frame = require("ui/frame");
|
||||
import trace = require("trace");
|
||||
// enable the trace, it is disabled by default
|
||||
trace.enable();
|
||||
@@ -19,12 +19,11 @@ export var test_event_onAttached_IsRaised = function () {
|
||||
trace.addEventListener(listener);
|
||||
|
||||
var test = function (views: Array<view.View>) {
|
||||
// 4 onAttached calls: page, stack, button, actionBar
|
||||
TKUnit.assertEqual(listener.receivedEvents.length, 4, "onAttached calls");
|
||||
// 2 onAttached calls: stack, button
|
||||
TKUnit.assertEqual(listener.receivedEvents.length, 2, "onAttached calls");
|
||||
|
||||
var i;
|
||||
for (i = 0; i < listener.receivedEvents.length; i++) {
|
||||
TKUnit.assertEqual(listener.receivedEvents[i].sender, views[i]);
|
||||
for (let i = 0; i < listener.receivedEvents.length; i++) {
|
||||
TKUnit.assertEqual(listener.receivedEvents[i].sender, views[i + 1]); // 0 is Page, so start with +1.
|
||||
TKUnit.assertEqual(listener.receivedEvents[i].name, "_onAttached");
|
||||
}
|
||||
}
|
||||
@@ -57,12 +56,11 @@ export var test_event_onContextChanged_IsRaised_WhenAttached = function () {
|
||||
trace.addEventListener(listener);
|
||||
|
||||
var test = function (views: Array<view.View>) {
|
||||
// 4 onContextChanged calls: page, stack, button, actionBar
|
||||
TKUnit.assertEqual(listener.receivedEvents.length, 4, "onContextChanged calls");
|
||||
// 2 onContextChanged calls: stack, button
|
||||
TKUnit.assertEqual(listener.receivedEvents.length, 2, "onContextChanged calls");
|
||||
|
||||
var i;
|
||||
for (i = 0; i < listener.receivedEvents.length; i++) {
|
||||
TKUnit.assertEqual(listener.receivedEvents[i].sender, views[i]);
|
||||
for (let i = 0; i < listener.receivedEvents.length; i++) {
|
||||
TKUnit.assertEqual(listener.receivedEvents[i].sender, views[i + 1]); // 0 is Page, so start with +1.
|
||||
TKUnit.assertEqual(listener.receivedEvents[i].name, "_onContextChanged");
|
||||
}
|
||||
}
|
||||
@@ -104,13 +102,11 @@ export var test_event_onDetached_IsRaised = function () {
|
||||
|
||||
helper.do_PageTest_WithStackLayout_AndButton(test);
|
||||
|
||||
// 4 detached calls: page, stack, button, actionBar
|
||||
TKUnit.assertEqual(listener.receivedEvents.length, 4, "onDetached calls");
|
||||
// 2 detached calls: page, stack, button, actionBar
|
||||
TKUnit.assertEqual(listener.receivedEvents.length, 2, "onDetached calls");
|
||||
|
||||
var i
|
||||
var j;
|
||||
// _onDetached event is propagated to nested children first
|
||||
for (i = 0, j = listener.receivedEvents.length - 1; i < listener.receivedEvents.length; i++ , j--) {
|
||||
for (let i = 0, j = listener.receivedEvents.length - 1; i < listener.receivedEvents.length; i++ , j--) {
|
||||
// check the sender and remove
|
||||
var index = cachedViews.indexOf(<view.View>listener.receivedEvents[i].sender);
|
||||
TKUnit.assert(index >= 0, "_onDetached called for unknown sender");
|
||||
@@ -142,41 +138,38 @@ export var test_event_onDetached_IsRaised_WhenRemoved_Dynamically = function ()
|
||||
}
|
||||
|
||||
export var test_events_onDetachedAndRemovedFromNativeVisualTree_AreRaised_WhenNavigateBack = function () {
|
||||
var onDetachedListener = new Listener("_onDetached");
|
||||
var removeFromNativeVisualTreeListener = new Listener("childInLayoutRemovedFromNativeVisualTree");
|
||||
let onDetachedListener = new Listener("_onDetached");
|
||||
let removeFromNativeVisualTreeListener = new Listener("childInLayoutRemovedFromNativeVisualTree");
|
||||
|
||||
var test = function (views: Array<view.View>) {
|
||||
trace.addEventListener(onDetachedListener);
|
||||
trace.addEventListener(removeFromNativeVisualTreeListener);
|
||||
};
|
||||
let page = frame.topmost().currentPage;
|
||||
let stackLayout = new stack.StackLayout();
|
||||
let btn = new button.Button();
|
||||
stackLayout.addChild(btn);
|
||||
page.content = stackLayout;
|
||||
|
||||
var assert = function (views: Array<view.View>) {
|
||||
// 4 onDetached calls: page, stack, button, actionBar
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents.length, 4, "onDetached calls");
|
||||
trace.addEventListener(onDetachedListener);
|
||||
trace.addEventListener(removeFromNativeVisualTreeListener);
|
||||
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].name, "_onDetached");
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].sender, views[2]); // Button
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[1].sender, views[1]); // Stack
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[2].sender, views[3]); // ActionBar
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[3].sender, views[0]); // Page
|
||||
page.content = null;
|
||||
|
||||
// this is an event fired from CustomLayoutView when a child is removed from the native visual tree
|
||||
// therefore this event is fired for StackLayout and Button (which is inside StackLayout).
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents.length, 3);
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[0].name, "childInLayoutRemovedFromNativeVisualTree");
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[0].sender, views[1]);
|
||||
// 2 onDetached calls: stack, button
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents.length, 2, "onDetached calls");
|
||||
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[1].name, "childInLayoutRemovedFromNativeVisualTree");
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[1].sender, views[2]);
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].name, "_onDetached");
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].sender, btn); // Button
|
||||
TKUnit.assertEqual(onDetachedListener.receivedEvents[1].sender, stackLayout); // stackLayout
|
||||
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[2].name, "childInLayoutRemovedFromNativeVisualTree");
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[2].sender, views[3]);
|
||||
// this is an event fired from CustomLayoutView when a child is removed from the native visual tree
|
||||
// therefore this event is fired for StackLayout and Button (which is inside StackLayout).
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents.length, 2);
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[0].name, "childInLayoutRemovedFromNativeVisualTree");
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[0].sender, stackLayout);
|
||||
|
||||
trace.removeEventListener(onDetachedListener);
|
||||
trace.removeEventListener(removeFromNativeVisualTreeListener);
|
||||
};
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[1].name, "childInLayoutRemovedFromNativeVisualTree");
|
||||
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[1].sender, btn);
|
||||
|
||||
helper.do_PageTest_WithStackLayout_AndButton_NavigatedBack(test, assert);
|
||||
trace.removeEventListener(onDetachedListener);
|
||||
trace.removeEventListener(removeFromNativeVisualTreeListener);
|
||||
}
|
||||
|
||||
export var test_cachedProperties_Applied_WhenNativeWidged_IsCreated = function () {
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
import commonTests = require("./view-tests-common");
|
||||
import view = require("ui/core/view");
|
||||
|
||||
import grid = require("ui/layouts/grid-layout");
|
||||
import color = require("color");
|
||||
import helper = require("../helper");
|
||||
import page = require("ui/page");
|
||||
import TKUnit = require("../../TKUnit");
|
||||
import button = require("ui/button");
|
||||
|
||||
@@ -37,54 +35,44 @@ export function checkNativeBackgroundImage(v: view.View): boolean {
|
||||
}
|
||||
|
||||
export function testBackgroundInternalChangedOnceOnResize() {
|
||||
|
||||
var layout = new grid.GridLayout();
|
||||
|
||||
let root = helper.getCurrentPage();
|
||||
let layout = new grid.GridLayout();
|
||||
layout.className = "myClass";
|
||||
layout.backgroundColor = new color.Color(255, 255, 0, 0);
|
||||
|
||||
var pageFactory = () => {
|
||||
var root = new page.Page();
|
||||
root.css = ".myClass { background-image: url('~/tests/logo.png') }";
|
||||
root.content = layout;
|
||||
return root;
|
||||
|
||||
root.css = ".myClass { background-image: url('~/tests/logo.png') }";
|
||||
root.content = layout;
|
||||
|
||||
let sizeChangedCount = 0;
|
||||
function trackCount() {
|
||||
let result = sizeChangedCount;
|
||||
sizeChangedCount = 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
|
||||
try {
|
||||
var sizeChangedCount = 0;
|
||||
function trackCount() {
|
||||
var result = sizeChangedCount;
|
||||
sizeChangedCount = 0;
|
||||
return result;
|
||||
var base = (<any>layout.style)._applyStyleProperty;
|
||||
(<any>layout.style)._applyStyleProperty = function (property) {
|
||||
base.apply(layout.style, arguments);
|
||||
if (property.name === "_backgroundInternal") {
|
||||
++sizeChangedCount;
|
||||
}
|
||||
|
||||
var base = (<any>layout.style)._applyStyleProperty;
|
||||
(<any>layout.style)._applyStyleProperty = function(property) {
|
||||
base.apply(layout.style, arguments);
|
||||
if (property.name === "_backgroundInternal") {
|
||||
++sizeChangedCount;
|
||||
}
|
||||
}
|
||||
|
||||
layout.requestLayout();
|
||||
layout.layout(0, 0, 200, 200);
|
||||
|
||||
TKUnit.assertEqual(trackCount(), 1, "Expected background to be re-applied at most once when the view is layed-out on 0 0 200 200.");
|
||||
|
||||
layout.requestLayout();
|
||||
layout.layout(50, 50, 250, 250);
|
||||
|
||||
TKUnit.assertEqual(trackCount(), 0, "Expected background to NOT change when view is layed-out from 0 0 200 200 to 50 50 250 250.");
|
||||
|
||||
layout.requestLayout();
|
||||
layout.layout(0, 0, 250, 250);
|
||||
|
||||
TKUnit.assertEqual(trackCount(), 1, "Expected background to be re-applied at most once when the view is layed-out from 50 50 250 250 to 0 0 250 250.");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
|
||||
layout.requestLayout();
|
||||
layout.layout(0, 0, 200, 200);
|
||||
|
||||
TKUnit.assertEqual(trackCount(), 1, "Expected background to be re-applied at most once when the view is layed-out on 0 0 200 200.");
|
||||
|
||||
layout.requestLayout();
|
||||
layout.layout(50, 50, 250, 250);
|
||||
|
||||
TKUnit.assertEqual(trackCount(), 0, "Expected background to NOT change when view is layed-out from 0 0 200 200 to 50 50 250 250.");
|
||||
|
||||
layout.requestLayout();
|
||||
layout.layout(0, 0, 250, 250);
|
||||
|
||||
TKUnit.assertEqual(trackCount(), 1, "Expected background to be re-applied at most once when the view is layed-out from 50 50 250 250 to 0 0 250 250.");
|
||||
}
|
||||
|
||||
export function test_automation_text_set_to_native() {
|
||||
|
||||
@@ -27,23 +27,21 @@ import segmentedBar = require("ui/segmented-bar");
|
||||
import { Source } from "utils/debug";
|
||||
|
||||
export function test_load_IsDefined() {
|
||||
TKUnit.assert(types.isFunction(builder.load), "ui/builder should have load method!");
|
||||
TKUnit.assertTrue(types.isFunction(builder.load), "ui/builder should have load method!");
|
||||
};
|
||||
|
||||
export function test_parse_IsDefined() {
|
||||
TKUnit.assert(types.isFunction(builder.parse), "ui/builder should have parse method!");
|
||||
TKUnit.assertTrue(types.isFunction(builder.parse), "ui/builder should have parse method!");
|
||||
};
|
||||
|
||||
export function test_load_ShouldNotCrashWithInvalidFileName() {
|
||||
var v = builder.load(fs.path.join(__dirname, "mainPage1.xml"));
|
||||
|
||||
TKUnit.assert(types.isUndefined(v), "Expected result: undefined; Actual result: " + v + ";");
|
||||
TKUnit.assertTrue(types.isUndefined(v), "Expected result: undefined; Actual result: " + v + ";");
|
||||
};
|
||||
|
||||
export function test_load_ShouldNotCrashWithoutExports() {
|
||||
var v = builder.load(fs.path.join(__dirname, "mainPage.xml"));
|
||||
|
||||
TKUnit.assert(v instanceof view.View, "Expected result: View; Actual result: " + v + ";");
|
||||
TKUnit.assertTrue(v instanceof view.View, "Expected result: View; Actual result: " + v + ";");
|
||||
};
|
||||
|
||||
export function test_loadWithOptionsNoXML() {
|
||||
@@ -54,32 +52,20 @@ export function test_loadWithOptionsNoXML() {
|
||||
page: new Page()
|
||||
});
|
||||
|
||||
TKUnit.assert(v instanceof view.View, "Expected result: View; Actual result: " + v + ";");
|
||||
TKUnit.assertTrue(v instanceof view.View, "Expected result: View; Actual result: " + v + ";");
|
||||
};
|
||||
|
||||
export function test_loadWithOptionsNoXML_CSSIsApplied() {
|
||||
var newPage: Page;
|
||||
var pageFactory = function (): Page {
|
||||
newPage = new Page();
|
||||
let newPage = helper.getCurrentPage();
|
||||
newPage.content = builder.load({
|
||||
path: "~/xml-declaration/mymodule",
|
||||
name: "MyControl",
|
||||
exports: exports,
|
||||
page: newPage
|
||||
});
|
||||
|
||||
newPage.content = builder.load({
|
||||
path: "~/xml-declaration/mymodule",
|
||||
name: "MyControl",
|
||||
exports: exports,
|
||||
page: newPage
|
||||
});
|
||||
|
||||
return newPage;
|
||||
};
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.assert(newPage.isLoaded, "The page should be loaded here.");
|
||||
try {
|
||||
helper.assertViewBackgroundColor(newPage.content, "#FF0000");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
helper.assertViewBackgroundColor(newPage.content, "#FF0000");
|
||||
};
|
||||
|
||||
export function test_loadInheritedPageAndResolveFromChild() {
|
||||
@@ -89,13 +75,13 @@ export function test_loadInheritedPageAndResolveFromChild() {
|
||||
TKUnit.assertEqual("Inherited and loaded", contentLabel.text);
|
||||
|
||||
let discoveredPage = contentLabel.page;
|
||||
TKUnit.assert(page === discoveredPage);
|
||||
TKUnit.assertEqual(page, discoveredPage);
|
||||
|
||||
let discoveredAncestorByBaseType = viewModule.getAncestor(contentLabel, Page);
|
||||
TKUnit.assert(page === discoveredAncestorByBaseType);
|
||||
TKUnit.assertEqual(page, discoveredAncestorByBaseType);
|
||||
|
||||
let discoveredAncestorByInheritedTypeName = viewModule.getAncestor(contentLabel, "InheritedPage");
|
||||
TKUnit.assert(page === discoveredAncestorByInheritedTypeName);
|
||||
TKUnit.assertEqual(page, discoveredAncestorByInheritedTypeName);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -106,7 +92,7 @@ export function test_loadWithOptionsWithXML() {
|
||||
exports: exports,
|
||||
page: new Page()
|
||||
});
|
||||
TKUnit.assert(v instanceof view.View, "Expected result: View; Actual result: " + v + ";");
|
||||
TKUnit.assertTrue(v instanceof view.View, "Expected result: View; Actual result: " + v + ";");
|
||||
};
|
||||
|
||||
export function test_loadWithOptionsWithXML_CSSIsApplied() {
|
||||
@@ -126,12 +112,7 @@ export function test_loadWithOptionsWithXML_CSSIsApplied() {
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.assert(newPage.isLoaded, "The page should be loaded here.");
|
||||
try {
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
};
|
||||
|
||||
export function test_loadWithOptionsFromTNS() {
|
||||
@@ -204,13 +185,7 @@ export function test_parse_ShouldResolveExportsFromCodeFileForTemplates() {
|
||||
};
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
|
||||
try {
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
|
||||
export function test_parse_css_is_applied_by_type_to_lower_case_dashed_components() {
|
||||
@@ -222,12 +197,7 @@ export function test_parse_css_is_applied_by_type_to_lower_case_dashed_component
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.assert(newPage.isLoaded, "The page should be loaded here.");
|
||||
try {
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldApplyCssFromCssFile() {
|
||||
@@ -239,12 +209,7 @@ export function test_parse_ShouldApplyCssFromCssFile() {
|
||||
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.assert(newPage.isLoaded, "The page should be loaded here.");
|
||||
try {
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldResolveExportsFromCodeFileAndApplyCssFile() {
|
||||
@@ -257,12 +222,7 @@ export function test_parse_ShouldResolveExportsFromCodeFileAndApplyCssFile() {
|
||||
helper.navigate(pageFactory);
|
||||
TKUnit.assert(newPage.isLoaded, "The page should be loaded here.");
|
||||
TKUnit.assert((<any>newPage).customCodeLoaded, "Parse should resolve exports from custom code file.");
|
||||
try {
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
helper.assertViewBackgroundColor(newPage.content, "#008000");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldFindEventHandlersInExports() {
|
||||
@@ -274,7 +234,7 @@ export function test_parse_ShouldFindEventHandlersInExports() {
|
||||
});
|
||||
page._emit("loaded");
|
||||
|
||||
TKUnit.assert(loaded, "Parse should find event handlers in exports.");
|
||||
TKUnit.assertTrue(loaded, "Parse should find event handlers in exports.");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldFindEventHandlersWithOnInExports() {
|
||||
@@ -286,7 +246,7 @@ export function test_parse_ShouldFindEventHandlersWithOnInExports() {
|
||||
});
|
||||
page._emit("loaded");
|
||||
|
||||
TKUnit.assert(loaded, "Parse should find event handlers in exports.");
|
||||
TKUnit.assertTrue(loaded, "Parse should find event handlers in exports.");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldSetGridAttachedProperties() {
|
||||
@@ -295,16 +255,16 @@ export function test_parse_ShouldSetGridAttachedProperties() {
|
||||
var child = grid.getChildAt(0);
|
||||
|
||||
var col = gridLayoutModule.GridLayout.getColumn(child);
|
||||
TKUnit.assert(col === 2, "Expected result for grid column: 2; Actual result: " + col + ";");
|
||||
TKUnit.assertEqual(col, 2, "Expected result for grid column: 2; Actual result: " + col + ";");
|
||||
|
||||
var row = gridLayoutModule.GridLayout.getRow(child);
|
||||
TKUnit.assert(row === 1, "Expected result for grid row: 1; Actual result: " + row + ";");
|
||||
TKUnit.assertEqual(row, 1, "Expected result for grid row: 1; Actual result: " + row + ";");
|
||||
|
||||
var colSpan = gridLayoutModule.GridLayout.getColumnSpan(child);
|
||||
TKUnit.assert(colSpan === 4, "Expected result for grid column span: 4; Actual result: " + colSpan + ";");
|
||||
TKUnit.assertEqual(colSpan, 4, "Expected result for grid column span: 4; Actual result: " + colSpan + ";");
|
||||
|
||||
var rowSpan = gridLayoutModule.GridLayout.getRowSpan(child);
|
||||
TKUnit.assert(rowSpan === 3, "Expected result for grid row span: 3; Actual result: " + rowSpan + ";");
|
||||
TKUnit.assertEqual(rowSpan, 3, "Expected result for grid row span: 3; Actual result: " + rowSpan + ";");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldSetCanvasAttachedProperties() {
|
||||
@@ -313,23 +273,23 @@ export function test_parse_ShouldSetCanvasAttachedProperties() {
|
||||
var child = grid.getChildAt(0);
|
||||
|
||||
var left = absoluteLayoutModule.AbsoluteLayout.getLeft(child);
|
||||
TKUnit.assert(left === 1, "Expected result for canvas left: 1; Actual result: " + left + ";");
|
||||
TKUnit.assertEqual(left, 1, "Expected result for canvas left: 1; Actual result: " + left + ";");
|
||||
|
||||
var top = absoluteLayoutModule.AbsoluteLayout.getTop(child);
|
||||
TKUnit.assert(top === 2, "Expected result for canvas top: 2; Actual result: " + top + ";");
|
||||
TKUnit.assertEqual(top, 2, "Expected result for canvas top: 2; Actual result: " + top + ";");
|
||||
};
|
||||
|
||||
export function test_parse_ShouldParseNumberProperties() {
|
||||
var p = <Page>builder.parse("<Page width='100' />");
|
||||
|
||||
TKUnit.assert(p.width === 100, "Expected result: 100; Actual result: " + p.width + "; type: " + typeof (p.width));
|
||||
TKUnit.assertEqual(p.width, 100, "Expected result: 100; Actual result: " + p.width + "; type: " + typeof (p.width));
|
||||
};
|
||||
|
||||
export function test_parse_ShouldParseBooleanProperties() {
|
||||
var p = <Page>builder.parse("<Page><Switch checked='true' /></Page>");
|
||||
var sw = <switchModule.Switch>p.content;
|
||||
|
||||
TKUnit.assert(sw.checked === true, "Expected result: true; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
TKUnit.assertTrue(sw.checked, "Expected result: true; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
};
|
||||
|
||||
export function test_parse_ShouldParseBooleanPropertiesIgnoreCase() {
|
||||
@@ -343,7 +303,7 @@ export function test_parse_ShouldParseBooleanPropertiesIgnoreCaseInverted() {
|
||||
var p = <Page>builder.parse("<Page><TextField editable='False' /></Page>");
|
||||
var tf = <textFieldModule.TextField>p.content;
|
||||
|
||||
TKUnit.assert(tf.editable === false, "Expected result: false; Actual result: " + tf.editable + "; type: " + typeof (tf.editable));
|
||||
TKUnit.assertFalse(tf.editable, "Expected result: false; Actual result: " + tf.editable + "; type: " + typeof (tf.editable));
|
||||
};
|
||||
|
||||
export function test_parse_ShouldParsePlatformSpecificProperties() {
|
||||
@@ -351,9 +311,9 @@ export function test_parse_ShouldParsePlatformSpecificProperties() {
|
||||
var tf = <textFieldModule.TextField>p.content;
|
||||
|
||||
if (platform.device.os === platform.platformNames.ios) {
|
||||
TKUnit.assert(tf.editable === false, "Expected result: false; Actual result: " + tf.editable + "; type: " + typeof (tf.editable));
|
||||
TKUnit.assertFalse(tf.editable, "Expected result: false; Actual result: " + tf.editable + "; type: " + typeof (tf.editable));
|
||||
} else {
|
||||
TKUnit.assert(tf.editable === true, "Expected result: true; Actual result: " + tf.editable + "; type: " + typeof (tf.editable));
|
||||
TKUnit.assertTrue(tf.editable, "Expected result: true; Actual result: " + tf.editable + "; type: " + typeof (tf.editable));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -383,7 +343,7 @@ export function test_parse_ShouldParseBindings() {
|
||||
p.bindingContext = { myProp: true };
|
||||
var sw = <switchModule.Switch>p.content;
|
||||
|
||||
TKUnit.assert(sw.checked === true, "Expected result: true; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
TKUnit.assertTrue(sw.checked, "Expected result: true; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
};
|
||||
|
||||
export function test_parse_ShouldParseBindingsWithObservable() {
|
||||
@@ -393,11 +353,11 @@ export function test_parse_ShouldParseBindingsWithObservable() {
|
||||
p.bindingContext = obj;
|
||||
var sw = <switchModule.Switch>p.content;
|
||||
|
||||
TKUnit.assert(sw.checked === true, "Expected result: true; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
TKUnit.assertTrue(sw.checked, "Expected result: true; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
|
||||
obj.set("myProp", false);
|
||||
|
||||
TKUnit.assert(sw.checked === false, "Expected result: false; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
TKUnit.assertFalse(sw.checked, "Expected result: false; Actual result: " + sw.checked + "; type: " + typeof (sw.checked));
|
||||
};
|
||||
|
||||
export function test_parse_ShouldParseBindingsToEvents() {
|
||||
@@ -592,68 +552,48 @@ export function test_parse_ShouldParseCustomComponentWithoutXmlInListViewTemplat
|
||||
var p = <Page>builder.parse('<Page xmlns:customControls="xml-declaration/mymodule"><ListView items="{{ items }}" itemLoading="{{ itemLoading }}"><ListView.itemTemplate><customControls:MyControl /></ListView.itemTemplate></ListView></Page>');
|
||||
|
||||
function testAction(views: Array<viewModule.View>) {
|
||||
var ctrl;
|
||||
|
||||
var obj = new observable.Observable();
|
||||
let ctrl;
|
||||
let obj = new observable.Observable();
|
||||
obj.set("items", [1]);
|
||||
obj.set("itemLoading", function (args: listViewModule.ItemEventData) {
|
||||
ctrl = args.view
|
||||
});
|
||||
p.bindingContext = obj;
|
||||
|
||||
TKUnit.wait(0.2);
|
||||
|
||||
TKUnit.waitUntilReady(() => ctrl);
|
||||
TKUnit.assert(ctrl instanceof myCustomControlWithoutXml.MyControl, "Expected result: custom control is defined!; Actual result: " + ctrl);
|
||||
};
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
|
||||
try {
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
|
||||
export function test_parse_ShouldParseNestedListViewInListViewTemplate() {
|
||||
var p = <Page>builder.parse('<Page xmlns="http://schemas.nativescript.org/tns.xsd"><ListView items="{{ items }}" itemLoading="{{ itemLoading }}"><ListView.itemTemplate><ListView items="{{ subItems }}" /></ListView.itemTemplate></ListView></Page>');
|
||||
|
||||
function testAction(views: Array<viewModule.View>) {
|
||||
var ctrl;
|
||||
|
||||
var obj = new observable.Observable();
|
||||
let ctrl;
|
||||
let obj = new observable.Observable();
|
||||
obj.set("items", [{ subItems: [1] }]);
|
||||
obj.set("itemLoading", function (args: listViewModule.ItemEventData) {
|
||||
ctrl = args.view
|
||||
});
|
||||
p.bindingContext = obj;
|
||||
|
||||
TKUnit.wait(0.2);
|
||||
|
||||
TKUnit.waitUntilReady(() => ctrl);
|
||||
TKUnit.assert(ctrl instanceof listViewModule.ListView, "Expected result: ListView!; Actual result: " + ctrl);
|
||||
};
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
|
||||
try {
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
|
||||
export function test_parse_ShouldEvaluateEventBindingExpressionInListViewTemplate() {
|
||||
var p = <Page>builder.parse('<Page xmlns="http://schemas.nativescript.org/tns.xsd"><ListView items="{{ items }}" itemLoading="{{ itemLoading }}"><ListView.itemTemplate><SegmentedBar items="{{ $parents[\'ListView\'].items }}" selectedIndexChanged="{{ $parents[\'ListView\'].changed }}" /></ListView.itemTemplate></ListView></Page>');
|
||||
|
||||
function testAction(views: Array<viewModule.View>) {
|
||||
var ctrl: segmentedBar.SegmentedBar;
|
||||
var changed;
|
||||
|
||||
var obj = new observable.Observable();
|
||||
let ctrl: segmentedBar.SegmentedBar = null;
|
||||
let changed;
|
||||
let obj = new observable.Observable();
|
||||
obj.set("items", [1, 2, 3]);
|
||||
|
||||
obj.set("itemLoading", function (args: listViewModule.ItemEventData) {
|
||||
ctrl = <segmentedBar.SegmentedBar>args.view
|
||||
});
|
||||
@@ -663,22 +603,14 @@ export function test_parse_ShouldEvaluateEventBindingExpressionInListViewTemplat
|
||||
});
|
||||
|
||||
p.bindingContext = obj;
|
||||
|
||||
TKUnit.wait(0.2);
|
||||
|
||||
TKUnit.waitUntilReady(() => ctrl !== null);
|
||||
ctrl.selectedIndex = 1;
|
||||
|
||||
TKUnit.assert(changed, "Expected result: true!; Actual result: " + changed);
|
||||
};
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
|
||||
try {
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
|
||||
export function test_parse_NestedRepeaters() {
|
||||
@@ -725,13 +657,7 @@ export function test_parse_NestedRepeaters() {
|
||||
};
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
|
||||
try {
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
|
||||
export function test_parseSpansDirectlyOnLabel() {
|
||||
@@ -744,12 +670,7 @@ export function test_parseSpansDirectlyOnLabel() {
|
||||
}
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
try {
|
||||
testAction([p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p]);
|
||||
}
|
||||
|
||||
export function test_parseSpansDirectlyOnButton() {
|
||||
@@ -762,12 +683,7 @@ export function test_parseSpansDirectlyOnButton() {
|
||||
}
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
try {
|
||||
testAction([p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p]);
|
||||
}
|
||||
|
||||
export function test_parseFormattedStringWithoutFormattedText() {
|
||||
@@ -780,12 +696,7 @@ export function test_parseFormattedStringWithoutFormattedText() {
|
||||
}
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
try {
|
||||
testAction([p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p]);
|
||||
}
|
||||
|
||||
export function test_parseFormattedStringFullSyntax() {
|
||||
@@ -798,12 +709,7 @@ export function test_parseFormattedStringFullSyntax() {
|
||||
}
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
try {
|
||||
testAction([p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p]);
|
||||
}
|
||||
|
||||
export function test_parseSpansDirectlyToFormattedString() {
|
||||
@@ -816,12 +722,7 @@ export function test_parseSpansDirectlyToFormattedString() {
|
||||
}
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
try {
|
||||
testAction([p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p]);
|
||||
}
|
||||
|
||||
export function test_searchbar_donotcrash_whentext_isempty() {
|
||||
@@ -844,7 +745,7 @@ export function test_parse_template_property() {
|
||||
var templateView = <TemplateView>page.getViewById("template-view");
|
||||
TKUnit.assert(templateView, "Expected TemplateView.");
|
||||
TKUnit.assert(templateView.template, "Expected the template of the TemplateView to be defined");
|
||||
|
||||
|
||||
TKUnit.assertEqual(templateView.getChildrenCount(), 0, "Expected TemplateView initially to have no children.");
|
||||
templateView.parseTemplate();
|
||||
TKUnit.assertEqual(templateView.getChildrenCount(), 1, "Expected TemplateView initially to have 1 child.");
|
||||
@@ -855,46 +756,46 @@ export function test_parse_template_property() {
|
||||
|
||||
export function test_NonExistingElementError() {
|
||||
var basePath = "xml-declaration/";
|
||||
var expectedErrorStart =
|
||||
"Building UI from XML. @file:///app/" + basePath + "errors/non-existing-element.xml:11:5\n" +
|
||||
" ↳Module 'ui/unicorn' not found for element 'Unicorn'.";
|
||||
var message;
|
||||
try {
|
||||
builder.load(__dirname + "/errors/non-existing-element.xml");
|
||||
} catch(e) {
|
||||
message = e.message;
|
||||
}
|
||||
TKUnit.assertEqual(message.substr(0, expectedErrorStart.length), expectedErrorStart, "Expected load to throw, and the message to start with specific string");
|
||||
var expectedErrorStart =
|
||||
"Building UI from XML. @file:///app/" + basePath + "errors/non-existing-element.xml:11:5\n" +
|
||||
" ↳Module 'ui/unicorn' not found for element 'Unicorn'.";
|
||||
var message;
|
||||
try {
|
||||
builder.load(__dirname + "/errors/non-existing-element.xml");
|
||||
} catch (e) {
|
||||
message = e.message;
|
||||
}
|
||||
TKUnit.assertEqual(message.substr(0, expectedErrorStart.length), expectedErrorStart, "Expected load to throw, and the message to start with specific string");
|
||||
}
|
||||
|
||||
export function test_NonExistingElementInTemplateError() {
|
||||
var basePath = "xml-declaration/";
|
||||
var expectedErrorStart =
|
||||
"Building UI from XML. @file:///app/" + basePath + "errors/non-existing-element-in-template.xml:14:17\n" +
|
||||
" ↳Module 'ui/unicorn' not found for element 'Unicorn'.";
|
||||
var message;
|
||||
var expectedErrorStart =
|
||||
"Building UI from XML. @file:///app/" + basePath + "errors/non-existing-element-in-template.xml:14:17\n" +
|
||||
" ↳Module 'ui/unicorn' not found for element 'Unicorn'.";
|
||||
var message;
|
||||
var page = builder.load(__dirname + "/errors/non-existing-element-in-template.xml");
|
||||
TKUnit.assert(view, "Expected the xml to generate a page");
|
||||
var templateView = <TemplateView>page.getViewById("template-view");
|
||||
TKUnit.assert(templateView, "Expected the page to have a TemplateView with 'temaplte-view' id.");
|
||||
|
||||
try {
|
||||
|
||||
try {
|
||||
templateView.parseTemplate();
|
||||
} catch(e) {
|
||||
message = e.message;
|
||||
}
|
||||
TKUnit.assertEqual(message.substr(0, expectedErrorStart.length), expectedErrorStart, "Expected load to throw, and the message to start with specific string");
|
||||
} catch (e) {
|
||||
message = e.message;
|
||||
}
|
||||
TKUnit.assertEqual(message.substr(0, expectedErrorStart.length), expectedErrorStart, "Expected load to throw, and the message to start with specific string");
|
||||
}
|
||||
|
||||
export function test_EventInTemplate() {
|
||||
var pageCode = require("./template-builder-tests/event-in-template");
|
||||
|
||||
|
||||
var notified = false;
|
||||
pageCode.test = (args) => {
|
||||
notified = true;
|
||||
}
|
||||
|
||||
var page = builder.load(__dirname + "/template-builder-tests/event-in-template.xml", pageCode);
|
||||
|
||||
var page = builder.load(__dirname + "/template-builder-tests/event-in-template.xml", pageCode);
|
||||
TKUnit.assert(view, "Expected the xml to generate a page");
|
||||
var templateView = <TemplateView>page.getViewById("template-view");
|
||||
TKUnit.assert(templateView, "Expected the page to have a TemplateView with 'temaplte-view' id.");
|
||||
@@ -906,19 +807,19 @@ export function test_EventInTemplate() {
|
||||
eventName: "test",
|
||||
object: childTemplateView
|
||||
});
|
||||
|
||||
|
||||
TKUnit.assert(notified, "Expected the child to raise the test event.");
|
||||
}
|
||||
|
||||
export function test_EventInCodelessFragment() {
|
||||
var pageCode = require("./template-builder-tests/event-in-codeless-fragment");
|
||||
|
||||
|
||||
var notified = false;
|
||||
pageCode.test = (args) => {
|
||||
notified = true;
|
||||
}
|
||||
|
||||
var page = builder.load(__dirname + "/template-builder-tests/event-in-codeless-fragment.xml", pageCode);
|
||||
|
||||
var page = builder.load(__dirname + "/template-builder-tests/event-in-codeless-fragment.xml", pageCode);
|
||||
TKUnit.assert(view, "Expected the xml to generate a page");
|
||||
var templateView = <TemplateView>page.getViewById("template-view");
|
||||
TKUnit.assert(templateView, "Expected the page to have a TemplateView with 'temaplte-view' id.");
|
||||
@@ -930,27 +831,27 @@ export function test_EventInCodelessFragment() {
|
||||
eventName: "test",
|
||||
object: childTemplateView
|
||||
});
|
||||
|
||||
|
||||
TKUnit.assert(notified, "Expected the child to raise the test event.");
|
||||
}
|
||||
|
||||
export function test_tabview_selectedindex_will_work_from_xml() {
|
||||
var p = <Page>builder.parse(
|
||||
'<Page>' +
|
||||
'<TabView selectedIndex= "1">' +
|
||||
'<TabView.items>'+
|
||||
'<TabViewItem title="First">' +
|
||||
'<TabViewItem.view>' +
|
||||
'<Label text="First View" />' +
|
||||
'</TabViewItem.view>' +
|
||||
'</TabViewItem>' +
|
||||
'<TabViewItem title= "Second">' +
|
||||
'<TabViewItem.view>' +
|
||||
'<Label text="Second View" />' +
|
||||
'</TabViewItem.view>' +
|
||||
'</TabViewItem>' +
|
||||
'</TabView.items>' +
|
||||
'</TabView>' +
|
||||
'<TabView selectedIndex= "1">' +
|
||||
'<TabView.items>' +
|
||||
'<TabViewItem title="First">' +
|
||||
'<TabViewItem.view>' +
|
||||
'<Label text="First View" />' +
|
||||
'</TabViewItem.view>' +
|
||||
'</TabViewItem>' +
|
||||
'<TabViewItem title= "Second">' +
|
||||
'<TabViewItem.view>' +
|
||||
'<Label text="Second View" />' +
|
||||
'</TabViewItem.view>' +
|
||||
'</TabViewItem>' +
|
||||
'</TabView.items>' +
|
||||
'</TabView>' +
|
||||
'</Page>');
|
||||
|
||||
function testAction(views: Array<viewModule.View>) {
|
||||
@@ -962,17 +863,11 @@ export function test_tabview_selectedindex_will_work_from_xml() {
|
||||
};
|
||||
|
||||
helper.navigate(function () { return p; });
|
||||
|
||||
try {
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
testAction([p.content, p]);
|
||||
}
|
||||
|
||||
export function test_TabViewHasCorrectParentChain() {
|
||||
var testFunc = function(page: Page) {
|
||||
var testFunc = function (page: Page) {
|
||||
TKUnit.assert(page.bindingContext.get("testPassed"));
|
||||
}
|
||||
var moduleName = __dirname.substr(fs.knownFolders.currentApp().path.length);
|
||||
@@ -990,4 +885,4 @@ export function test_hasSourceCodeLocations() {
|
||||
var label = page.getViewById("label");
|
||||
var labelSource = Source.get(label);
|
||||
TKUnit.assertEqual(labelSource.toString(), "file:///app/" + basePath + "examples/test-page.xml:3:5");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user