mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-18 13:51:27 +08:00
286 lines
11 KiB
TypeScript
286 lines
11 KiB
TypeScript
import TKUnit = require("../../TKUnit");
|
|
import commonTests = require("./view-tests-common");
|
|
import helper = require("../../ui/helper");
|
|
import view = require("ui/core/view");
|
|
import button = require("ui/button");
|
|
import types = require("utils/types");
|
|
import stack = require("ui/layouts/stack-layout");
|
|
import labelModule = require("ui/label");
|
|
|
|
import trace = require("trace");
|
|
// enable the trace, it is disabled by default
|
|
trace.enable();
|
|
|
|
// merge the exports of the view-tests-common file with the exports of this file
|
|
declare var exports;
|
|
require("utils/module-merge").merge(commonTests, exports);
|
|
|
|
export var test_event_onAttached_IsRaised = function () {
|
|
var listener = new Listener("_onAttached");
|
|
trace.addEventListener(listener);
|
|
|
|
var test = function (views: Array<view.View>) {
|
|
TKUnit.assertEqual(listener.receivedEvents.length, views.length, "onAttached calls");
|
|
|
|
var i;
|
|
for (i = 0; i < listener.receivedEvents.length; i++) {
|
|
TKUnit.assertEqual(listener.receivedEvents[i].sender, views[i]);
|
|
TKUnit.assertEqual(listener.receivedEvents[i].name, "_onAttached");
|
|
}
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
export var test_event_onAttached_IsRaised_WhenAttached_Dynamically = function () {
|
|
var test = function (views: Array<view.View>) {
|
|
// add new button to the visual tree and ensure its _onAttached event
|
|
var listener = new Listener("_onAttached");
|
|
trace.addEventListener(listener);
|
|
|
|
var newButton = new button.Button();
|
|
(<stack.StackLayout>views[1]).addChild(newButton);
|
|
|
|
TKUnit.assertEqual(listener.receivedEvents.length, 1);
|
|
TKUnit.assertEqual(listener.receivedEvents[0].name, "_onAttached");
|
|
TKUnit.assertEqual(listener.receivedEvents[0].sender, newButton);
|
|
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
}
|
|
|
|
export var test_event_onContextChanged_IsRaised_WhenAttached = function () {
|
|
var listener = new Listener("_onContextChanged");
|
|
trace.addEventListener(listener);
|
|
|
|
var test = function (views: Array<view.View>) {
|
|
TKUnit.assertEqual(listener.receivedEvents.length, views.length, "onContextChanged calls");
|
|
|
|
var i;
|
|
for (i = 0; i < listener.receivedEvents.length; i++) {
|
|
TKUnit.assertEqual(listener.receivedEvents[i].sender, views[i]);
|
|
TKUnit.assertEqual(listener.receivedEvents[i].name, "_onContextChanged");
|
|
}
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
export var test_event_onContextChanged_IsRaised_WhenAttached_Dynamically = function () {
|
|
var test = function (views: Array<view.View>) {
|
|
// add new button to the visual tree and ensure its _onContextChanged event
|
|
var listener = new Listener("_onContextChanged");
|
|
trace.addEventListener(listener);
|
|
|
|
var newButton = new button.Button();
|
|
(<stack.StackLayout>views[1]).addChild(newButton);
|
|
|
|
TKUnit.assertEqual(listener.receivedEvents.length, 1);
|
|
TKUnit.assertEqual(listener.receivedEvents[0].name, "_onContextChanged");
|
|
TKUnit.assertEqual(listener.receivedEvents[0].sender, newButton);
|
|
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
}
|
|
|
|
export var test_event_onDetached_IsRaised = function () {
|
|
var cachedViews;
|
|
var listener: Listener;
|
|
|
|
var test = function (views: Array<view.View>) {
|
|
cachedViews = views;
|
|
|
|
// once the above method completes goBack on the current frame is called which will detach the tested views
|
|
listener = new Listener("_onDetached");
|
|
trace.addEventListener(listener);
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
|
|
TKUnit.assertEqual(listener.receivedEvents.length, cachedViews.length, "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--) {
|
|
TKUnit.assertEqual(listener.receivedEvents[i].sender, cachedViews[j]);
|
|
TKUnit.assertEqual(listener.receivedEvents[i].name, "_onDetached");
|
|
}
|
|
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
export var test_event_onDetached_IsRaised_WhenRemoved_Dynamically = function () {
|
|
var test = function (views: Array<view.View>) {
|
|
// add new button to the visual tree and ensure its _onContextChanged event
|
|
var listener = new Listener("_onDetached");
|
|
trace.addEventListener(listener);
|
|
|
|
// remove the button from the layout
|
|
(<stack.StackLayout>views[1]).removeChild(views[2]);
|
|
|
|
TKUnit.assertEqual(listener.receivedEvents.length, 1);
|
|
TKUnit.assertEqual(listener.receivedEvents[0].name, "_onDetached");
|
|
TKUnit.assertEqual(listener.receivedEvents[0].sender, views[2]);
|
|
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
}
|
|
|
|
export var test_events_onDetachedAndRemovedFromNativeVisualTree_AreRaised_WhenNavigateBack = function () {
|
|
var onDetachedListener = new Listener("_onDetached");
|
|
var removeFromNativeVisualTreeListener = new Listener("childInLayoutRemovedFromNativeVisualTree");
|
|
|
|
var test = function (views: Array<view.View>) {
|
|
trace.addEventListener(onDetachedListener);
|
|
trace.addEventListener(removeFromNativeVisualTreeListener);
|
|
};
|
|
|
|
var assert = function (views: Array<view.View>) {
|
|
// one for the Button, one for the StackLayout and one for the Page.
|
|
|
|
TKUnit.assertEqual(onDetachedListener.receivedEvents.length, 3, "onDetached calls");
|
|
|
|
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].name, "_onDetached");
|
|
TKUnit.assertEqual(onDetachedListener.receivedEvents[0].sender, views[2]);
|
|
TKUnit.assertEqual(onDetachedListener.receivedEvents[1].sender, views[1]);
|
|
TKUnit.assertEqual(onDetachedListener.receivedEvents[2].sender, views[0]);
|
|
|
|
// 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, views[1]);
|
|
|
|
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[1].name, "childInLayoutRemovedFromNativeVisualTree");
|
|
TKUnit.assertEqual(removeFromNativeVisualTreeListener.receivedEvents[1].sender, views[2]);
|
|
|
|
trace.removeEventListener(onDetachedListener);
|
|
trace.removeEventListener(removeFromNativeVisualTreeListener);
|
|
};
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton_NavigatedBack(test, assert);
|
|
}
|
|
|
|
export var test_cachedProperties_Applied_WhenNativeWidged_IsCreated = function () {
|
|
var test = function (views: Array<view.View>) {
|
|
var newButton = new button.Button();
|
|
newButton.text = "Test Button";
|
|
TKUnit.assert(types.isUndefined(newButton.android));
|
|
|
|
(<stack.StackLayout>views[1]).addChild(newButton);
|
|
|
|
TKUnit.assert(types.isDefined(newButton.android));
|
|
// TODO: There is currently an issue with the getText conversion to JavaScript string
|
|
TKUnit.assertEqual(newButton.android.getText(), "Test Button");
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
}
|
|
|
|
export var test_event_onContextChanged_IsNotRaised_WhenAttachedToSameContext = function () {
|
|
var test = function (views: Array<view.View>) {
|
|
var listener = new Listener("_onContextChanged");
|
|
trace.addEventListener(listener);
|
|
|
|
views[2]._onAttached(views[0]._context);
|
|
|
|
TKUnit.assertEqual(listener.receivedEvents.length, 0, "listener.receivedEvents.length");
|
|
|
|
trace.removeEventListener(listener);
|
|
}
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
}
|
|
|
|
class Listener implements trace.EventListener {
|
|
public filter: string;
|
|
public receivedEvents: Array<{ sender: Object; name: string }> = [];
|
|
|
|
constructor(filter: string) {
|
|
this.filter = filter;
|
|
}
|
|
|
|
public on(object: Object, name: string) {
|
|
this.receivedEvents.push({ sender: object, name: name });
|
|
}
|
|
|
|
public reset() {
|
|
this.receivedEvents = [];
|
|
}
|
|
}
|
|
|
|
export var test_StylePropertiesDefaultValuesCache = function () {
|
|
var testValue = 35;
|
|
|
|
var test = function (views: Array<view.View>) {
|
|
var testLabel = new labelModule.Label();
|
|
var testButton = new button.Button();
|
|
|
|
var stack = <stack.StackLayout>views[1];
|
|
|
|
stack.addChild(testLabel);
|
|
stack.addChild(testButton);
|
|
|
|
var defaultLabelFontSize = (<android.widget.TextView>(testLabel.android)).getTextSize();
|
|
var defaultButtonFontSize = (<android.widget.Button>(testButton.android)).getTextSize();
|
|
|
|
testLabel.style.fontSize = testValue;
|
|
testButton.style.fontSize = testValue;
|
|
|
|
var actualLabelTextSize = (<android.widget.TextView>(testLabel.android)).getTextSize();
|
|
var actualButtonTextSize = (<android.widget.Button>(testButton.android)).getTextSize();
|
|
|
|
TKUnit.assert(actualLabelTextSize !== defaultLabelFontSize, "Label text size should be different from default!");
|
|
TKUnit.assert(actualButtonTextSize !== defaultButtonFontSize, "Button text size should be different from default!");
|
|
|
|
testLabel.style.fontSize = undefined;
|
|
testButton.style.fontSize = undefined;
|
|
|
|
actualLabelTextSize = (<android.widget.TextView>(testLabel.android)).getTextSize();
|
|
actualButtonTextSize = (<android.widget.Button>(testButton.android)).getTextSize();
|
|
|
|
TKUnit.assert(actualLabelTextSize === defaultLabelFontSize, "Label text size should be default!");
|
|
TKUnit.assert(actualButtonTextSize === defaultButtonFontSize, "Button text size should be default!");
|
|
};
|
|
|
|
helper.do_PageTest_WithStackLayout_AndButton(test);
|
|
}
|
|
|
|
export function getNativeBorderWidth(v: view.View): number {
|
|
var bkg = <any>(<android.view.View>v.android).getBackground();
|
|
|
|
return bkg ? bkg.borderWidth : -1;
|
|
}
|
|
|
|
export function getNativeCornerRadius(v: view.View): number {
|
|
var bkg = <any>(<android.view.View>v.android).getBackground();
|
|
|
|
return bkg ? bkg.cornerRadius : -1;
|
|
}
|
|
|
|
export function checkNativeBorderColor(v: view.View): boolean {
|
|
var bkg = <any>(<android.view.View>v.android).getBackground();
|
|
|
|
return v.borderColor && bkg && bkg.borderColor === v.borderColor.android;
|
|
}
|
|
|
|
export function checkNativeBackgroundColor(v: view.View): boolean {
|
|
var bkg = <any>(<android.view.View>v.android).getBackground();
|
|
|
|
return v.backgroundColor && bkg && bkg.backgroundColor === v.backgroundColor.android;
|
|
}
|
|
|
|
export function checkNativeBackgroundImage(v: view.View): boolean {
|
|
var bkg = <any>(<android.view.View>v.android).getBackground();
|
|
|
|
return bkg && bkg.bitmap !== undefined;
|
|
} |