From d9b58f23f6b3fe5635c3ec5259e6a0002cff78b7 Mon Sep 17 00:00:00 2001
From: Misko Hevery
Date: Tue, 25 Oct 2011 14:14:18 -0700
Subject: move(compiler): appease the History God
- renamed: src/Compiler.js -> src/service/compiler.js
- renamed: test/CompilerSpec.js -> test/service/compilerSpec.js
---
test/CompilerSpec.js | 218 -------------------------------------------
test/service/compilerSpec.js | 218 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 218 insertions(+), 218 deletions(-)
delete mode 100644 test/CompilerSpec.js
create mode 100644 test/service/compilerSpec.js
(limited to 'test')
diff --git a/test/CompilerSpec.js b/test/CompilerSpec.js
deleted file mode 100644
index 2dec1396..00000000
--- a/test/CompilerSpec.js
+++ /dev/null
@@ -1,218 +0,0 @@
-'use strict';
-
-describe('compiler', function() {
- var compiler, markup, attrMarkup, directives, widgets, compile, log, scope;
-
- beforeEach(inject(function($rootScope) {
- log = "";
- directives = {
- hello: function(expression, element){
- log += "hello ";
- return function() {
- log += expression;
- };
- },
-
- observe: function(expression, element){
- return function() {
- this.$watch(expression, function(scope, val){
- if (val)
- log += ":" + val;
- });
- };
- }
-
- };
- markup = [];
- attrMarkup = [];
- widgets = extensionMap({}, 'widget');
- compiler = new Compiler(markup, attrMarkup, directives, widgets);
- compile = function(html){
- var e = jqLite("
" + html + "
");
- compiler.compile(e)($rootScope);
- return scope = $rootScope;
- };
- }));
-
-
- it('should not allow compilation of multiple roots', function() {
- expect(function() {
- compiler.compile('A
');
- }).toThrow("Cannot compile multiple element roots: " + ie("A
"));
- function ie(text) {
- return msie < 9 ? uppercase(text) : text;
- }
- });
-
-
- it('should recognize a directive', inject(function($rootScope) {
- var e = jqLite('');
- directives.directive = function(expression, element){
- log += "found";
- expect(expression).toEqual("expr");
- expect(element).toEqual(e);
- return function initFn() {
- log += ":init";
- };
- };
- var template = compiler.compile(e);
- expect(log).toEqual("found");
- scope = template($rootScope);
- expect(e.hasClass('ng-directive')).toEqual(true);
- expect(log).toEqual("found:init");
- }));
-
-
- it('should recurse to children', function() {
- scope = compile('
');
- expect(log).toEqual("hello misko");
- });
-
-
- it('should observe scope', function() {
- scope = compile('');
- expect(log).toEqual("");
- scope.$digest();
- scope.name = 'misko';
- scope.$digest();
- scope.$digest();
- scope.name = 'adam';
- scope.$digest();
- scope.$digest();
- expect(log).toEqual(":misko:adam");
- });
-
-
- it('should prevent descend', function() {
- directives.stop = function() { this.descend(false); };
- scope = compile('');
- expect(log).toEqual("hello misko");
- });
-
-
- it('should allow creation of templates', inject(function($rootScope) {
- directives.duplicate = function(expr, element){
- element.replaceWith(document.createComment("marker"));
- element.removeAttr("duplicate");
- var linker = this.compile(element);
- return function(marker) {
- this.$watch('value', function() {
- var scope = $rootScope.$new;
- linker(scope, noop);
- marker.after(scope.$element);
- });
- };
- };
- scope = compile('beforexafter');
- expect(sortedHtml(scope.$element)).
- toEqual('' +
- 'before<#comment>#comment>' +
- 'after' +
- '
');
- scope.value = 1;
- scope.$digest();
- expect(sortedHtml(scope.$element)).
- toEqual('' +
- 'before<#comment>#comment>' +
- 'x' +
- 'after' +
- '
');
- scope.value = 2;
- scope.$digest();
- expect(sortedHtml(scope.$element)).
- toEqual('' +
- 'before<#comment>#comment>' +
- 'x' +
- 'x' +
- 'after' +
- '
');
- scope.value = 3;
- scope.$digest();
- expect(sortedHtml(scope.$element)).
- toEqual('' +
- 'before<#comment>#comment>' +
- 'x' +
- 'x' +
- 'x' +
- 'after' +
- '
');
- }));
-
-
- it('should process markup before directives', function() {
- markup.push(function(text, textNode, parentNode) {
- if (text == 'middle') {
- expect(textNode.text()).toEqual(text);
- parentNode.attr('hello', text);
- textNode[0].nodeValue = 'replaced';
- }
- });
- scope = compile('beforemiddleafter');
- expect(sortedHtml(scope.$element[0], true)).toEqual('beforereplacedafter
');
- expect(log).toEqual("hello middle");
- });
-
-
- it('should replace widgets', function() {
- widgets['NG:BUTTON'] = function(element) {
- expect(element.hasClass('ng-widget')).toEqual(true);
- element.replaceWith('button
');
- return function(element) {
- log += 'init';
- };
- };
- scope = compile('push me');
- expect(lowercase(scope.$element[0].innerHTML)).toEqual('button
');
- expect(log).toEqual('init');
- });
-
-
- it('should use the replaced element after calling widget', function() {
- widgets['H1'] = function(element) {
- // HTML elements which are augmented by acting as widgets, should not be marked as so
- expect(element.hasClass('ng-widget')).toEqual(false);
- var span = angular.element('{{1+2}}');
- element.replaceWith(span);
- this.descend(true);
- this.directives(true);
- return noop;
- };
- markup.push(function(text, textNode, parent){
- if (text == '{{1+2}}')
- parent.text('3');
- });
- scope = compile('ignore me
');
- expect(scope.$element.text()).toEqual('3');
- });
-
-
- it('should allow multiple markups per text element', function() {
- markup.push(function(text, textNode, parent){
- var index = text.indexOf('---');
- if (index > -1) {
- textNode.after(text.substring(index + 3));
- textNode.after("
");
- textNode.after(text.substring(0, index));
- textNode.remove();
- }
- });
- markup.push(function(text, textNode, parent){
- var index = text.indexOf('===');
- if (index > -1) {
- textNode.after(text.substring(index + 3));
- textNode.after("");
- textNode.after(text.substring(0, index));
- textNode.remove();
- }
- });
- scope = compile('A---B---C===D');
- expect(sortedHtml(scope.$element)).toEqual('
');
- });
-
-
- it('should add class for namespace elements', function() {
- scope = compile('abc');
- var space = jqLite(scope.$element[0].firstChild);
- expect(space.hasClass('ng-space')).toEqual(true);
- });
-});
diff --git a/test/service/compilerSpec.js b/test/service/compilerSpec.js
new file mode 100644
index 00000000..2dec1396
--- /dev/null
+++ b/test/service/compilerSpec.js
@@ -0,0 +1,218 @@
+'use strict';
+
+describe('compiler', function() {
+ var compiler, markup, attrMarkup, directives, widgets, compile, log, scope;
+
+ beforeEach(inject(function($rootScope) {
+ log = "";
+ directives = {
+ hello: function(expression, element){
+ log += "hello ";
+ return function() {
+ log += expression;
+ };
+ },
+
+ observe: function(expression, element){
+ return function() {
+ this.$watch(expression, function(scope, val){
+ if (val)
+ log += ":" + val;
+ });
+ };
+ }
+
+ };
+ markup = [];
+ attrMarkup = [];
+ widgets = extensionMap({}, 'widget');
+ compiler = new Compiler(markup, attrMarkup, directives, widgets);
+ compile = function(html){
+ var e = jqLite("" + html + "
");
+ compiler.compile(e)($rootScope);
+ return scope = $rootScope;
+ };
+ }));
+
+
+ it('should not allow compilation of multiple roots', function() {
+ expect(function() {
+ compiler.compile('A
');
+ }).toThrow("Cannot compile multiple element roots: " + ie("A
"));
+ function ie(text) {
+ return msie < 9 ? uppercase(text) : text;
+ }
+ });
+
+
+ it('should recognize a directive', inject(function($rootScope) {
+ var e = jqLite('');
+ directives.directive = function(expression, element){
+ log += "found";
+ expect(expression).toEqual("expr");
+ expect(element).toEqual(e);
+ return function initFn() {
+ log += ":init";
+ };
+ };
+ var template = compiler.compile(e);
+ expect(log).toEqual("found");
+ scope = template($rootScope);
+ expect(e.hasClass('ng-directive')).toEqual(true);
+ expect(log).toEqual("found:init");
+ }));
+
+
+ it('should recurse to children', function() {
+ scope = compile('
');
+ expect(log).toEqual("hello misko");
+ });
+
+
+ it('should observe scope', function() {
+ scope = compile('');
+ expect(log).toEqual("");
+ scope.$digest();
+ scope.name = 'misko';
+ scope.$digest();
+ scope.$digest();
+ scope.name = 'adam';
+ scope.$digest();
+ scope.$digest();
+ expect(log).toEqual(":misko:adam");
+ });
+
+
+ it('should prevent descend', function() {
+ directives.stop = function() { this.descend(false); };
+ scope = compile('');
+ expect(log).toEqual("hello misko");
+ });
+
+
+ it('should allow creation of templates', inject(function($rootScope) {
+ directives.duplicate = function(expr, element){
+ element.replaceWith(document.createComment("marker"));
+ element.removeAttr("duplicate");
+ var linker = this.compile(element);
+ return function(marker) {
+ this.$watch('value', function() {
+ var scope = $rootScope.$new;
+ linker(scope, noop);
+ marker.after(scope.$element);
+ });
+ };
+ };
+ scope = compile('beforexafter');
+ expect(sortedHtml(scope.$element)).
+ toEqual('' +
+ 'before<#comment>#comment>' +
+ 'after' +
+ '
');
+ scope.value = 1;
+ scope.$digest();
+ expect(sortedHtml(scope.$element)).
+ toEqual('' +
+ 'before<#comment>#comment>' +
+ 'x' +
+ 'after' +
+ '
');
+ scope.value = 2;
+ scope.$digest();
+ expect(sortedHtml(scope.$element)).
+ toEqual('' +
+ 'before<#comment>#comment>' +
+ 'x' +
+ 'x' +
+ 'after' +
+ '
');
+ scope.value = 3;
+ scope.$digest();
+ expect(sortedHtml(scope.$element)).
+ toEqual('' +
+ 'before<#comment>#comment>' +
+ 'x' +
+ 'x' +
+ 'x' +
+ 'after' +
+ '
');
+ }));
+
+
+ it('should process markup before directives', function() {
+ markup.push(function(text, textNode, parentNode) {
+ if (text == 'middle') {
+ expect(textNode.text()).toEqual(text);
+ parentNode.attr('hello', text);
+ textNode[0].nodeValue = 'replaced';
+ }
+ });
+ scope = compile('beforemiddleafter');
+ expect(sortedHtml(scope.$element[0], true)).toEqual('beforereplacedafter
');
+ expect(log).toEqual("hello middle");
+ });
+
+
+ it('should replace widgets', function() {
+ widgets['NG:BUTTON'] = function(element) {
+ expect(element.hasClass('ng-widget')).toEqual(true);
+ element.replaceWith('button
');
+ return function(element) {
+ log += 'init';
+ };
+ };
+ scope = compile('push me');
+ expect(lowercase(scope.$element[0].innerHTML)).toEqual('button
');
+ expect(log).toEqual('init');
+ });
+
+
+ it('should use the replaced element after calling widget', function() {
+ widgets['H1'] = function(element) {
+ // HTML elements which are augmented by acting as widgets, should not be marked as so
+ expect(element.hasClass('ng-widget')).toEqual(false);
+ var span = angular.element('{{1+2}}');
+ element.replaceWith(span);
+ this.descend(true);
+ this.directives(true);
+ return noop;
+ };
+ markup.push(function(text, textNode, parent){
+ if (text == '{{1+2}}')
+ parent.text('3');
+ });
+ scope = compile('ignore me
');
+ expect(scope.$element.text()).toEqual('3');
+ });
+
+
+ it('should allow multiple markups per text element', function() {
+ markup.push(function(text, textNode, parent){
+ var index = text.indexOf('---');
+ if (index > -1) {
+ textNode.after(text.substring(index + 3));
+ textNode.after("
");
+ textNode.after(text.substring(0, index));
+ textNode.remove();
+ }
+ });
+ markup.push(function(text, textNode, parent){
+ var index = text.indexOf('===');
+ if (index > -1) {
+ textNode.after(text.substring(index + 3));
+ textNode.after("");
+ textNode.after(text.substring(0, index));
+ textNode.remove();
+ }
+ });
+ scope = compile('A---B---C===D');
+ expect(sortedHtml(scope.$element)).toEqual('
');
+ });
+
+
+ it('should add class for namespace elements', function() {
+ scope = compile('abc');
+ var space = jqLite(scope.$element[0].firstChild);
+ expect(space.hasClass('ng-space')).toEqual(true);
+ });
+});
--
cgit v1.2.3