From fe434307d15d697a5ffade51bad068f6443965b2 Mon Sep 17 00:00:00 2001
From: Misko Hevery
Date: Thu, 22 Apr 2010 17:11:56 -0700
Subject: tests work under jquery and without
---
jsTestDriver.conf | 2 +-
scenario/widgets.html | 4 ++--
src/Angular.js | 6 +++++-
src/directives.js | 9 ++++-----
src/filters.js | 6 ++----
src/jqLite.js | 4 ----
src/widgets.js | 2 +-
test/BinderTest.js | 4 ++--
test/FiltersTest.js | 8 ++++----
test/testabilityPatch.js | 9 +++++++++
test/widgetsSpec.js | 12 ++++++------
11 files changed, 36 insertions(+), 30 deletions(-)
diff --git a/jsTestDriver.conf b/jsTestDriver.conf
index 196d282f..e2820ddb 100644
--- a/jsTestDriver.conf
+++ b/jsTestDriver.conf
@@ -3,7 +3,7 @@ server: http://localhost:9876
load:
- lib/jasmine/jasmine-0.10.3.js
- lib/jasmine-jstd-adapter/JasmineAdapter.js
- - lib/jquery/jquery-1.4.2.js
+# - lib/jquery/jquery-1.4.2.js
- src/Angular.js
- src/*.js
- src/scenario/_namespace.js
diff --git a/scenario/widgets.html b/scenario/widgets.html
index 43b1ddbb..1341f7cb 100644
--- a/scenario/widgets.html
+++ b/scenario/widgets.html
@@ -1,9 +1,9 @@
-
+
diff --git a/src/Angular.js b/src/Angular.js
index a4421f0e..0c1ab838 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -112,7 +112,11 @@ function lowercase(value){ return isString(value) ? value.toLowerCase() : value;
function uppercase(value){ return isString(value) ? value.toUpperCase() : value; }
function trim(value) { return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; }
function isElement(node) {
- return node && (node.nodeName || node instanceof JQLite || node instanceof jQuery);
+ return node && (node.nodeName || node instanceof JQLite || (jQuery && node instanceof jQuery));
+}
+
+function HTML(html) {
+ this.html = html;
}
if (msie) {
diff --git a/src/directives.js b/src/directives.js
index bdcdcc1d..aa75aa5b 100644
--- a/src/directives.js
+++ b/src/directives.js
@@ -30,8 +30,8 @@ angularDirective("ng-bind", function(expression){
value = this.$tryEval(expression, function(e){
error = toJson(e);
}),
- isElem = isElement(value);
- if (!isElem && isObject(value)) {
+ isHtml = value instanceof HTML;
+ if (!isHtml && isObject(value)) {
value = toJson(value);
}
if (value != lastValue || error != lastError) {
@@ -39,9 +39,8 @@ angularDirective("ng-bind", function(expression){
lastError = error;
elementError(element, NG_EXCEPTION, error);
if (error) value = error;
- if (isElem) {
- element.html('');
- element.append(value);
+ if (isHtml) {
+ element.html(value.html);
} else {
element.text(value);
}
diff --git a/src/filters.js b/src/filters.js
index 74013db1..a911b935 100644
--- a/src/filters.js
+++ b/src/filters.js
@@ -269,9 +269,7 @@ foreach({
},
'html': function(html){
- var div = jqLite('div');
- div.html(html);
- return div.children();
+ return new HTML(html);
},
'linky': function(text){
@@ -293,7 +291,7 @@ foreach({
raw = raw.substring(i + url.length);
}
html.push(escapeHtml(raw));
- return jqLite(html.join(''));
+ return new HTML(html.join(''));
}
}, function(v,k){angularFilter[k] = v;});
diff --git a/src/jqLite.js b/src/jqLite.js
index ec1c52d2..18589630 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -238,10 +238,6 @@ if (msie) {
},
trigger: function(type) {
-
- if (nodeName(this) == 'INPUT' && (lowercase(this.attr('type')) == 'radio' || lowercase(this.attr('type')) == 'checkbox')) {
- this[0].checked = ! this[0].checked;
- }
this[0].fireEvent('on' + type);
}
});
diff --git a/src/widgets.js b/src/widgets.js
index 239f12f8..209b24b7 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -32,7 +32,7 @@ function valueAccessor(scope, element) {
value = element.val();
force = true;
}
- if (element[0].disabled || isString(element.attr('readonly'))) {
+ if (element[0].disabled || element[0].readOnly) {
elementError(element, NG_VALIDATION_ERROR, null);
invalidWidgets.markValid(element);
return value;
diff --git a/test/BinderTest.js b/test/BinderTest.js
index 31b2698d..76561dc3 100644
--- a/test/BinderTest.js
+++ b/test/BinderTest.js
@@ -588,13 +588,13 @@ BinderTest.prototype.testItShouldSelectTheCorrectRadioBox = function() {
var female = jqLite(c.node[0].childNodes[0]);
var male = jqLite(c.node[0].childNodes[1]);
- female.trigger('click');
+ click(female);
assertEquals("female", c.scope.sex);
assertEquals(true, female[0].checked);
assertEquals(false, male[0].checked);
assertEquals("female", female.val());
- male.trigger('click');
+ click(male);
assertEquals("male", c.scope.sex);
assertEquals(false, female[0].checked);
assertEquals(true, male[0].checked);
diff --git a/test/FiltersTest.js b/test/FiltersTest.js
index a71d30e2..5642f635 100644
--- a/test/FiltersTest.js
+++ b/test/FiltersTest.js
@@ -133,9 +133,9 @@ FiltersTest.prototype.testGoogleChartApiEncode = function() {
};
FiltersTest.prototype.testHtml = function() {
- var div = jqLite('');
- div.append(angular.filter.html("acd"));
- assertEquals("acd", lowercase(div.html()));
+ var html = angular.filter.html("acd");
+ expect(html instanceof HTML).toBeTruthy();
+ expect(html.html).toEqual("acd");
};
FiltersTest.prototype.testLinky = function() {
@@ -145,7 +145,7 @@ FiltersTest.prototype.testLinky = function() {
'(http://a/) ' +
'<http://a/> ' +
'http://1.2/v:~-123. c',
- sortedHtml(linky("http://ab/ (http://a/) http://1.2/v:~-123. c")));
+ linky("http://ab/ (http://a/) http://1.2/v:~-123. c").html);
assertEquals(undefined, linky(undefined));
};
diff --git a/test/testabilityPatch.js b/test/testabilityPatch.js
index e5eef63e..b05770c7 100644
--- a/test/testabilityPatch.js
+++ b/test/testabilityPatch.js
@@ -148,3 +148,12 @@ function assertThrows(error, fn){
log = noop;
error = noop;
+
+function click(element) {
+ element = jqLite(element);
+ if ( (msie || jqLite == window.jQuery) &&
+ nodeName(element) == 'INPUT' && (lowercase(element.attr('type')) == 'radio' || lowercase(element.attr('type')) == 'checkbox')) {
+ element[0].checked = ! element[0].checked;
+ }
+ element.trigger('click');
+}
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index c6c57557..3aa5e250 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -137,23 +137,23 @@ describe("widget", function(){
it('should call ng-change on button click', function(){
compile('');
- element.trigger('click');
+ click(element);
expect(scope.$get('clicked')).toEqual(true);
});
it('should support button alias', function(){
compile('');
- element.trigger('click');
+ click(element);
expect(scope.$get('clicked')).toEqual(true);
});
it('should support type="checkbox"', function(){
compile('');
expect(scope.checkbox).toEqual(true);
- element.trigger('click');
+ click(element);
expect(scope.checkbox).toEqual(false);
expect(scope.action).toEqual(true);
- element.trigger('click');
+ click(element);
expect(scope.checkbox).toEqual(true);
});
@@ -177,7 +177,7 @@ describe("widget", function(){
expect(b.checked).toEqual(true);
expect(scope.clicked).not.toBeDefined();
- jqLite(a).trigger('click');
+ click(a);
expect(scope.chose).toEqual('A');
expect(scope.clicked).toEqual(1);
});
@@ -219,7 +219,7 @@ describe("widget", function(){
it('should report error on ng-change exception', function(){
compile('');
- element.trigger('click');
+ click(element);
expect(element.hasClass('ng-exception')).toBeTruthy();
});
});
--
cgit v1.2.3