10000 formatted text fix (#3531) · Cayan/NativeScript@3770f7e · GitHub
[go: up one dir, main page]

Skip to content

Commit 3770f7e

Browse files
author
Hristo Hristov
authored
formatted text fix (NativeScript#3531)
* Fix formattedText implementation for iOS Fix typeof undefined checks Add slow tests message Improve tests speed * fix tslint reduce transitions duration in test * waitUntilReady will throw if timeout fix tests that needs to wait without throwing improve test speed
1 parent 8de9ea7 commit 3770f7e

27 files changed

+364
-323
lines changed

apps/app/gallery-app/animations/configurable.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ export function pageLoaded(args: observable.EventData) {
2727
button2 = page.getViewById<buttonModule.Button>("button2");
2828
button3 = page.getViewById<buttonModule.Button>("button3");
2929

30-
3130
trace.enable();
3231
trace.addCategories(trace.categories.concat(trace.categories.Animation));
3332
}

tests/app/TKUnit.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -363,19 +363,14 @@ export function assertThrows(testFunc: () => void, assertMessage?: string, expec
363363
export var wait = function (seconds: number) {
364364
waitUntilReady(function () {
365365
return false;
366-
}, seconds);
366+
}, seconds, false);
367367
};
368368

369-
export var waitUntilReady = function (isReady: () => boolean, timeoutSec?: number) {
369+
export var waitUntilReady = function (isReady: () => boolean, timeoutSec: number = 20, shouldThrow: boolean = true) {
370370
if (!isReady) {
371371
return;
372372
}
373373

374-
if (!timeoutSec) {
375-
// TODO: How much should be the default timeout in seconds?
376-
timeoutSec = 20;
377-
}
378-
379374
if (Application.ios) {
380375
var waitTime = 20 / 1000;
381376
var totalWaitTime = 0;
@@ -388,11 +383,15 @@ export var waitUntilReady = function (isReady: () => boolean, timeoutSec?: numbe
388383

389384
totalWaitTime += waitTime;
390385
if (timeoutSec && totalWaitTime >= timeoutSec) {
391-
break;
386+
if (shouldThrow) {
387+
throw new Error("waitUntilReady Timeout.");
388+
} else {
389+
break;
390+
}
392391
}
393392
}
394393
} else if (Application.android) {
395-
doModalAndroid(isReady, timeoutSec);
394+
doModalAndroid(isReady, timeoutSec, shouldThrow);
396395
}
397396
};
398397

@@ -434,7 +433,7 @@ var prepareModal = function () {
434433
prepared = true;
435434
}
436435

437-
var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number) {
436+
var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number, shouldThrow: boolean = true) {
438437
if (!quitLoop) {
439438
return;
440439
}
@@ -443,9 +442,11 @@ var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number) {
443442

444443
var queue = android.os.Looper.myQueue();
445444

446-
var quit = false;
445+
let quit = false;
446+
let timeout = false;
447447
timer.setTimeout(function () {
448448
quit = true;
449+
timeout = true;
449450
}, timeoutSec * 1000);
450451

451452
var msg;
@@ -465,6 +466,10 @@ var doModalAndroid = function (quitLoop: () => boolean, timeoutSec: number) {
465466
}
466467
}
467468

469+
if (shouldThrow && timeout) {
470+
throw new Error("waitUntilReady Timeout.");
471+
}
472+
468473
if (!quit && quitLoop()) {
469474
quit = true;
470475
}

tests/app/application-settings-tests.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
var appSettings = require("application-settings");
33
// << application-settings-require
44

5-
var TKUnit = require("./TKUnit");
5+
import * as TKUnit from "./TKUnit";
66

77
var stringKey:string = "stringKey";
88
var boolKey: string = "boolKey";
@@ -56,10 +56,10 @@ export var testDefaultsWithNoDefaultValueProvided = function () {
5656
var defaultValue = appSettings.getString("noStringKey");
5757
// will return undefined if there is no value for "noStringKey"
5858
// << application-settings-nodefault
59-
TKUnit.assert("undefined" === typeof defaultValue, "Default string value is not undefined");
59+
TKUnit.assertEqual(defaultValue, undefined, "Default string value is not undefined");
6060

61-
TKUnit.assert("undefined" === typeof appSettings.getBoolean(noBoolKey), "Default boolean value is not undefined");
62-
TKUnit.assert("undefined" === typeof appSettings.getNumber(noNumberKey), "Default number value is not undefined");
61+
TKUnit.assertEqual(appSettings.getBoolean(noBoolKey) , undefined, "Default boolean value is not undefined");
62+
TKUnit.assertEqual(appSettings.getNumber(noNumberKey), undefined, "Default number value is not undefined");
6363
};
6464

6565
// <snippet module="application-settings" title="application-settings">

tests/app/image-source-tests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function testFromUrl(done) {
3636
//completed = true;
3737
result = res;
3838
try {
39-
TKUnit.assert(typeof result !== "undefined", "Image not downloaded");
39+
TKUnit.assertNotEqual(result, undefined, "Image not downloaded");
4040
TKUnit.assert(result.height > 0, "Image not downloaded");
4141
done(null);
4242
}

tests/app/navigation/transition-tests.ts

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
import * as helper from "../ui/helper";
33
import * as platform from "platform";
44
import * as trace from "trace";
5-
import {Color} from "color";
6-
import {NavigationEntry, NavigationTransition, topmost as topmostFrame, traceEnabled} from "ui/frame";
7-
import {Page} from "ui/page";
8-
import {AnimationCurve} from "ui/enums"
5+
import { Color } from "color";
6+
import { NavigationEntry, NavigationTransition, topmost as topmostFrame, traceEnabled } from "ui/frame";
7+
import { Page } from "ui/page";
8+
import { AnimationCurve } from "ui/enums"
99

1010
function _testTransition(navigationTransition: NavigationTransition) {
1111
var testId = `Transition[${JSON.stringify(navigationTransition)}]`;
@@ -57,25 +57,17 @@ export var test_Transitions = function () {
5757
}
5858
}
5959
transitions = transitions.concat(["fade", "flip", "slide"]);
60-
var durations = [undefined, 500];
60+
var durations = [undefined, 10];
6161
var curves = [undefined, AnimationCurve.easeIn];
6262

6363
// Built-in transitions
64-
var t, d, c;
65-
var tlen = transitions.length;
66-
var dlen = durations.length;
67-
var clen = curves.length;
68-
for (t = 0; t < tlen; t++) {
69-
for (d = 0; d < dlen; d++) {
70-
for (c = 0; c < clen; c++) {
71-
_testTransition({
72-
name: transitions[t],
73-
duration: durations[d],
74-
curve: curves[c]
75-
});
76-
}
77-
}
78-
}
64+
transitions.forEach(name => {
65+
durations.forEach(duration => {
66+
curves.forEach(curve => {
67+
_testTransition({ name, duration, curve });
68+
});
69+
});
70+
});
7971

8072
// Custom transition
8173
if (testCustomTransition) {

tests/app/testRunner.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -126,35 +126,39 @@ var testsQueue = new Array<TestInfo>();
126126

127127
function printRunTestStats() {
128128
let testFileContent = new Array<string>();
129-
let testCases = new Array<string>();
129+
const testCases = new Array<string>();
130130

131-
var j;
132131
var failedTestCount = 0;
133132
var failedTestInfo = [];
133+
const slowTests = new Array<string>();
134134

135135
let allTests = testsQueue.filter(t => t.isTest);
136136

137137
testFileContent.push("<testsuites>");
138138

139-
for (j = 0; j < allTests.length; j++) {
140-
let testName = allTests[j].testName;
141-
let duration = (allTests[j].duration / 1000).toFixed(2);
139+
allTests.forEach((testCase, i, arr) => {
140+
let testName = testCase.testName;
141+
let duration = (testCase.duration / 1000).toFixed(2);
142142

143-
if (!allTests[j].isPassed) {
143+
if (!testCase.isPassed) {
144144
failedTestCount++;
145145

146-
let errorMessage = allTests[j].errorMessage;
146+
let errorMessage = testCase.errorMessage;
147147

148-
failedTestInfo.push(allTests[j].testName + " FAILED: " + allTests[j].errorMessage);
148+
failedTestInfo.push(testCase.testName + " FAILED: " + testCase.errorMessage);
149149

150150
testCases.push(`<testcase classname="${platform.device.os}" name="${testName}" time="${duration}"><failure type="exceptions.AssertionError"><![CDATA[${errorMessage}]]></failure></testcase>`);
151151

152152
} else {
153153
testCases.push(`<testcase classname="${platform.device.os}" name="${testName}" time="${duration}"></testcase>`);
154154
}
155-
}
156155

157-
var totalTime = (TKUnit.time() - startTime).toFixed(2);
156+
if (testCase.duration > 500) {
157+
slowTests.push(`${testCase.testName}: ${duration}s`);
158+
}
159+
});
160+
161+
const totalTime = (TKUnit.time() - startTime).toFixed(2);
158162

159163
testFileContent.push(`<testsuite name="NativeScript Tests" timestamp="${new Date()}" hostname="hostname" time="${totalTime}" errors="0" tests="${allTests.length}" skipped="0" failures="${failedTestCount}">`);
160164

@@ -165,11 +169,10 @@ function printRunTestStats() {
165169
`DURATION: ${totalTime} ms\n`;
166170
TKUnit.write(finalMessage, messageType.info);
167171

168-
for (j = 0; j < failedTestInfo.length; j++) {
169-
let failureMessage = failedTestInfo[j];
170-
TKUnit.write(failureMessage, messageType.error);
171-
finalMessage += "\n" + failureMessage;
172-
}
172+
failedTestInfo.forEach((message, i, arr) => {
173+
TKUnit.write(message, messageType.error);
174+
finalMessage += "\n" + message;
175+
});
173176

174177
// DO NOT CHANGE THE FIRST ROW! Used as an indicator for test run pass detection.
175178
TKUnit.write(`Tests EOF!`, messageType.info);
@@ -180,7 +183,7 @@ function printRunTestStats() {
180183
let testFilePath: string;
181184
let testResultsFileName = "test-results.xml";
182185
if (platform.isIOS) {
183-
testFilePath = fs.path.join(fs.knownFolders.documents().path, testResultsFileName);
186+
testFilePath = fs.path.join(fs.knownFolders.documents().path, testResultsFileName);
184187
} else {
185188
testFilePath = fs.path.join(android.os.Environment.getExternalStorageDirectory().getAbsolutePath(), "Documents", testResultsFileName);
186189
}
@@ -189,6 +192,12 @@ function printRunTestStats() {
189192
testFile.writeTextSync(testFileContent.join(""));
190193

191194
finalMessage += "\n" + "Test results: " + testFilePath;
195+
finalMessage += "\n" + "----------------- ";
196+
finalMessage += "\n" + "Slow tests: ";
197+
slowTests.forEach((message, i, arr) => {
198+
TKUnit.write(message, messageType.error);
199+
finalMessage += "\n" + message;
200+
});
192201

193202
let stack = new StackLayout();
194203
let btn = new Button();
@@ -259,7 +268,6 @@ export var runAll = function (testSelector?: string) {
259268
var test = testModule.createTestCase ? testModule.createTestCase() : testModule;
260269
test.name = name;
261270

262-
263271
testsQueue.push(new TestInfo(startLog, test));
264272

265273
if (test.setUpModule) {

0 commit comments

Comments
 (0)
0