| Index: third_party/pkg/angular/test/core_dom/mustache_spec.dart
|
| diff --git a/third_party/pkg/angular/test/core_dom/mustache_spec.dart b/third_party/pkg/angular/test/core_dom/mustache_spec.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9b5b0403a6b5cd3461b2371e06c8adf9c735fde9
|
| --- /dev/null
|
| +++ b/third_party/pkg/angular/test/core_dom/mustache_spec.dart
|
| @@ -0,0 +1,161 @@
|
| +library ng_mustache_spec;
|
| +
|
| +import '../_specs.dart';
|
| +
|
| +main() {
|
| + describe('ng-mustache', () {
|
| + TestBed _;
|
| + beforeEachModule((Module module) {
|
| + module.type(_HelloFilter);
|
| + module.type(_FooDirective);
|
| + });
|
| + beforeEach(inject((TestBed tb) => _ = tb));
|
| +
|
| + it('should replace {{}} in text', inject((Compiler compile,
|
| + Scope rootScope, Injector injector, DirectiveMap directives)
|
| + {
|
| + var element = es('<div>{{name}}<span>!</span></div>');
|
| + var template = compile(element, directives);
|
| +
|
| + rootScope.context['name'] = 'OK';
|
| + var view = template(injector);
|
| +
|
| + element = view.nodes;
|
| +
|
| + rootScope.apply();
|
| + expect(element).toHaveText('OK!');
|
| + }));
|
| +
|
| + describe('observe/flush phase', () {
|
| + it('should first only when then value has settled', async((Logger log) {
|
| + _.compile('<div dir-foo="{{val}}"></div>');
|
| +
|
| + _.rootScope.apply();
|
| + // _FooDirective should NOT have observed any changes.
|
| + expect(log).toEqual([]);
|
| + expect(_.rootElement.attributes['dir-foo']).toEqual('');
|
| +
|
| + _.rootScope.apply(() {
|
| + _.rootScope.context['val'] = 'value';
|
| + });
|
| + // _FooDirective should have observed exactly one change.
|
| + expect(_.rootElement.attributes['dir-foo']).toEqual('value');
|
| + expect(log).toEqual(['value']);
|
| + }));
|
| + });
|
| +
|
| + it('should replace {{}} in attribute', inject((Compiler compile,
|
| + Scope rootScope, Injector injector, DirectiveMap directives)
|
| + {
|
| + Element element =
|
| + e('<div some-attr="{{name}}" other-attr="{{age}}"></div>');
|
| + var template = compile([element], directives);
|
| +
|
| + rootScope.context['name'] = 'OK';
|
| + rootScope.context['age'] = 23;
|
| + var view = template(injector);
|
| +
|
| + element = view.nodes[0];
|
| +
|
| + rootScope.apply();
|
| + expect(element.attributes['some-attr']).toEqual('OK');
|
| + expect(element.attributes['other-attr']).toEqual('23');
|
| + }));
|
| +
|
| +
|
| + it('should allow newlines in attribute', inject((Compiler compile,
|
| + RootScope rootScope, Injector injector, DirectiveMap directives)
|
| + {
|
| + Element element =
|
| + e('<div multiline-attr="line1: {{line1}}\nline2: {{line2}}"></div>');
|
| + var template = compile([element], directives);
|
| +
|
| + rootScope.context['line1'] = 'L1';
|
| + rootScope.context['line2'] = 'L2';
|
| + var view = template(injector);
|
| +
|
| + element = view.nodes[0];
|
| +
|
| + rootScope.apply();
|
| + expect(element.attributes['multiline-attr'])
|
| + .toEqual('line1: L1\nline2: L2');
|
| + }));
|
| +
|
| +
|
| + it('should handle formatters', inject((Compiler compile, RootScope rootScope,
|
| + Injector injector, DirectiveMap directives)
|
| + {
|
| + var element = es('<div>{{"World" | hello}}</div>');
|
| + var template = compile(element, directives);
|
| + var view = template(injector);
|
| + rootScope.apply();
|
| +
|
| + element = view.nodes;
|
| +
|
| + expect(element).toHaveHtml('Hello, World!');
|
| + }));
|
| + });
|
| +
|
| + describe('NgShow', () {
|
| + TestBed _;
|
| +
|
| + beforeEach(inject((TestBed tb) => _ = tb));
|
| +
|
| + it('should add/remove ng-hide class', () {
|
| + var element = _.compile('<div ng-show="isVisible"></div>');
|
| +
|
| + expect(element).not.toHaveClass('ng-hide');
|
| +
|
| + _.rootScope.apply(() {
|
| + _.rootScope.context['isVisible'] = true;
|
| + });
|
| + expect(element).not.toHaveClass('ng-hide');
|
| +
|
| + _.rootScope.apply(() {
|
| + _.rootScope.context['isVisible'] = false;
|
| + });
|
| + expect(element).toHaveClass('ng-hide');
|
| + });
|
| +
|
| + it('should work together with ng-class', () {
|
| + var element =
|
| + _.compile('<div ng-class="currentCls" ng-show="isVisible"></div>');
|
| +
|
| + expect(element).not.toHaveClass('active');
|
| + expect(element).not.toHaveClass('ng-hide');
|
| +
|
| + _.rootScope.apply(() {
|
| + _.rootScope.context['currentCls'] = 'active';
|
| + });
|
| + expect(element).toHaveClass('active');
|
| + expect(element).toHaveClass('ng-hide');
|
| +
|
| + _.rootScope.apply(() {
|
| + _.rootScope.context['isVisible'] = true;
|
| + });
|
| + expect(element).toHaveClass('active');
|
| + expect(element).not.toHaveClass('ng-hide');
|
| + });
|
| + });
|
| +
|
| +}
|
| +
|
| +@Formatter(name: 'hello')
|
| +class _HelloFilter {
|
| + call(String str) {
|
| + return 'Hello, $str!';
|
| + }
|
| +}
|
| +
|
| +@Component(selector: '[dir-foo]')
|
| +class _FooDirective implements AttachAware {
|
| + NodeAttrs attrs;
|
| + Logger log;
|
| +
|
| + _FooDirective(this.attrs, this.log);
|
| +
|
| + @override
|
| + void attach() {
|
| + attrs.observe('dir-foo', (val) => log(val));
|
| + }
|
| +}
|
|
|