forked from NativeScript/NativeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathview-tests.android.ts
More file actions
256 lines (190 loc) · 10.1 KB
/
view-tests.android.ts
File metadata and controls
256 lines (190 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
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);
}