@Component({ selector: 'sortable', inputs: ['items'], template: ` <div><a id="#test" (click)="sort()">sort</a></div> <ng-content></ng-content> `})export class Sortable { public items: any[] private reverse: boolean = false
sort() { this.items.sort((a, b) => { return this.reverse ? 1 : -1 return this.reverse ? -1: 1 } else { return 0 } }) this.reverse = !this.reverse }}import {Component, OnInit} from 'angular2/core'import {bootstrap} from 'angular2/platform/browser'import {Sortable} from '../sortable'
@Component({ selector: 'test-app', directives: [Sortable], template: ` <div> <sortable [items]="items"> <div *ngFor="#item of items">{{item.name}}</div> </sortable> </div> `})class TestApp { public items: string[]
constructor() { this.items = [{name: 'c'}, {name: 'a'}, {name: 'b'}] }}
describe('Sortable', () => { let app: TestApp
beforeEach(done => { bootstrap(TestApp) .then(result => result.instance) .then(instance => { app = instance done() }) })
it('#sort', () => { // How to generate click? expect(app.items).toEqual([{name: 'c'}, {name: 'b'}, {name: 'a'}]) })})import {Component, OnInit} from 'angular2/core'import {NgFor} from 'angular2/src/common/directives/ng_for'import {bootstrap} from 'angular2/platform/browser'import {Sortable} from '../sortable'
import { iit, it, ddescribe, describe, expect, injectAsync, TestComponentBuilder, beforeEachProviders} from 'angular2/testing';
import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'BrowserDomAdapter.makeCurrent()
@Component({ directives: [NgFor, Sortable], template: ` <div> <sortable [items]="items"> <div *ngFor="#item of items">{{item.name}}</div> </sortable> </div> `})class TestApp { public items: any[]
constructor() { this.items = [{name: 'c'}, {name: 'a'}, {name: 'b'}] }}
describe('Sortable', () => { it('first spec', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb.createAsync(TestApp) .then((fixture) => { expect(true).toEqual(true) })
}))
it('second spec', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb.createAsync(TestApp) .then((fixture) => { expect(false).toEqual(false) })
}))})
import {Component, OnInit} from 'angular2/core'import {NgFor} from 'angular2/src/common/directives/ng_for'import {Sortable} from '../sortable'
import { it, describe, expect, injectAsync, TestComponentBuilder,} from 'angular2/testing'
import {By} from 'angular2/platform/common_dom'
import {BrowserDomAdapter} from 'angular2/src/platform/browser/browser_adapter'BrowserDomAdapter.makeCurrent()
@Component({ directives: [NgFor, Sortable], template: ` <div> <sortable [items]="items" keys="name, sz: Size"> <div *ngFor="#item of items" class="item">{{item.name}}</div> </sortable> </div> `})class TestApp { public items: any[]
constructor() { this.items = [{name:'c', sz:2}, {name:'a', sz:1}, {name:'b', sz:3}, {name:'d'}] }}
var setupTestComponent = (fn) => injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb.createAsync(TestApp).then((tc) => { tc.detectChanges() fn(tc) })})
describe('Sortable', () => { it('renders children elements', setupTestComponent((tc) => { var items = tc.nativeElement.querySelectorAll('.item') expect(items.length).toEqual(4) expect($(items).text()).toEqual('cabd') }))
it('renders header links from keys', setupTestComponent((tc) => { var lis = tc.nativeElement.querySelectorAll('.sortable-header li') expect(lis.length).toEqual(2) expect($(lis).text()).toEqual('NameSize') }))
it('sort on click (descending order)', setupTestComponent((tc) => { tc.debugElement.query(By.css('.sortable-header li')).triggerEventHandler('click', null) tc.detectChanges()
var items = tc.nativeElement.querySelectorAll('.item') expect($(items).text()).toEqual('dcba') }))
it('reverse order on each subsequent click', setupTestComponent((tc) => { tc.debugElement.query(By.css('.sortable-header li')).triggerEventHandler('click', null) tc.debugElement.query(By.css('.sortable-header li')).triggerEventHandler('click', null) tc.detectChanges()
var items = tc.nativeElement.querySelectorAll('.item') expect($(items).text()).toEqual('abcd') }))})