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

Unified Diff: third_party/pkg/angular/test/directive/ng_model_spec.dart

Issue 1058283006: Update pubspecs and dependencies to get pkgbuild tests working. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 months 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 side-by-side diff with in-line comments
Download patch
Index: third_party/pkg/angular/test/directive/ng_model_spec.dart
diff --git a/third_party/pkg/angular/test/directive/ng_model_spec.dart b/third_party/pkg/angular/test/directive/ng_model_spec.dart
deleted file mode 100644
index 645e9c1a4c00823fca80d0d4f72d63e12d812471..0000000000000000000000000000000000000000
--- a/third_party/pkg/angular/test/directive/ng_model_spec.dart
+++ /dev/null
@@ -1,1054 +0,0 @@
-library ng_model_spec;
-
-import '../_specs.dart';
-import 'dart:html' as dom;
-
-void main() {
- describe('ng-model', () {
- TestBed _;
-
- beforeEach(module((Module module) {
- module..type(ControllerWithNoLove);
- }));
-
- beforeEach(inject((TestBed tb) => _ = tb));
-
- describe('type="text" like', () {
- it('should update input value from model', inject(() {
- _.compile('<input type="text" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = "misko"');
- expect((_.rootElement as dom.InputElement).value).toEqual('misko');
- }));
-
- it('should render null as the empty string', inject(() {
- _.compile('<input type="text" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.InputElement).value).toEqual('');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<input type="text" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = 'abc';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual('abc');
-
- inputElement.value = 'def';
- var input = probe.directive(InputTextLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual('def');
- }));
-
- it('should update model from the input value for type=number', inject(() {
- _.compile('<input type="number" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = '12';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual(12);
-
- inputElement.value = '14';
- var input = probe.directive(InputNumberLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual(14);
- }));
-
- it('should update input type=number to blank when model is null', inject(() {
- _.compile('<input type="number" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = '12';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual(12);
-
- _.rootScope.context['model'] = null;
- _.rootScope.apply();
- expect(inputElement.value).toEqual('');
- }));
-
- it('should write to input only if value is different', inject((Injector i, AstParser parser) {
- var scope = _.rootScope;
- var element = new dom.InputElement();
- NodeAttrs nodeAttrs = new NodeAttrs(new DivElement());
- nodeAttrs['ng-model'] = 'model';
- var model = new NgModel(scope, element, i.createChild([new Module()]), new NgNullForm(), parser, nodeAttrs);
- dom.querySelector('body').append(element);
- var input = new InputTextLikeDirective(element, model, scope);
-
- element
- ..value = 'abc'
- ..selectionStart = 1
- ..selectionEnd = 2;
-
- model.render('abc');
-
- expect(element.value).toEqual('abc');
- // No update. selectionStart/End is unchanged.
- expect(element.selectionStart).toEqual(1);
- expect(element.selectionEnd).toEqual(2);
-
- model.render('xyz');
-
- // Value updated. selectionStart/End changed.
- expect(element.value).toEqual('xyz');
- expect(element.selectionStart).toEqual(3);
- expect(element.selectionEnd).toEqual(3);
- }));
- });
-
- /* This function simulates typing the given text into the input
- * field. The text will be added wherever the insertion point
- * happens to be. This method has as side-effect to set the
- * focus on the input (without setting the focus the text
- * dispatch may not work).
- */
- void simulateTypingText(InputElement input, String text) {
- input..focus()..dispatchEvent(new TextEvent('textInput', data: text));
- }
-
- describe('type="number" like', () {
-
- it('should leave input unchanged when text does not represent a valid number', inject((Injector i) {
- var modelFieldName = 'modelForNumFromInvalid1';
- var element = _.compile('<input type="number" ng-model="$modelFieldName">');
- dom.querySelector('body').append(element);
-
- // This test will progressively enter the text '1e1'
- // '1' is a valid number.
- // '1e' is not a valid number.
- // '1e1' is again a valid number (with an exponent)
-
- simulateTypingText(element, '1');
- _.triggerEvent(element, 'change');
- expect(element.value).toEqual('1');
- expect(_.rootScope.context[modelFieldName]).toEqual(1);
-
- simulateTypingText(element, 'e');
- // Because the text is not a valid number, the element value is empty.
- expect(element.value).toEqual('');
- // When the input is invalid, the model is [double.NAN]:
- _.triggerEvent(element, 'change');
- expect(_.rootScope.context[modelFieldName].isNaN).toBeTruthy();
-
- simulateTypingText(element, '1');
- _.triggerEvent(element, 'change');
- expect(element.value).toEqual('1e1');
- expect(_.rootScope.context[modelFieldName]).toEqual(10);
- }));
-
- it('should not reformat user input to equivalent numeric representation', inject((Injector i) {
- var modelFieldName = 'modelForNumFromInvalid2';
- var element = _.compile('<input type="number" ng-model="$modelFieldName">');
- dom.querySelector('body').append(element);
-
- simulateTypingText(element, '1e-1');
- expect(element.value).toEqual('1e-1');
- expect(_.rootScope.context[modelFieldName]).toEqual(0.1);
- }));
-
- it('should update input value from model', inject(() {
- _.compile('<input type="number" ng-model="model">');
- _.rootScope.apply();
-
- _.rootScope.apply('model = 42');
- expect((_.rootElement as dom.InputElement).value).toEqual('42');
- }));
-
- it('should update input value from model for range inputs', inject(() {
- _.compile('<input type="range" ng-model="model">');
- _.rootScope.apply();
-
- _.rootScope.apply('model = 42');
- expect((_.rootElement as dom.InputElement).value).toEqual('42');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<input type="number" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = '42';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual(42);
-
- inputElement.value = '43';
- var input = probe.directive(InputNumberLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual(43);
- }));
-
- it('should update model to NaN from a blank input value', inject(() {
- _.compile('<input type="number" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = '';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model'].isNaN).toBeTruthy();
- }));
-
- it('should update model from the input value for range inputs', inject(() {
- _.compile('<input type="range" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = '42';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual(42);
-
- inputElement.value = '43';
- var input = probe.directive(InputNumberLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual(43);
- }));
-
- it('should update model to a native default value from a blank range input value', inject(() {
- _.compile('<input type="range" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = '';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toBeDefined();
- }));
-
- it('should render null as blank', inject(() {
- _.compile('<input type="number" ng-model="model">');
- _.rootScope.apply();
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.InputElement).value).toEqual('');
- }));
-
- });
-
- describe('type="password"', () {
- it('should update input value from model', inject(() {
- _.compile('<input type="password" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = "misko"');
- expect((_.rootElement as dom.InputElement).value).toEqual('misko');
- }));
-
- it('should render null as the empty string', inject(() {
- _.compile('<input type="password" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.InputElement).value).toEqual('');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<input type="password" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = 'abc';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual('abc');
-
- inputElement.value = 'def';
- var input = probe.directive(InputTextLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual('def');
-
- }));
-
- it('should write to input only if value is different', inject((Injector i, AstParser parser) {
- var scope = _.rootScope;
- var element = new dom.InputElement();
- NodeAttrs nodeAttrs = new NodeAttrs(new DivElement());
- nodeAttrs['ng-model'] = 'model';
- var model = new NgModel(scope, element, i.createChild([new Module()]), new NgNullForm(), parser, nodeAttrs);
- dom.querySelector('body').append(element);
- var input = new InputTextLikeDirective(element, model, scope);
-
- element
- ..value = 'abc'
- ..selectionStart = 1
- ..selectionEnd = 2;
-
- model.render('abc');
-
- expect(element.value).toEqual('abc');
- expect(element.selectionStart).toEqual(1);
- expect(element.selectionEnd).toEqual(2);
-
- model.render('xyz');
-
- expect(element.value).toEqual('xyz');
- expect(element.selectionStart).toEqual(3);
- expect(element.selectionEnd).toEqual(3);
- }));
- });
-
- describe('type="search"', () {
- it('should update input value from model', inject(() {
- _.compile('<input type="search" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = "misko"');
- expect((_.rootElement as dom.InputElement).value).toEqual('misko');
- }));
-
- it('should render null as the empty string', inject(() {
- _.compile('<input type="search" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.InputElement).value).toEqual('');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<input type="search" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = 'abc';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual('abc');
-
- inputElement.value = 'def';
- var input = probe.directive(InputTextLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual('def');
- }));
-
- it('should write to input only if value is different', inject((Injector i, AstParser parser) {
- var scope = _.rootScope;
- var element = new dom.InputElement();
- NodeAttrs nodeAttrs = new NodeAttrs(new DivElement());
- nodeAttrs['ng-model'] = 'model';
- var model = new NgModel(scope, element, i.createChild([new Module()]), new NgNullForm(), parser, nodeAttrs);
- dom.querySelector('body').append(element);
- var input = new InputTextLikeDirective(element, model, scope);
-
- element
- ..value = 'abc'
- ..selectionStart = 1
- ..selectionEnd = 2;
-
- model.render('abc');
-
- expect(element.value).toEqual('abc');
- // No update. selectionStart/End is unchanged.
- expect(element.selectionStart).toEqual(1);
- expect(element.selectionEnd).toEqual(2);
-
- model.render('xyz');
-
- // Value updated. selectionStart/End changed.
- expect(element.value).toEqual('xyz');
- expect(element.selectionStart).toEqual(3);
- expect(element.selectionEnd).toEqual(3);
- }));
- });
-
- describe('no type attribute', () {
- it('should be set "text" as default value for "type" attribute', inject(() {
- _.compile('<input ng-model="model">');
- _.rootScope.apply();
- expect((_.rootElement as dom.InputElement).attributes['type']).toEqual('text');
- }));
-
- it('should update input value from model', inject(() {
- _.compile('<input ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = "misko"');
- expect((_.rootElement as dom.InputElement).value).toEqual('misko');
- }));
-
- it('should render null as the empty string', inject(() {
- _.compile('<input ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.InputElement).value).toEqual('');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<input ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = 'abc';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual('abc');
-
- inputElement.value = 'def';
- var input = probe.directive(InputTextLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual('def');
- }));
-
- it('should write to input only if value is different', inject((Injector i, AstParser parser) {
- var scope = _.rootScope;
- var element = new dom.InputElement();
- NodeAttrs nodeAttrs = new NodeAttrs(new DivElement());
- nodeAttrs['ng-model'] = 'model';
- var model = new NgModel(scope, element, i.createChild([new Module()]), new NgNullForm(), parser, nodeAttrs);
- dom.querySelector('body').append(element);
- var input = new InputTextLikeDirective(element, model, scope);
-
- element
- ..value = 'abc'
- ..selectionStart = 1
- ..selectionEnd = 2;
-
- model.render('abc');
-
- expect(element.value).toEqual('abc');
- expect(element.selectionStart).toEqual(1);
- expect(element.selectionEnd).toEqual(2);
-
- model.render('xyz');
-
- expect(element.value).toEqual('xyz');
- expect(element.selectionStart).toEqual(3);
- expect(element.selectionEnd).toEqual(3);
- }));
- });
-
- describe('type="checkbox"', () {
- it('should update input value from model', inject((Scope scope) {
- var element = _.compile('<input type="checkbox" ng-model="model">');
-
- scope.apply(() {
- scope.context['model'] = true;
- });
- expect(element.checked).toBe(true);
-
- scope.apply(() {
- scope.context['model'] = false;
- });
- expect(element.checked).toBe(false);
- }));
-
- it('should render as dirty when checked', inject((Scope scope) {
- var element = _.compile('<input type="text" ng-model="my_model" probe="i" />');
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
-
- expect(model.pristine).toEqual(true);
- expect(model.dirty).toEqual(false);
-
- _.triggerEvent(element, 'change');
-
- expect(model.pristine).toEqual(false);
- expect(model.dirty).toEqual(true);
- }));
-
-
- it('should update input value from model using ng-true-value/false', inject((Scope scope) {
- var element = _.compile('<input type="checkbox" ng-model="model" ng-true-value="1" ng-false-value="0">');
-
- scope.apply(() {
- scope.context['model'] = 1;
- });
- expect(element.checked).toBe(true);
-
- scope.apply(() {
- scope.context['model'] = 0;
- });
- expect(element.checked).toBe(false);
-
- element.checked = true;
- _.triggerEvent(element, 'change');
- expect(scope.context['model']).toBe(1);
-
- element.checked = false;
- _.triggerEvent(element, 'change');
- expect(scope.context['model']).toBe(0);
- }));
-
-
- it('should allow non boolean values like null, 0, 1', inject((Scope scope) {
- var element = _.compile('<input type="checkbox" ng-model="model">');
-
- scope.apply(() {
- scope.context['model'] = 0;
- });
- expect(element.checked).toBe(false);
-
- scope.apply(() {
- scope.context['model'] = 1;
- });
- expect(element.checked).toBe(true);
-
- scope.apply(() {
- scope.context['model'] = null;
- });
- expect(element.checked).toBe(false);
- }));
-
-
- it('should update model from the input value', inject((Scope scope) {
- var element = _.compile('<input type="checkbox" ng-model="model">');
-
- element.checked = true;
- _.triggerEvent(element, 'change');
- expect(scope.context['model']).toBe(true);
-
- element.checked = false;
- _.triggerEvent(element, 'change');
- expect(scope.context['model']).toBe(false);
- }));
- });
-
- describe('textarea', () {
- it('should update textarea value from model', inject(() {
- _.compile('<textarea ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.TextAreaElement).value).toEqual('');
-
- _.rootScope.apply('model = "misko"');
- expect((_.rootElement as dom.TextAreaElement).value).toEqual('misko');
- }));
-
- it('should render null as the empty string', inject(() {
- _.compile('<textarea ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.TextAreaElement).value).toEqual('');
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.TextAreaElement).value).toEqual('');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<textarea ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- TextAreaElement element = probe.element;
-
- element.value = 'abc';
- _.triggerEvent(element, 'change');
- expect(_.rootScope.context['model']).toEqual('abc');
-
- element.value = 'def';
- var textarea = probe.directive(InputTextLikeDirective);
- textarea.processValue();
- expect(_.rootScope.context['model']).toEqual('def');
-
- }));
-
- // NOTE(deboer): This test passes on Dartium, but fails in the content_shell.
- // The Dart team is looking into this bug.
- xit('should write to input only if value is different', inject((Injector i, AstParser parser) {
- var scope = _.rootScope;
- var element = new dom.TextAreaElement();
- NodeAttrs nodeAttrs = new NodeAttrs(new DivElement());
- nodeAttrs['ng-model'] = 'model';
- var model = new NgModel(scope, element, i.createChild([new Module()]), new NgNullForm(), parser, nodeAttrs);
- dom.querySelector('body').append(element);
- var input = new InputTextLikeDirective(element, model, scope);
-
- element
- ..value = 'abc'
- ..selectionStart = 1
- ..selectionEnd = 2;
-
- model.render('abc');
-
- expect(element.value).toEqual('abc');
- expect(element.selectionStart).toEqual(1);
- expect(element.selectionEnd).toEqual(2);
-
- model.render('xyz');
-
- // Setting the value on a textarea doesn't update the selection the way it
- // does on input elements. This stays unchanged.
- expect(element.value).toEqual('xyz');
- expect(element.selectionStart).toEqual(0);
- expect(element.selectionEnd).toEqual(0);
- }));
- });
-
- describe('type="radio"', () {
- it('should update input value from model', inject(() {
- _.compile('<input type="radio" name="color" value="red" ng-model="color" probe="r">' +
- '<input type="radio" name="color" value="green" ng-model="color" probe="g">' +
- '<input type="radio" name="color" value="blue" ng-model="color" probe="b">');
- _.rootScope.apply();
-
- RadioButtonInputElement redBtn = _.rootScope.context['r'].element;
- RadioButtonInputElement greenBtn = _.rootScope.context['g'].element;
- RadioButtonInputElement blueBtn = _.rootScope.context['b'].element;
-
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(false);
- expect(blueBtn.checked).toBe(false);
-
- // Should change correct element to checked.
- _.rootScope.apply('color = "green"');
-
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(true);
- expect(blueBtn.checked).toBe(false);
-
- // Non-existing element.
- _.rootScope.apply('color = "unknown"');
-
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(false);
- expect(blueBtn.checked).toBe(false);
-
- // Should update model with value of checked element.
- _.triggerEvent(redBtn, 'click');
-
- expect(_.rootScope.context['color']).toEqual('red');
- expect(redBtn.checked).toBe(true);
- expect(greenBtn.checked).toBe(false);
- expect(blueBtn.checked).toBe(false);
-
- _.triggerEvent(greenBtn, 'click');
- expect(_.rootScope.context['color']).toEqual('green');
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(true);
- expect(blueBtn.checked).toBe(false);
- }));
-
- it('should support ng-value', () {
- _.compile('<input type="radio" name="color" ng-value="red" ng-model="color" probe="r">' +
- '<input type="radio" name="color" ng-value="green" ng-model="color" probe="g">' +
- '<input type="radio" name="color" ng-value="blue" ng-model="color" probe="b">');
-
- var red = {'name': 'RED'};
- var green = {'name': 'GREEN'};
- var blue = {'name': 'BLUE'};
- _.rootScope.context
- ..['red'] = red
- ..['green'] = green
- ..['blue'] = blue;
-
- _.rootScope.apply();
-
- RadioButtonInputElement redBtn = _.rootScope.context['r'].element;
- RadioButtonInputElement greenBtn = _.rootScope.context['g'].element;
- RadioButtonInputElement blueBtn = _.rootScope.context['b'].element;
-
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(false);
- expect(blueBtn.checked).toBe(false);
-
- // Should change correct element to checked.
- _.rootScope.context['color'] = green;
- _.rootScope.apply();
-
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(true);
- expect(blueBtn.checked).toBe(false);
-
- // Non-existing element.
- _.rootScope.context['color'] = {};
- _.rootScope.apply();
-
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(false);
- expect(blueBtn.checked).toBe(false);
-
- // Should update model with value of checked element.
- _.triggerEvent(redBtn, 'click');
-
- expect(_.rootScope.context['color']).toEqual(red);
- expect(redBtn.checked).toBe(true);
- expect(greenBtn.checked).toBe(false);
- expect(blueBtn.checked).toBe(false);
-
- _.triggerEvent(greenBtn, 'click');
- expect(_.rootScope.context['color']).toEqual(green);
- expect(redBtn.checked).toBe(false);
- expect(greenBtn.checked).toBe(true);
- expect(blueBtn.checked).toBe(false);
- });
-
- it('should render as dirty when checked', inject((Scope scope) {
- var element = _.compile(
- '<div>' +
- ' <input type="radio" id="on" ng-model="my_model" probe="i" value="on" />' +
- ' <input type="radio" id="off" ng-model="my_model" probe="j" value="off" />' +
- '</div>'
- );
- Probe probe = _.rootScope.context['i'];
-
- var model = probe.directive(NgModel);
-
- var input1 = element.querySelector("#on");
- var input2 = element.querySelector("#off");
-
- expect(model.pristine).toEqual(true);
- expect(model.dirty).toEqual(false);
-
- expect(input1.classes.contains("ng-dirty")).toBe(false);
- expect(input2.classes.contains("ng-dirty")).toBe(false);
- expect(input1.classes.contains("ng-pristine")).toBe(true);
- expect(input1.classes.contains("ng-pristine")).toBe(true);
-
- input1.checked = true;
- _.triggerEvent(input1, 'click');
-
- expect(model.pristine).toEqual(false);
- expect(model.dirty).toEqual(true);
-
- input1.checked = false;
- input2.checked = true;
- _.triggerEvent(input2, 'click');
-
- expect(input1.classes.contains("ng-dirty")).toBe(true);
- expect(input2.classes.contains("ng-dirty")).toBe(true);
- expect(input1.classes.contains("ng-pristine")).toBe(false);
- expect(input1.classes.contains("ng-pristine")).toBe(false);
- }));
- });
-
- describe('type="search"', () {
- it('should update input value from model', inject(() {
- _.compile('<input type="search" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = "matias"');
- expect((_.rootElement as dom.InputElement).value).toEqual('matias');
- }));
-
- it('should render null as the empty string', inject(() {
- _.compile('<input type="search" ng-model="model">');
- _.rootScope.apply();
-
- expect((_.rootElement as dom.InputElement).value).toEqual('');
-
- _.rootScope.apply('model = null');
- expect((_.rootElement as dom.InputElement).value).toEqual('');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<input type="search" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- var ngModel = probe.directive(NgModel);
- InputElement inputElement = probe.element;
-
- inputElement.value = 'xzy';
- _.triggerEvent(inputElement, 'change');
- expect(_.rootScope.context['model']).toEqual('xzy');
-
- inputElement.value = '123';
- var input = probe.directive(InputTextLikeDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual('123');
- }));
- });
-
- describe('contenteditable', () {
- it('should update content from model', inject(() {
- _.compile('<p contenteditable ng-model="model">');
- _.rootScope.apply();
-
- expect(_.rootElement.text).toEqual('');
-
- _.rootScope.apply('model = "misko"');
- expect(_.rootElement.text).toEqual('misko');
- }));
-
- it('should update model from the input value', inject(() {
- _.compile('<p contenteditable ng-model="model">');
- Element element = _.rootElement;
-
- element.innerHtml = 'abc';
- _.triggerEvent(element, 'change');
- expect(_.rootScope.context['model']).toEqual('abc');
-
- element.innerHtml = 'def';
- var input = ngInjector(element).get(ContentEditableDirective);
- input.processValue();
- expect(_.rootScope.context['model']).toEqual('def');
- }));
- });
-
- describe('pristine / dirty', () {
- it('should be set to pristine by default', inject((Scope scope) {
- _.compile('<input type="text" ng-model="my_model" probe="i" />');
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
-
- expect(model.pristine).toEqual(true);
- expect(model.dirty).toEqual(false);
- }));
-
- it('should add and remove the correct CSS classes when set to dirty and to pristine', inject((Scope scope) {
- _.compile('<input type="text" ng-model="my_model" probe="i" />');
- Probe probe = _.rootScope.context['i'];
- NgModel model = probe.directive(NgModel);
- InputElement element = probe.element;
-
- model.dirty = true;
- expect(model.pristine).toEqual(false);
- expect(model.dirty).toEqual(true);
- expect(element.classes.contains('ng-pristine')).toBe(false);
- expect(element.classes.contains('ng-dirty')).toBe(true);
-
- model.pristine = true;
- expect(model.pristine).toEqual(true);
- expect(model.dirty).toEqual(false);
- expect(element.classes.contains('ng-pristine')).toBe(true);
- expect(element.classes.contains('ng-dirty')).toBe(false);
- }));
-
- it('should render the parent form/fieldset as dirty but not the other models', inject((Scope scope) {
- _.compile('<form name="myForm">' +
- ' <fieldset name="myFieldset">' +
- ' <input type="text" ng-model="my_model1" probe="myModel1" />' +
- ' <input type="text" ng-model="my_model2" probe="myModel2" />' +
- ' </fieldset>' +
- '</form>');
-
- var inputElement1 = _.rootScope.context['myModel1'].element;
- var inputElement2 = _.rootScope.context['myModel2'].element;
- var formElement = _.rootScope.context['myForm'].element;
- var fieldsetElement = _.rootScope.context['myFieldset'].element;
-
- expect(formElement.classes.contains('ng-pristine')).toBe(true);
- expect(formElement.classes.contains('ng-dirty')).toBe(false);
-
- expect(fieldsetElement.classes.contains('ng-pristine')).toBe(true);
- expect(fieldsetElement.classes.contains('ng-dirty')).toBe(false);
-
- expect(inputElement1.classes.contains('ng-pristine')).toBe(true);
- expect(inputElement1.classes.contains('ng-dirty')).toBe(false);
-
- expect(inputElement2.classes.contains('ng-pristine')).toBe(true);
- expect(inputElement2.classes.contains('ng-dirty')).toBe(false);
-
- inputElement1.value = '...hi...';
- _.triggerEvent(inputElement1, 'change');
-
- expect(formElement.classes.contains('ng-pristine')).toBe(false);
- expect(formElement.classes.contains('ng-dirty')).toBe(true);
-
- expect(fieldsetElement.classes.contains('ng-pristine')).toBe(false);
- expect(fieldsetElement.classes.contains('ng-dirty')).toBe(true);
-
- expect(inputElement1.classes.contains('ng-pristine')).toBe(false);
- expect(inputElement1.classes.contains('ng-dirty')).toBe(true);
-
- expect(inputElement2.classes.contains('ng-pristine')).toBe(true);
- expect(inputElement2.classes.contains('ng-dirty')).toBe(false);
- }));
- });
-
- describe('validation', () {
- it('should happen automatically when the scope changes', inject((Scope scope) {
- _.compile('<input type="text" ng-model="model" probe="i" required>');
- _.rootScope.apply();
-
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
-
- expect(model.invalid).toBe(true);
- expect(model.valid).toBe(false);
-
- _.rootScope.apply('model = "viljami"');
-
- expect(model.invalid).toBe(false);
- expect(model.valid).toBe(true);
- }));
-
- it('should happen automatically upon user input via the onInput event', inject(() {
- _.compile('<input type="text" ng-model="model" probe="i" required>');
-
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
- InputElement inputElement = model.element;
-
- expect(model.invalid).toBe(true);
- expect(model.valid).toBe(false);
-
- inputElement.value = 'some value';
- _.triggerEvent(inputElement, 'input');
-
- expect(model.invalid).toBe(false);
- expect(model.valid).toBe(true);
- }));
- });
-
- describe('valid / invalid', () {
- it('should add and remove the correct flags when set to valid and to invalid', inject((Scope scope) {
- _.compile('<input type="text" ng-model="my_model" probe="i" />');
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
- InputElement element = probe.element;
-
- model.invalid = true;
- expect(model.valid).toEqual(false);
- expect(model.invalid).toEqual(true);
- expect(element.classes.contains('ng-valid')).toBe(false);
- expect(element.classes.contains('ng-invalid')).toBe(true);
-
- model.valid = true;
- expect(model.valid).toEqual(true);
- expect(model.invalid).toEqual(false);
- expect(element.classes.contains('ng-invalid')).toBe(false);
- expect(element.classes.contains('ng-valid')).toBe(true);
- }));
-
- it('should set the validity with respect to all existing validations when setValidity() is used', inject((Scope scope) {
- _.compile('<input type="text" ng-model="my_model" probe="i" />');
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
-
- model.setValidity("required", false);
- expect(model.valid).toEqual(false);
- expect(model.invalid).toEqual(true);
-
- model.setValidity("format", false);
- expect(model.valid).toEqual(false);
- expect(model.invalid).toEqual(true);
-
- model.setValidity("format", true);
- expect(model.valid).toEqual(false);
- expect(model.invalid).toEqual(true);
-
- model.setValidity("required", true);
- expect(model.valid).toEqual(true);
- expect(model.invalid).toEqual(false);
- }));
-
- it('should register each error only once when invalid', inject((Scope scope) {
- _.compile('<input type="text" ng-model="my_model" probe="i" />');
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
-
- model.setValidity("distinct-error", false);
- expect(model.valid).toEqual(false);
- expect(model.invalid).toEqual(true);
-
- model.setValidity("distinct-error", false);
- expect(model.valid).toEqual(false);
- expect(model.invalid).toEqual(true);
-
- model.setValidity("distinct-error", true);
- expect(model.valid).toEqual(true);
- expect(model.invalid).toEqual(false);
- }));
- });
-
- describe('text-like events', () {
- it('should update the binding on the "input" event', inject(() {
- _.compile('<input type="text" ng-model="model" probe="p">');
- Probe probe = _.rootScope.context['p'];
- InputElement inputElement = probe.element;
-
- inputElement.value = 'waaaah';
-
- expect(_.rootScope.context['model']).not.toEqual('waaaah');
-
- _.triggerEvent(inputElement, 'input');
-
- expect(_.rootScope.context['model']).toEqual('waaaah');
- }));
- });
-
- describe('error messages', () {
- it('should produce a useful error for bad ng-model expressions', () {
- expect(async(() {
- _.compile('<div no-love><textarea ng-model=ctrl.love probe="loveProbe"></textarea></div');
- Probe probe = _.rootScope.context['loveProbe'];
- TextAreaElement inputElement = probe.element;
-
- inputElement.value = 'xzy';
- _.triggerEvent(inputElement, 'change');
- _.rootScope.apply();
- })).toThrow('love');
-
- });
- });
-
- describe('reset()', () {
- it('should reset the model value to its original state', () {
- _.compile('<input type="text" ng-model="myModel" probe="i" />');
- _.rootScope.apply('myModel = "animal"');
-
- Probe probe = _.rootScope.context['i'];
- var model = probe.directive(NgModel);
-
- expect(_.rootScope.context['myModel']).toEqual('animal');
- expect(model.modelValue).toEqual('animal');
- expect(model.viewValue).toEqual('animal');
-
- _.rootScope.apply('myModel = "man"');
-
- expect(_.rootScope.context['myModel']).toEqual('man');
- expect(model.modelValue).toEqual('man');
- expect(model.viewValue).toEqual('man');
-
- model.reset();
-
- expect(_.rootScope.context['myModel']).toEqual('animal');
- expect(model.modelValue).toEqual('animal');
- expect(model.viewValue).toEqual('animal');
- });
- });
-
- it('should set the model to be untouched when the model is reset', () {
- var input = _.compile('<input type="text" ng-model="myModel" probe="i" />');
- var model = _.rootScope.context['i'].directive(NgModel);
-
- expect(model.touched).toBe(false);
- expect(model.untouched).toBe(true);
-
- _.triggerEvent(input, 'blur');
-
- expect(model.touched).toBe(true);
- expect(model.untouched).toBe(false);
-
- model.reset();
-
- expect(model.touched).toBe(false);
- expect(model.untouched).toBe(true);
- });
- });
-}
-
-@NgController(
- selector: '[no-love]',
- publishAs: 'ctrl')
-class ControllerWithNoLove {
- var apathy = null;
-}

Powered by Google App Engine
This is Rietveld 408576698