Skip to content

Commit 6028514

Browse files
authored
Merge pull request #279 from NativeScript/hdeshev/appium
Add appium E2E tests for the router
2 parents ab3ff84 + b3b8a8e commit 6028514

26 files changed

+411
-321
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,4 @@ before_script:
3939
script:
4040
- tns platform add android
4141
- tns test android --emulator --justlaunch
42+
- npm run appium-android

nativescript-angular/application.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import "zone.js/dist/zone-node"
33

44
import 'reflect-metadata';
55
import './polyfills/array';
6+
import {rendererLog, rendererError} from "./trace";
67
import {SanitizationService} from '@angular/core/src/security';
78
import {isPresent, Type, print} from '@angular/core/src/facade/lang';
89
import {ReflectiveInjector, reflector, coreLoadAndBootstrap, createPlatform,
@@ -107,18 +108,18 @@ export function nativeScriptBootstrap(appComponentType: any, customProviders?: P
107108
let onLoadedHandler = function(args) {
108109
page.off('loaded', onLoadedHandler);
109110
//profiling.stop('application-start');
110-
console.log('Page loaded');
111+
rendererLog('Page loaded');
111112

112113
//profiling.start('ng-bootstrap');
113-
console.log('BOOTSTRAPPING...');
114+
rendererLog('BOOTSTRAPPING...');
114115
bootstrap(appComponentType, customProviders).then((appRef) => {
115116
//profiling.stop('ng-bootstrap');
116-
console.log('ANGULAR BOOTSTRAP DONE.');
117+
rendererLog('ANGULAR BOOTSTRAP DONE.');
117118
resolve(appRef);
118119
}, (err) => {
119-
console.log('ERROR BOOTSTRAPPING ANGULAR');
120+
rendererError('ERROR BOOTSTRAPPING ANGULAR');
120121
let errorMessage = err.message + "\n\n" + err.stack;
121-
console.log(errorMessage);
122+
rendererError(errorMessage);
122123

123124
let view = new TextView();
124125
view.text = errorMessage;

nativescript-angular/directives/list-view-comp.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {View} from 'ui/core/view';
2222
import {NgView} from '../view-util';
2323
import {ObservableArray} from 'data/observable-array';
2424
import {LayoutBase} from 'ui/layouts/layout-base';
25+
import {rendererLog, rendererError} from "../trace";
2526
const NG_VIEW = "_ngViewRef";
2627

2728
export class ListItemContext {
@@ -98,15 +99,15 @@ export class ListViewComponent {
9899
let viewRef: EmbeddedViewRef<ListItemContext>;
99100

100101
if (args.view) {
101-
console.log("ListView.onItemLoading: " + index + " - Reusing existing view");
102+
rendererLog("ListView.onItemLoading: " + index + " - Reusing existing view");
102103
viewRef = args.view[NG_VIEW];
103104
// getting angular view from original element (in cases when ProxyViewContainer is used NativeScript internally wraps it in a StackLayout)
104105
if (!viewRef) {
105106
viewRef = (args.view._subViews && args.view._subViews.length > 0) ? args.view._subViews[0][NG_VIEW] : undefined;
106107
}
107108
}
108109
else {
109-
console.log("ListView.onItemLoading: " + index + " - Creating view from template");
110+
rendererLog("ListView.onItemLoading: " + index + " - Creating view from template");
110111
viewRef = this.loader.createEmbeddedView(this.itemTemplate, new ListItemContext(), 0);
111112
args.view = getSingleViewFromViewRef(viewRef);
112113
args.view[NG_VIEW] = viewRef;

nativescript-angular/directives/tab-view.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {ElementRef, Directive, Input, TemplateRef, ViewContainerRef} from "@angular/core";
22
import {TabView, TabViewItem} from "ui/tab-view";
33
import * as utils from '../common/utils';
4+
import {rendererLog, rendererError} from "../trace";
45
import {isBlank} from '@angular/core/src/facade/lang';
56

67
@Directive({
@@ -31,7 +32,7 @@ export class TabViewDirective {
3132
ngAfterViewInit() {
3233
this.viewInitialized = true;
3334
debugger;
34-
console.log("this._selectedIndex: " + this._selectedIndex);
35+
rendererLog("this._selectedIndex: " + this._selectedIndex);
3536
if (!isBlank(this._selectedIndex)) {
3637
this.tabView.selectedIndex = this._selectedIndex;
3738
}

nativescript-angular/dom_adapter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {SanitizationService} from '@angular/core/src/security';
33
import {Parse5DomAdapter} from '@angular/platform-server';
44
import {setRootDomAdapter} from '@angular/platform-browser/src/dom/dom_adapter';
55
import {Type} from '@angular/core/src/facade/lang';
6+
import {rendererLog, rendererError} from "./trace";
67

78
export enum SecurityContext {
89
NONE,
@@ -35,7 +36,7 @@ export class NativeScriptSanitizationService extends SanitizationService {
3536

3637
export class NativeScriptDomAdapter extends Parse5DomAdapter {
3738
static makeCurrent() {
38-
console.log("Setting DOM");
39+
rendererLog("Setting DOM");
3940
setRootDomAdapter(new NativeScriptDomAdapter());
4041
}
4142

nativescript-angular/renderer.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ import {View} from "ui/core/view";
1212
import * as application from "application";
1313
import {topmost} from 'ui/frame';
1414
import {Page} from 'ui/page';
15-
import {traceLog, ViewUtil, NgView} from "./view-util";
15+
import {ViewUtil, NgView} from "./view-util";
16+
import {rendererLog as traceLog} from "./trace";
1617
import {escapeRegexSymbols} from "utils/utils";
1718
import { Device } from "platform";
1819

19-
export { rendererTraceCategory } from "./view-util";
20-
2120
@Injectable()
2221
export class NativeScriptRootRenderer implements RootRenderer {
2322
private _rootView: View = null;

nativescript-angular/router/common.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

nativescript-angular/router/ns-location-strategy.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import application = require("application");
22
import { LocationStrategy } from '@angular/common';
33
import { NgZone, ApplicationRef, Inject, forwardRef } from '@angular/core';
4-
import { log } from "./common";
4+
import { routerLog } from "../trace";
55
import { topmost } from "ui/frame";
66

77
interface LocationState {
@@ -20,18 +20,18 @@ export class NSLocationStrategy extends LocationStrategy {
2020
private _isPageNavigatingForward: boolean = false;
2121

2222
path(): string {
23-
log("NSLocationStrategy.path()");
23+
routerLog("NSLocationStrategy.path()");
2424
let state = this.peekState();
2525
return state ? state.url : "/";
2626
}
2727

2828
prepareExternalUrl(internal: string): string {
29-
log("NSLocationStrategy.prepareExternalUrl() internal: " + internal);
29+
routerLog("NSLocationStrategy.prepareExternalUrl() internal: " + internal);
3030
return internal;
3131
}
3232

3333
pushState(state: any, title: string, url: string, queryParams: string): void {
34-
log(`NSLocationStrategy.pushState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`);
34+
routerLog(`NSLocationStrategy.pushState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`);
3535

3636
let isNewPage = this._isPageNavigatingForward;
3737
this._isPageNavigatingForward = false;
@@ -46,12 +46,12 @@ export class NSLocationStrategy extends LocationStrategy {
4646
}
4747

4848
replaceState(state: any, title: string, url: string, queryParams: string): void {
49-
log(`NSLocationStrategy.replaceState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`);
49+
routerLog(`NSLocationStrategy.replaceState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`);
5050
throw new Error("Not implemented");
5151
}
5252

5353
forward(): void {
54-
log("NSLocationStrategy.forward");
54+
routerLog("NSLocationStrategy.forward");
5555
throw new Error("Not implemented");
5656
}
5757

@@ -65,30 +65,30 @@ export class NSLocationStrategy extends LocationStrategy {
6565
state = this.states.pop();
6666
count++;
6767
}
68-
log("NSLocationStrategy.back() while navigating back. States popped: " + count)
68+
routerLog("NSLocationStrategy.back() while navigating back. States popped: " + count)
6969
this.callPopState(state, true);
7070
} else {
7171
let state = this.peekState();
7272
if (state.isPageNavigation) {
7373
// This was a page navigation - so navigate through frame.
74-
log("NSLocationStrategy.back() while not navigating back but top state is page - will call frame.goback()")
74+
routerLog("NSLocationStrategy.back() while not navigating back but top state is page - will call frame.goback()")
7575
topmost().goBack();
7676
} else {
7777
// Nested navigation - just pop the state
78-
log("NSLocationStrategy.back() while not navigating back but top state is not page - just pop")
78+
routerLog("NSLocationStrategy.back() while not navigating back but top state is not page - just pop")
7979
this.callPopState(this.states.pop(), true);
8080
}
8181
}
8282

8383
}
8484

8585
onPopState(fn: (_: any) => any): void {
86-
log("NSLocationStrategy.onPopState");
86+
routerLog("NSLocationStrategy.onPopState");
8787
this.popStateCallbacks.push(fn);
8888
}
8989

9090
getBaseHref(): string {
91-
log("NSLocationStrategy.getBaseHref()");
91+
routerLog("NSLocationStrategy.getBaseHref()");
9292
return "";
9393
}
9494

@@ -108,15 +108,15 @@ export class NSLocationStrategy extends LocationStrategy {
108108

109109
// Methods for syncing with page navigation in PageRouterOutlet
110110
public beginBackPageNavigation() {
111-
log("NSLocationStrategy.startGoBack()");
111+
routerLog("NSLocationStrategy.startGoBack()");
112112
if (this._isPageNavigationgBack) {
113113
throw new Error("Calling startGoBack while going back.")
114114
}
115115
this._isPageNavigationgBack = true;
116116
}
117117

118118
public finishBackPageNavigation() {
119-
log("NSLocationStrategy.finishBackPageNavigation()");
119+
routerLog("NSLocationStrategy.finishBackPageNavigation()");
120120
if (!this._isPageNavigationgBack) {
121121
throw new Error("Calling endGoBack while not going back.")
122122
}
@@ -128,7 +128,7 @@ export class NSLocationStrategy extends LocationStrategy {
128128
}
129129

130130
public navigateToNewPage() {
131-
log("NSLocationStrategy.navigateToNewPage()");
131+
routerLog("NSLocationStrategy.navigateToNewPage()");
132132
if (this._isPageNavigatingForward) {
133133
throw new Error("Calling navigateToNewPage while already navigating to new page.")
134134
}

nativescript-angular/router/ns-router-link.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Directive, Input} from '@angular/core';
22
import {isString} from '@angular/core/src/facade/lang';
33
import {Router, Instruction} from '@angular/router-deprecated';
4-
import { log } from "./common";
4+
import {routerLog} from "../trace";
55

66
/**
77
* The NSRouterLink directive lets you link to specific parts of your app.
@@ -55,7 +55,7 @@ export class NSRouterLink {
5555
}
5656

5757
onTap(): void {
58-
log("NSRouterLink onTap() instruction: " + JSON.stringify(this._navigationInstruction))
58+
routerLog("NSRouterLink onTap() instruction: " + JSON.stringify(this._navigationInstruction))
5959
this._router.navigateByInstruction(this._navigationInstruction);
6060
}
6161
}

nativescript-angular/router/ns-router.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {NSLocationStrategy} from './ns-location-strategy';
55
import {ROUTER_PROVIDERS} from '@angular/router-deprecated';
66
import {LocationStrategy} from '@angular/common';
77
import {provide} from '@angular/core';
8-
import { CATEGORY } from "./common";
8+
export {routerTraceCategory} from "../trace";
99

1010
export const NS_ROUTER_PROVIDERS: any[] = [
1111
ROUTER_PROVIDERS,
@@ -17,5 +17,3 @@ export const NS_ROUTER_DIRECTIVES: Type[] = [
1717
NSRouterLink,
1818
PageRouterOutlet
1919
];
20-
21-
export const routerTraceCategory = CATEGORY;

nativescript-angular/router/page-router-outlet.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {topmost} from "ui/frame";
1919
import {Page, NavigatedData} from "ui/page";
2020
import {DEVICE} from "../platform-providers";
2121
import {Device} from "platform";
22-
import {log} from "./common";
22+
import {routerLog} from "../trace";
2323
import {NSLocationStrategy} from "./ns-location-strategy";
2424
import {DetachedLoader} from "../common/detached-loader";
2525
import {ViewUtil} from "../view-util";
@@ -106,7 +106,7 @@ export class PageRouterOutlet extends RouterOutlet {
106106
}
107107

108108
private activateOnGoBack(nextInstruction: ComponentInstruction, previousInstruction: ComponentInstruction): Promise<any> {
109-
log("PageRouterOutlet.activate() - Back naviation, so load from cache: " + nextInstruction.componentType.name);
109+
routerLog("PageRouterOutlet.activate() - Back naviation, so load from cache: " + nextInstruction.componentType.name);
110110

111111
this.location.finishBackPageNavigation();
112112

@@ -134,14 +134,14 @@ export class PageRouterOutlet extends RouterOutlet {
134134
];
135135

136136
if (this.isInitalPage) {
137-
log("PageRouterOutlet.activate() inital page - just load component: " + componentType.name);
137+
routerLog("PageRouterOutlet.activate() inital page - just load component: " + componentType.name);
138138
this.isInitalPage = false;
139139
resultPromise = this.compiler.resolveComponent(componentType).then((componentFactory) => {
140140
const childInjector = ReflectiveInjector.resolveAndCreate(providersArray, this.containerRef.parentInjector);
141141
return this.containerRef.createComponent(componentFactory, this.containerRef.length, childInjector, null);
142142
});
143143
} else {
144-
log("PageRouterOutlet.activate() forward navigation - create detached loader in the loader container: " + componentType.name);
144+
routerLog("PageRouterOutlet.activate() forward navigation - create detached loader in the loader container: " + componentType.name);
145145

146146
const page = new Page();
147147
providersArray.push(provide(Page, { useValue: page }));
@@ -215,7 +215,7 @@ export class PageRouterOutlet extends RouterOutlet {
215215
}
216216

217217
if (this.location.isPageNavigatingBack()) {
218-
log("PageRouterOutlet.deactivate() while going back - should destroy: " + instruction.componentType.name)
218+
routerLog("PageRouterOutlet.deactivate() while going back - should destroy: " + instruction.componentType.name)
219219
return next.then((_) => {
220220
const popedItem = this.refCache.pop();
221221
const popedRef = popedItem.componentRef;
@@ -275,7 +275,7 @@ export class PageRouterOutlet extends RouterOutlet {
275275
StringMapWrapper.equals(nextInstruction.params, this.currentInstruction.params));
276276
}
277277

278-
log("PageRouterOutlet.routerCanReuse(): " + result);
278+
routerLog("PageRouterOutlet.routerCanReuse(): " + result);
279279
return PromiseWrapper.resolve(result);
280280
}
281281

@@ -311,6 +311,6 @@ export class PageRouterOutlet extends RouterOutlet {
311311
}
312312

313313
private log(method: string, nextInstruction: ComponentInstruction) {
314-
log("PageRouterOutlet." + method + " isBack: " + this.location.isPageNavigatingBack() + " nextUrl: " + nextInstruction.urlPath);
314+
routerLog("PageRouterOutlet." + method + " isBack: " + this.location.isPageNavigatingBack() + " nextUrl: " + nextInstruction.urlPath);
315315
}
316316
}

nativescript-angular/trace.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {write, categories, messageType} from "trace";
2+
3+
export const rendererTraceCategory = "ns-renderer";
4+
export const routerTraceCategory = "ns-router";
5+
6+
export function rendererLog(msg): void {
7+
write(msg, rendererTraceCategory);
8+
}
9+
10+
export function rendererError(message: string): void {
11+
write(message, rendererTraceCategory, messageType.error);
12+
}
13+
14+
export function routerLog(message: string): void {
15+
write(message, routerTraceCategory);
16+
}
17+
18+
export function styleError(message: string): void {
19+
write(message, categories.Style, messageType.error);
20+
}

nativescript-angular/view-util.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,19 @@ import * as styleProperty from "ui/styling/style-property";
99
import {StyleProperty, getPropertyByName, withStyleProperty} from "ui/styling/style-property";
1010
import {ValueSource} from "ui/core/dependency-observable";
1111
import { ActionBar, ActionItem, NavigationButton } from "ui/action-bar";
12-
import trace = require("trace");
1312
import {device, platformNames, Device} from "platform";
13+
import {rendererLog as traceLog, styleError} from "./trace";
1414

1515
const IOS_PREFX: string = "@ios:";
1616
const ANDROID_PREFX: string = "@android:";
1717
const whiteSpaceSplitter = /\s+/;
1818

19-
export const rendererTraceCategory = "ns-renderer";
2019
export type ViewExtensions = ViewExtensions;
2120
export type NgView = NgView;
2221
export type NgLayoutBase = LayoutBase & ViewExtensions;
2322
export type NgContentView = ContentView & ViewExtensions;
2423
export type BeforeAttachAction = (view: View) => void;
2524

26-
export function traceLog(msg) {
27-
trace.write(msg, rendererTraceCategory);
28-
}
29-
3025
export function isView(view: any): view is NgView {
3126
return view instanceof View;
3227
}
@@ -298,7 +293,7 @@ export class ViewUtil {
298293
try {
299294
view.style._setValue(property, value, ValueSource.Local);
300295
} catch (ex) {
301-
trace.write("Error setting property: " + property.name + " view: " + view + " value: " + value + " " + ex, trace.categories.Style, trace.messageType.error);
296+
styleError("Error setting property: " + property.name + " view: " + view + " value: " + value + " " + ex);
302297
}
303298
}
304299

0 commit comments

Comments
 (0)