Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: pkg/mdv/test/node_bindings_test.dart

Issue 34453003: Rename mdv -> template_binding, remove experiemntal apis from dart:html (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/mdv/test/mdv_test_utils.dart ('k') | pkg/mdv/test/template_element_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library node_bindings_test;
6
7 import 'dart:html';
8 import 'package:mdv/mdv.dart' as mdv;
9 import 'package:observe/observe.dart' show toObservable;
10 import 'package:unittest/html_config.dart';
11 import 'package:unittest/unittest.dart';
12 import 'mdv_test_utils.dart';
13
14 // Note: this file ported from
15 // https://github.com/toolkitchen/mdv/blob/master/tests/node_bindings.js
16
17 main() {
18 mdv.initialize();
19 useHtmlConfiguration();
20 group('Node Bindings', nodeBindingTests);
21 }
22
23 nodeBindingTests() {
24 var testDiv;
25
26 setUp(() {
27 document.body.append(testDiv = new DivElement());
28 });
29
30 tearDown(() {
31 testDiv.remove();
32 testDiv = null;
33 });
34
35 observeTest('Text', () {
36 var text = new Text('hi');
37 var model = toObservable({'a': 1});
38 text.bind('text', model, 'a');
39 expect(text.text, '1');
40
41 model['a'] = 2;
42 performMicrotaskCheckpoint();
43 expect(text.text, '2');
44
45 text.unbind('text');
46 model['a'] = 3;
47 performMicrotaskCheckpoint();
48 expect(text.text, '2');
49
50 // TODO(rafaelw): Throw on binding to unavailable property?
51 });
52
53 observeTest('Element', () {
54 var element = new DivElement();
55 var model = toObservable({'a': 1, 'b': 2});
56 element.bind('hidden?', model, 'a');
57 element.bind('id', model, 'b');
58
59 expect(element.attributes, contains('hidden'));
60 expect(element.attributes['hidden'], '');
61 expect(element.id, '2');
62
63 model['a'] = null;
64 performMicrotaskCheckpoint();
65 expect(element.attributes, isNot(contains('hidden')),
66 reason: 'null is false-y');
67
68 model['a'] = false;
69 performMicrotaskCheckpoint();
70 expect(element.attributes, isNot(contains('hidden')));
71
72 model['a'] = 'foo';
73 model['b'] = 'x';
74 performMicrotaskCheckpoint();
75 expect(element.attributes, contains('hidden'));
76 expect(element.attributes['hidden'], '');
77 expect(element.id, 'x');
78 });
79
80 inputTextAreaValueTest(String tagName) {
81 var el = new Element.tag(tagName);
82 testDiv.nodes.add(el);
83 var model = toObservable({'x': 42});
84 el.bind('value', model, 'x');
85 expect(el.value, '42');
86
87 model['x'] = 'Hi';
88 expect(el.value, '42', reason: 'changes delivered async');
89 performMicrotaskCheckpoint();
90 expect(el.value, 'Hi');
91
92 el.value = 'changed';
93 dispatchEvent('input', el);
94 expect(model['x'], 'changed');
95
96 el.unbind('value');
97
98 el.value = 'changed again';
99 dispatchEvent('input', el);
100 expect(model['x'], 'changed');
101
102 el.bind('value', model, 'x');
103 model['x'] = null;
104 performMicrotaskCheckpoint();
105 expect(el.value, '');
106 }
107
108 observeTest('Input.value', () => inputTextAreaValueTest('input'));
109 observeTest('TextArea.value', () => inputTextAreaValueTest('textarea'));
110
111 observeTest('Radio Input', () {
112 var input = new InputElement();
113 input.type = 'radio';
114 var model = toObservable({'x': true});
115 input.bind('checked', model, 'x');
116 expect(input.checked, true);
117
118 model['x'] = false;
119 expect(input.checked, true);
120 performMicrotaskCheckpoint();
121 expect(input.checked, false,reason: 'model change should update checked');
122
123 input.checked = true;
124 dispatchEvent('change', input);
125 expect(model['x'], true, reason: 'input.checked should set model');
126
127 input.unbind('checked');
128
129 input.checked = false;
130 dispatchEvent('change', input);
131 expect(model['x'], true,
132 reason: 'disconnected binding should not fire');
133 });
134
135 observeTest('Checkbox Input', () {
136 var input = new InputElement();
137 testDiv.append(input);
138 input.type = 'checkbox';
139 var model = toObservable({'x': true});
140 input.bind('checked', model, 'x');
141 expect(input.checked, true);
142
143 model['x'] = false;
144 expect(input.checked, true, reason: 'changes delivered async');
145 performMicrotaskCheckpoint();
146 expect(input.checked, false);
147
148 input.click();
149 expect(model['x'], true);
150 performMicrotaskCheckpoint();
151
152 input.click();
153 expect(model['x'], false);
154 });
155 }
OLDNEW
« no previous file with comments | « pkg/mdv/test/mdv_test_utils.dart ('k') | pkg/mdv/test/template_element_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698