1
- import { assert } from "./test-config" ;
2
- import {
3
- ElementRef ,
4
- Component
5
- } from '@angular/core' ;
6
- import { TestApp } from "./test-app" ;
7
- import { device , platformNames } from "platform" ;
8
- const IS_IOS = ( device . os === platformNames . ios ) ;
1
+ import { assert } from "./test-config" ;
2
+ import { Component , Input , AfterViewInit } from '@angular/core' ;
3
+ import { TestApp } from "./test-app" ;
4
+
5
+ // import trace = require("trace");
6
+ // trace.setCategories("ns-list-view, " + trace.categories.Navigation);
7
+ // trace.enable();
9
8
10
9
class DataItem {
11
10
constructor ( public id : number , public name : string ) { }
12
11
}
13
12
13
+ const ITEMS = [
14
+ new DataItem ( 0 , "data item 0" ) ,
15
+ new DataItem ( 1 , "data item 1" ) ,
16
+ new DataItem ( 2 , "data item 2" ) ,
17
+ ] ;
18
+
19
+
20
+ let testTemplates : { first : number , second : number } ;
21
+
14
22
@Component ( {
15
23
selector : 'list-view-setupItemView' ,
16
24
template : `
17
- <StackLayout>
18
- <ListView height="200" [items]="myItems" (setupItemView)="onSetupItemView($event)">
19
- <template let-item="item" let-i="index" let-odd="odd" let-even="even">
20
- <StackLayout [class.odd]="odd" [class.even]="even">
21
- <Label [text]='"index: " + i'></Label>
22
- <Label [text]='"[" + item.id +"] " + item.name'></Label>
23
- </StackLayout>
25
+ <GridLayout>
26
+ <ListView [items]="myItems" (setupItemView)="onSetupItemView($event)">
27
+ <template let-item="item">
28
+ <Label [text]='"[" + item.id +"] " + item.name'></Label>
24
29
</template>
25
30
</ListView>
26
- </StackLayout >
31
+ </GridLayout >
27
32
`
28
33
} )
29
34
export class TestListViewComponent {
30
- public myItems : Array < DataItem > ;
31
- public counter : number ;
35
+ public myItems : Array < DataItem > = ITEMS ;
36
+ public counter : number = 0 ;
37
+ onSetupItemView ( args ) { this . counter ++ ; }
38
+ }
32
39
33
- constructor ( public elementRef : ElementRef ) {
34
- this . counter = 0 ;
35
- this . myItems = [ ] ;
36
- for ( var i = 0 ; i < 2 ; i ++ ) {
37
- this . myItems . push ( new DataItem ( i , "data item " + i ) ) ;
40
+ @Component ( {
41
+ selector : 'item-component' ,
42
+ template : `<Label text="template"></Label>`
43
+ } )
44
+ export class ItemTemplateComponent {
45
+ @Input ( ) set templateName ( value : any ) {
46
+ if ( value === "first" ) {
47
+ testTemplates . first = testTemplates . first + 1 ;
48
+ } else if ( value === "second" ) {
49
+ testTemplates . second = testTemplates . second + 1 ;
50
+ } else {
51
+ throw new Error ( "Unexpected templateName: " + value ) ;
38
52
}
39
53
}
54
+ }
40
55
41
- onSetupItemView ( args ) {
42
- this . counter ++ ;
56
+ @Component ( {
57
+ selector : 'list-with-template-selector' ,
58
+ template : `
59
+ <GridLayout>
60
+ <ListView [items]="myItems" [itemTemplateSelector]="templateSelector">
61
+ <template nsTemplateKey="first">
62
+ <item-component templateName="first"></item-component>
63
+ </template>
64
+
65
+ <template nsTemplateKey="second" let-item="item">
66
+ <item-component templateName="second"></item-component>
67
+ </template>
68
+ </ListView>
69
+ </GridLayout>
70
+ `
71
+ } )
72
+ export class TestListViewSelectorComponent {
73
+ public myItems : Array < DataItem > = ITEMS ;
74
+ public templateSelector = ( item : DataItem , index : number , items : any ) => {
75
+ return ( item . id % 2 === 0 ) ? "first" : "second" ;
43
76
}
77
+ constructor ( ) { testTemplates = { first : 0 , second : 0 } ; }
44
78
}
45
79
46
80
describe ( 'ListView-tests' , ( ) => {
47
81
let testApp : TestApp = null ;
48
82
49
83
before ( ( ) => {
50
- return TestApp . create ( [ ] , [ TestListViewComponent ] ) . then ( ( app ) => {
84
+ return TestApp . create ( [ ] , [ TestListViewComponent , TestListViewSelectorComponent , ItemTemplateComponent ] ) . then ( ( app ) => {
51
85
testApp = app ;
52
- } )
86
+ } ) ;
53
87
} ) ;
54
88
55
89
after ( ( ) => {
@@ -64,11 +98,21 @@ describe('ListView-tests', () => {
64
98
return testApp . loadComponent ( TestListViewComponent ) . then ( ( componentRef ) => {
65
99
const component = componentRef . instance ;
66
100
setTimeout ( ( ) => {
67
- console . log ( "component: " + component ) ;
68
- assert . equal ( component . counter , 2 ) ;
101
+ assert . equal ( component . counter , 3 ) ;
102
+ done ( ) ;
103
+ } , 1000 ) ;
104
+ } )
105
+ . catch ( done ) ;
106
+ } ) ;
107
+
108
+
109
+ it ( 'itemTemplateSelector selects templates' , ( done ) => {
110
+ return testApp . loadComponent ( TestListViewSelectorComponent ) . then ( ( componentRef ) => {
111
+ setTimeout ( ( ) => {
112
+ assert . deepEqual ( testTemplates , { first : 2 , second : 1 } ) ;
69
113
done ( ) ;
70
114
} , 1000 ) ;
71
115
} )
72
- . catch ( done ) ;
116
+ . catch ( done ) ;
73
117
} ) ;
74
118
} ) ;
0 commit comments