tests failing jstd to show cory

This commit is contained in:
Misko Hevery
2010-04-08 13:43:40 -07:00
parent e0ad7dfcd4
commit c4ef1f2fdd
20 changed files with 171 additions and 269 deletions

11
jstd.log Normal file
View File

@@ -0,0 +1,11 @@
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null
java.lang.IllegalArgumentException: /com/google/jstestdriver/javascript/mysrc: resource is null

Binary file not shown.

View File

@@ -1 +1 @@
java -jar lib/jstestdriver/JsTestDriver.jar --port 9876
java -jar lib/jstestdriver/JsTestDriver.jar --port 9876 --runnerMode DEBUG

View File

@@ -83,7 +83,7 @@ function extensionMap(angular, name) {
}
function jqLiteWrap(element) {
if (typeof element == 'string') {
if (isString(element)) {
var div = document.createElement('div');
div.innerHTML = element;
element = div.childNodes[0];
@@ -102,6 +102,12 @@ 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 nodeName(element) { return (element[0] || element).nodeName; }
function isVisible(element) {
var rect = element[0].getBoundingClientRect();
return rect.width !=0 && rect.height !=0;
}
function map(obj, iterator, context) {
var results = [];
foreach(obj, function(value, index, list) {

View File

@@ -24,7 +24,7 @@ var angularFilterGoogleChartApi;
foreach({
'currency': function(amount){
jQuery(this.$element).toggleClass('ng-format-negative', amount < 0);
this.$element.toggleClass('ng-format-negative', amount < 0);
return '$' + angularFilter['number'].apply(this, [amount, 2]);
},
@@ -60,7 +60,7 @@ foreach({
},
'json': function(object) {
jQuery(this.$element).addClass("ng-monospace");
this.$element.addClass("ng-monospace");
return toJson(object, true);
},

View File

@@ -140,6 +140,11 @@ JQLite.prototype = {
this[0].className = trim((" " + this[0].className + " ").replace(/[\n\t]/g, " ").replace(" " + selector + " ", ""));
},
toggleClass: function(selector, condition) {
var self = this;
(condition ? self.addClass : self.removeClass).call(self, selector);
},
addClass: function( selector ) {
if (!this.hasClass(selector)) {
this[0].className = trim(this[0].className + ' ' + selector);

View File

@@ -22,16 +22,20 @@ function valueAccessor(scope, element) {
var validatorName = element.attr('ng-validate') || NOOP,
validator = compileValidator(validatorName),
required = element.attr('ng-required'),
lastError,
lastError, lastVisible,
invalidWidgets = scope.$invalidWidgets || {markValid:noop, markInvalid:noop};
required = required || required === '';
if (!validator) throw "Validator named '" + validatorName + "' not found.";
function validate(value) {
var error = required && !trim(value) ? "Required" : validator({state:scope, scope:{get:scope.$get, set:scope.$set}}, value);
if (error !== lastError) {
var error = required && !trim(value) ?
"Required" :
validator({state:scope, scope:{get:scope.$get, set:scope.$set}}, value),
visible = isVisible(element);
if (error !== lastError || visible !== lastVisible) {
elementError(element, NG_VALIDATION_ERROR, error);
lastError = error;
if (error)
lastVisible = visible;
if (error && visible)
invalidWidgets.markInvalid(element);
else
invalidWidgets.markValid(element);

View File

@@ -174,34 +174,6 @@ BinderTest.prototype.testButtonElementActionExecutesInScope = function(){
assertTrue(savedCalled);
};
BinderTest.prototype.XtestParseEmptyAnchor = function(){
var binder = this.compile("<div/>").binder;
var location = binder.location;
var anchor = binder.anchor;
location.url = "a#x=1";
binder.parseAnchor();
assertEquals(1, binder.anchor.x);
location.url = "a#";
binder.parseAnchor();
assertTrue("old values did not get removed", !binder.anchor.x);
assertTrue("anchor gor replaced", anchor === binder.anchor);
assertEquals('undefined', typeof (anchor[""]));
};
BinderTest.prototype.XtestParseAnchor = function(){
var binder = this.compile("<div/>").binder;
var location = binder.location;
location.url = "a#x=1";
binder.parseAnchor();
assertEquals(binder.anchor.x, "1");
location.url = "a#a=b&c=%20&d";
binder.parseAnchor();
assertEquals(binder.anchor.a, 'b');
assertEquals(binder.anchor.c, ' ');
assertTrue(binder.anchor.d !== null);
assertTrue(!binder.anchor.x);
};
BinderTest.prototype.testRepeaterUpdateBindings = function(){
var a = this.compile('<ul><LI ng-repeat="item in model.items" ng-bind="item.a"/></ul>');
var form = a.node;
@@ -355,18 +327,6 @@ BinderTest.prototype.testNestedRepeater = function() {
'</div></div>', sortedHtml(a.node));
};
BinderTest.prototype.XtestRadioButtonGetsPrefixed = function () {
var a = this.compile('<div><input ng-repeat="m in model" type="radio" name="m.a" value="on"/></div>');
a.scope.$set('model', ['a1', 'a2']);
a.scope.$eval();
assertEquals('</div>' +
'<#comment></#comment>'+
'<input name="0:m.a" ng-repeat-index="0" type="radio" value="on"></input>'+
'<input name="1:m.a" ng-repeat-index="1" type="radio" value="on"></input></div>',
sortedHtml(a.node));
};
BinderTest.prototype.testHideBindingExpression = function() {
var a = this.compile('<div ng-hide="hidden == 3"/>');
@@ -525,31 +485,6 @@ BinderTest.prototype.testShouldTemplateBindPreElements = function () {
assertEquals('<pre ng-bind-template="Hello {{name}}!">Hello World!</pre>', sortedHtml(c.node));
};
BinderTest.prototype.XtestDissableAutoSubmit = function() {
var c = this.compile('<input type="submit" value="S"/>', null, {autoSubmit:true});
assertEquals(
'<input ng-action="$save()" ng-bind-attr="{"disabled":"{{$invalidWidgets}}"}" type="submit" value="S"></input>',
sortedHtml(c.node));
c = this.compile('<input type="submit" value="S"/>', null, {autoSubmit:false});
assertEquals(
'<input type="submit" value="S"></input>',
sortedHtml(c.node));
};
BinderTest.prototype.XtestSettingAnchorToNullOrUndefinedRemovesTheAnchorFromURL = function() {
var c = this.compile('');
c.binder.location.set("http://server/#a=1&b=2");
c.binder.parseAnchor();
assertEquals('1', c.binder.anchor.a);
assertEquals('2', c.binder.anchor.b);
c.binder.anchor.a = null;
c.binder.anchor.b = null;
c.binder.updateAnchor();
assertEquals('http://server/#', c.binder.location.get());
};
BinderTest.prototype.testFillInOptionValueWhenMissing = function() {
var c = this.compile(
'<select><option selected="true">{{a}}</option><option value="">{{b}}</option><option>C</option></select>');
@@ -570,9 +505,11 @@ BinderTest.prototype.testFillInOptionValueWhenMissing = function() {
expect(optionC.text()).toEqual('C');
};
BinderTest.prototype.XtestValidateForm = function() {
var c = this.compile('<input name="name" ng-required>' +
'<div ng-repeat="item in items"><input name="item.name" ng-required/></div>');
BinderTest.prototype.testValidateForm = function() {
var doc = jqLite(document.body);
doc.append('<div><input name="name" ng-required>' +
'<div ng-repeat="item in items"><input name="item.name" ng-required/></div></div>');
var c = this.compile(doc);
var items = [{}, {}];
c.scope.$set("items", items);
c.scope.$eval();
@@ -599,8 +536,9 @@ BinderTest.prototype.XtestValidateForm = function() {
assertEquals(0, c.scope.$get("$invalidWidgets.length"));
};
BinderTest.prototype.XtestValidateOnlyVisibleItems = function(){
var c = this.compile('<input name="name" ng-required><input ng-show="show" name="name" ng-required>');
BinderTest.prototype.testValidateOnlyVisibleItems = function(){
var c = this.compile('<div><input name="name" ng-required><input ng-show="show" name="name" ng-required></div>');
jqLite(document.body).append(c.node);
c.scope.$set("show", true);
c.scope.$eval();
assertEquals(2, c.scope.$get("$invalidWidgets.length"));
@@ -629,62 +567,6 @@ BinderTest.prototype.testDeleteAttributeIfEvaluatesFalse = function() {
assertChild(5, false);
};
BinderTest.prototype.XtestItShouldCallListenersWhenAnchorChanges = function() {
var log = "";
var c = this.compile('<div ng-watch="$anchor.counter:count = count+1">');
c.scope.$set("count", 0);
c.scope.$watch("$anchor.counter", function(newValue, oldValue){
log += oldValue + "->" + newValue + ";";
});
assertEquals(0, c.scope.$get("count"));
c.binder.location.url = "#counter=1";
c.binder.onUrlChange();
assertEquals(1, c.scope.$get("count"));
c.binder.location.url = "#counter=1";
c.binder.onUrlChange();
assertEquals(1, c.scope.$get("count"));
c.binder.location.url = "#counter=2";
c.binder.onUrlChange();
assertEquals(2, c.scope.$get("count"));
c.binder.location.url = "#counter=2";
c.binder.onUrlChange();
assertEquals(2, c.scope.$get("count"));
c.binder.location.url = "#";
c.binder.onUrlChange();
assertEquals("undefined->1;1->2;2->undefined;", log);
assertEquals(3, c.scope.$get("count"));
};
BinderTest.prototype.XtestParseQueryString = function(){
var binder = new Binder();
assertJsonEquals({"a":"1"}, binder.parseQueryString("a=1"));
assertJsonEquals({"a":"1", "b":"two"}, binder.parseQueryString("a=1&b=two"));
assertJsonEquals({}, binder.parseQueryString(""));
assertJsonEquals({"a":"1", "b":""}, binder.parseQueryString("a=1&b="));
assertJsonEquals({"a":"1", "b":""}, binder.parseQueryString("a=1&b"));
assertJsonEquals({"a":"1", "b":" 2 "}, binder.parseQueryString("a=1&b=%202%20"));
assertJsonEquals({"a a":"1", "b":"2"}, binder.parseQueryString("a%20a=1&b=2"));
};
BinderTest.prototype.XtestSetBinderAnchorTriggersListeners = function(){
expectAsserts(2);
var doc = this.compile("<div/>");
doc.scope.$watch("$anchor.name", function(newVal, oldVal) {
assertEquals("new", newVal);
assertEquals(undefined, oldVal);
});
doc.$anchor.name = "new";
doc.binder.onUrlChange("http://base#name=new");
};
BinderTest.prototype.testItShouldDisplayErrorWhenActionIsSyntacticlyIncorect = function(){
var c = this.compile('<div>' +
'<input type="button" ng-click="greeting=\'ABC\'"/>' +
@@ -768,9 +650,9 @@ BinderTest.prototype.testItBindHiddenInputFields = function(){
assertEquals("abc", x.scope.$get("myName"));
};
BinderTest.prototype.xtestItShouldRenderMultiRootHtmlInBinding = function() {
BinderTest.prototype.XtestItShouldRenderMultiRootHtmlInBinding = function() {
var x = this.compile('<div>before {{a|html}}after</div>');
x.scope.$set("a", "a<b>c</b>d");
x.scope.a = "a<b>c</b>d";
x.scope.$eval();
assertEquals(
'<div>before <span ng-bind="a|html">a<b>c</b>d</span>after</div>',
@@ -790,20 +672,3 @@ BinderTest.prototype.testItShouldUseFormaterForText = function() {
assertEquals('1, 2, 3', input[0].value);
};
BinderTest.prototype.XtestWriteAnchor = function(){
var binder = this.compile("<div/>").binder;
binder.location.set('a');
binder.anchor.a = 'b';
binder.anchor.c = ' ';
binder.anchor.d = true;
binder.updateAnchor();
assertEquals(binder.location.get(), "a#a=b&c=%20&d");
};
BinderTest.prototype.XtestWriteAnchorAsPartOfTheUpdateView = function(){
var binder = this.compile("<div/>").binder;
binder.location.set('a');
binder.anchor.a = 'b';
binder.updateView();
assertEquals(binder.location.get(), "a#a=b");
};

View File

@@ -7,6 +7,6 @@ ConsoleTest.prototype.XtestConsoleWrite = function(){
assertEquals(jqLite(consoleNode).text(), 'Hello world');
assertEquals(jqLite(consoleNode.childNodes[0])[0].className, 'error');
consoleLog("error",["Bye"]);
assertEquals($(consoleNode).text(), 'Hello worldBye');
assertEquals(jqLite(consoleNode).text(), 'Hello worldBye');
consoleNode = null;
};

View File

@@ -1,8 +1,8 @@
FiltersTest = TestCase('FiltersTest');
FiltersTest.prototype.XtestCurrency = function(){
var html = $('<span/>');
var context = {$element:html[0]};
FiltersTest.prototype.testCurrency = function(){
var html = jqLite('<span/>');
var context = {$element:html};
var currency = bind(context, angular.filter.currency);
assertEquals(currency(0), '$0.00');
@@ -24,8 +24,8 @@ FiltersTest.prototype.testFilterThisIsContext = function(){
delete angular.filter['testFn'];
};
FiltersTest.prototype.XtestNumberFormat = function(){
var context = {jqElement:$('<span/>')};
FiltersTest.prototype.testNumberFormat = function(){
var context = {jqElement:jqLite('<span/>')};
var number = bind(context, angular.filter.number);
assertEquals('0', number(0, 0));
@@ -37,11 +37,11 @@ FiltersTest.prototype.XtestNumberFormat = function(){
assertEquals("", number(1/0));
};
FiltersTest.prototype.XtestJson = function () {
assertEquals(toJson({a:"b"}, true), angular.filter.json({a:"b"}));
FiltersTest.prototype.testJson = function () {
assertEquals(toJson({a:"b"}, true), angular.filter.json.call({$element:jqLite('<div></div>')}, {a:"b"}));
};
FiltersTest.prototype.XtestPackageTracking = function () {
FiltersTest.prototype.testPackageTracking = function () {
var assert = function(title, trackingNo) {
var val = angular.filter.trackPackage(trackingNo, title);
assertNotNull("Did Not Match: " + trackingNo, val);
@@ -69,7 +69,7 @@ FiltersTest.prototype.XtestPackageTracking = function () {
assert('USPS', '9102801438635051633253');
};
FiltersTest.prototype.XtestLink = function() {
FiltersTest.prototype.testLink = function() {
var assert = function(text, url, obj){
var val = angular.filter.link(obj);
assertEquals(angular.filter.Meta.TAG, val.TAG);
@@ -80,14 +80,7 @@ FiltersTest.prototype.XtestLink = function() {
assert("a@b.com", "mailto:a@b.com", "a@b.com");
};
FiltersTest.prototype.XtestBytes = function(){
var controller = new FileController();
assertEquals(angular.filter.bytes(123), '123 bytes');
assertEquals(angular.filter.bytes(1234), '1.2 KB');
assertEquals(angular.filter.bytes(1234567), '1.1 MB');
};
FiltersTest.prototype.XtestImage = function(){
FiltersTest.prototype.testImage = function(){
assertEquals(null, angular.filter.image());
assertEquals(null, angular.filter.image({}));
assertEquals(null, angular.filter.image(""));
@@ -100,7 +93,7 @@ FiltersTest.prototype.XtestImage = function(){
angular.filter.image({url:"abc"}, 10, 20).html);
};
FiltersTest.prototype.XtestQRcode = function() {
FiltersTest.prototype.testQRcode = function() {
assertEquals(
'<img width="200" height="200" src="http://chart.apis.google.com/chart?chl=Hello%20world&chs=200x200&cht=qr"/>',
angular.filter.qrcode('Hello world').html);
@@ -109,17 +102,17 @@ FiltersTest.prototype.XtestQRcode = function() {
angular.filter.qrcode('http://server?a&b=c', 100).html);
};
FiltersTest.prototype.XtestLowercase = function() {
FiltersTest.prototype.testLowercase = function() {
assertEquals('abc', angular.filter.lowercase('AbC'));
assertEquals(null, angular.filter.lowercase(null));
};
FiltersTest.prototype.XtestUppercase = function() {
FiltersTest.prototype.testUppercase = function() {
assertEquals('ABC', angular.filter.uppercase('AbC'));
assertEquals(null, angular.filter.uppercase(null));
};
FiltersTest.prototype.XtestLineCount = function() {
FiltersTest.prototype.testLineCount = function() {
assertEquals(1, angular.filter.linecount(null));
assertEquals(1, angular.filter.linecount(''));
assertEquals(1, angular.filter.linecount('a'));
@@ -127,30 +120,30 @@ FiltersTest.prototype.XtestLineCount = function() {
assertEquals(3, angular.filter.linecount('a\nb\nc'));
};
FiltersTest.prototype.XtestIf = function() {
FiltersTest.prototype.testIf = function() {
assertEquals('A', angular.filter['if']('A', true));
assertEquals(undefined, angular.filter['if']('A', false));
};
FiltersTest.prototype.XtestUnless = function() {
FiltersTest.prototype.testUnless = function() {
assertEquals('A', angular.filter.unless('A', false));
assertEquals(undefined, angular.filter.unless('A', true));
};
FiltersTest.prototype.XtestGoogleChartApiEncode = function() {
FiltersTest.prototype.testGoogleChartApiEncode = function() {
assertEquals(
'<img width="200" height="200" src="http://chart.apis.google.com/chart?chl=Hello world&chs=200x200&cht=qr"/>',
angular.filter.googleChartApi.encode({cht:"qr", chl:"Hello world"}).html);
};
FiltersTest.prototype.XtestHtml = function() {
FiltersTest.prototype.testHtml = function() {
assertEquals(
"a<b>c</b>d",
angular.filter.html("a<b>c</b>d").html);
assertTrue(angular.filter.html("a<b>c</b>d") instanceof angular.filter.Meta);
};
FiltersTest.prototype.XtestLinky = function() {
FiltersTest.prototype.testLinky = function() {
var linky = angular.filter.linky;
assertEquals(
'<a href="http://ab">http://ab</a> ' +

View File

@@ -404,36 +404,6 @@ ParserTest.prototype.testMissingThrowsError = function() {
}
};
ParserTest.prototype.XtestItShouldParseOnChangeIntoHashSet = function () {
var scope = createScope({count:0});
scope.watch("$anchor.a:count=count+1;$anchor.a:count=count+20;b:count=count+300");
scope.watchListeners["$anchor.a"].listeners[0]();
assertEquals(1, scope.$get("count"));
scope.watchListeners["$anchor.a"].listeners[1]();
assertEquals(21, scope.$get("count"));
scope.watchListeners["b"].listeners[0]({scope:scope});
assertEquals(321, scope.$get("count"));
};
ParserTest.prototype.XtestItShouldParseOnChangeBlockIntoHashSet = function () {
var scope = createScope({count:0});
var listeners = {a:[], b:[]};
scope.watch("a:{count=count+1;count=count+20;};b:count=count+300",
function(n, fn){listeners[n].push(fn);});
assertEquals(1, scope.watchListeners.a.listeners.length);
assertEquals(1, scope.watchListeners.b.listeners.length);
scope.watchListeners["a"].listeners[0]();
assertEquals(21, scope.$get("count"));
scope.watchListeners["b"].listeners[0]();
assertEquals(321, scope.$get("count"));
};
ParserTest.prototype.XtestItShouldParseEmptyOnChangeAsNoop = function () {
var scope = createScope();
scope.watch("", function(){fail();});
};
ParserTest.prototype.testItShouldCreateClosureFunctionWithNoArguments = function () {
var scope = createScope();
var fn = scope.$eval("{:value}");
@@ -462,16 +432,6 @@ ParserTest.prototype.testItShouldHaveDefaultArugument = function(){
assertEquals(4, fn(2));
};
ParserTest.prototype.XtestReturnFunctionsAreNotBound = function(){
var scope = createScope();
scope.entity("Group", new DataStore());
var Group = scope.$get("Group");
assertEquals("eval Group", "function", typeof scope.$eval("Group"));
assertEquals("direct Group", "function", typeof Group);
assertEquals("eval Group.all", "function", typeof scope.$eval("Group.query"));
assertEquals("direct Group.all", "function", typeof Group.query);
};
ParserTest.prototype.testDoubleNegationBug = function (){
var scope = createScope();
assertEquals(true, scope.$eval('true'));

View File

@@ -19,46 +19,33 @@ describe("ScenarioSpec: Compilation", function(){
});
describe("ScenarioSpec: Scope", function(){
xit("should have set, get, eval, $init, updateView methods", function(){
it("should have set, get, eval, $init, updateView methods", function(){
var scope = compile('<div>{{a}}</div>').$init();
scope.$eval("$invalidWidgets.push({})");
expect(scope.$set("a", 2)).toEqual(2);
expect(scope.$get("a")).toEqual(2);
expect(scope.$eval("a=3")).toEqual(3);
scope.$eval();
expect(scope.$eval("$invalidWidgets")).toEqual([]);
expect(jqLite(scope.$element).text()).toEqual('3');
});
xit("should have $ objects", function(){
var scope = compile('<div></div>', {a:"b"});
expect(scope.$get('$anchor')).toBeDefined();
it("should have $ objects", function(){
var scope = compile('<div></div>', {$config: {a:"b"}});
expect(scope.$get('$location')).toBeDefined();
expect(scope.$get('$eval')).toBeDefined();
expect(scope.$get('$config')).toBeDefined();
expect(scope.$get('$config.a')).toEqual("b");
expect(scope.$get('$datastore')).toBeDefined();
});
});
xdescribe("ScenarioSpec: configuration", function(){
describe("ScenarioSpec: configuration", function(){
it("should take location object", function(){
var url = "http://server/#book=moby";
var onUrlChange;
var location = {
listen:function(fn){onUrlChange=fn;},
set:function(u){url = u;},
get:function(){return url;}
};
var scope = compile("<div>{{$anchor}}</div>", {location:location});
var $anchor = scope.$get('$anchor');
expect($anchor.book).toBeUndefined();
expect(onUrlChange).toBeUndefined();
scope.$init();
expect($anchor.book).toEqual('moby');
expect(onUrlChange).toBeDefined();
url = "http://server/#book=none";
onUrlChange();
expect($anchor.book).toEqual('none');
var url = "http://server/#?book=moby";
var scope = compile("<div>{{$location}}</div>");
var $location = scope.$get('$location');
expect($location.hashSearch.book).toBeUndefined();
scope.$browser.setUrl(url);
scope.$browser.fireUrlWatchers();
expect($location.hashSearch.book).toEqual('moby');
});
});

View File

@@ -1,20 +1,20 @@
ValidatorTest = TestCase('ValidatorTest');
ValidatorTest.prototype.XtestItShouldHaveThisSet = function() {
expectAsserts(5);
var self;
ValidatorTest.prototype.testItShouldHaveThisSet = function() {
var validator = {};
angular.validator.myValidator = function(first, last){
assertEquals('misko', first);
assertEquals('hevery', last);
self = this;
validator.first = first;
validator.last = last;
validator._this = this;
};
var c = compile('<input name="name" ng-validate="myValidator:\'hevery\'"/>');
c.scope.$set('name', 'misko');
c.scope.$set('state', 'abc');
c.scope.$eval();
assertEquals('abc', self.state);
assertEquals('misko', self.name);
assertEquals('name', self.$element.name);
var scope = compile('<input name="name" ng-validate="myValidator:\'hevery\'"/>');
scope.name = 'misko';
scope.$init();
assertEquals('misko', validator.first);
assertEquals('hevery', validator.last);
assertSame(scope, validator._this);
delete angular.validator.myValidator;
scope.$element.remove();
};
ValidatorTest.prototype.testRegexp = function() {

View File

@@ -45,6 +45,12 @@ MockBrowser.prototype = {
watchUrl: function(fn) {
this.watches.push(fn);
},
fireUrlWatchers: function() {
for(var i=0; i<this.watches.length; i++) {
this.watches[i](this.url);
}
}
};

View File

@@ -141,20 +141,22 @@ describe("directives", function(){
it('should ng-show', function(){
var scope = compile('<div ng-hide="hide"></div>');
jqLite(document.body).append(scope.$element);
scope.$eval();
expect(isVisible(element)).toEqual(true);
expect(isVisible(scope.$element)).toEqual(true);
scope.$set('hide', true);
scope.$eval();
expect(isVisible(element)).toEqual(false);
expect(isVisible(scope.$element)).toEqual(false);
});
it('should ng-hide', function(){
var scope = compile('<div ng-show="show"></div>');
jqLite(document.body).append(scope.$element);
scope.$eval();
expect(isVisible(element)).toEqual(false);
expect(isVisible(scope.$element)).toEqual(false);
scope.$set('show', true);
scope.$eval();
expect(isVisible(element)).toEqual(true);
expect(isVisible(scope.$element)).toEqual(true);
});
it('should ng-controller', function(){

View File

@@ -7,13 +7,13 @@ BinderTest.prototype.testExpandEntityTagWithName = function(){
assertEquals("friend", c.scope.$get("friend.$$anchor"));
};
BinderTest.prototype.XtestExpandSubmitButtonToAction = function(){
BinderTest.prototype.testExpandSubmitButtonToAction = function(){
var html = this.compileToHtml('<input type="submit" value="Save">');
assertTrue(html, html.indexOf('ng-action="$save()"') > 0 );
assertTrue(html, html.indexOf('ng-bind-attr="{"disabled":"{{$invalidWidgets}}"}"') > 0 );
};
BinderTest.prototype.XtestReplaceFileUploadWithSwf = function(){
BinderTest.prototype.testReplaceFileUploadWithSwf = function(){
expectAsserts(1);
var form = jQuery("body").append('<div id="testTag"><input type="file"></div>');
form.data('scope', new Scope());

View File

@@ -0,0 +1,62 @@
ParserTest.prototype.testReturnFunctionsAreNotBound = function(){
var scope = createScope();
scope.entity("Group", new DataStore());
var Group = scope.$get("Group");
assertEquals("eval Group", "function", typeof scope.$eval("Group"));
assertEquals("direct Group", "function", typeof Group);
assertEquals("eval Group.all", "function", typeof scope.$eval("Group.query"));
assertEquals("direct Group.all", "function", typeof Group.query);
};
ParserTest.prototype.XtestItShouldParseEmptyOnChangeAsNoop = function () {
var scope = createScope();
scope.watch("", function(){fail();});
};
ParserTest.prototype.XtestItShouldParseOnChangeIntoHashSet = function () {
var scope = createScope({count:0});
scope.watch("$anchor.a:count=count+1;$anchor.a:count=count+20;b:count=count+300");
scope.watchListeners["$anchor.a"].listeners[0]();
assertEquals(1, scope.$get("count"));
scope.watchListeners["$anchor.a"].listeners[1]();
assertEquals(21, scope.$get("count"));
scope.watchListeners["b"].listeners[0]({scope:scope});
assertEquals(321, scope.$get("count"));
};
ParserTest.prototype.XtestItShouldParseOnChangeBlockIntoHashSet = function () {
var scope = createScope({count:0});
var listeners = {a:[], b:[]};
scope.watch("a:{count=count+1;count=count+20;};b:count=count+300",
function(n, fn){listeners[n].push(fn);});
assertEquals(1, scope.watchListeners.a.listeners.length);
assertEquals(1, scope.watchListeners.b.listeners.length);
scope.watchListeners["a"].listeners[0]();
assertEquals(21, scope.$get("count"));
scope.watchListeners["b"].listeners[0]();
assertEquals(321, scope.$get("count"));
};
FiltersTest.prototype.testBytes = function(){
var controller = new FileController();
assertEquals(angular.filter.bytes(123), '123 bytes');
assertEquals(angular.filter.bytes(1234), '1.2 KB');
assertEquals(angular.filter.bytes(1234567), '1.1 MB');
};
BinderTest.prototype.testDissableAutoSubmit = function() {
var c = this.compile('<input type="submit" value="S"/>', null, {autoSubmit:true});
assertEquals(
'<input ng-action="$save()" ng-bind-attr="{"disabled":"{{$invalidWidgets}}"}" type="submit" value="S"></input>',
sortedHtml(c.node));
c = this.compile('<input type="submit" value="S"/>', null, {autoSubmit:false});
assertEquals(
'<input type="submit" value="S"></input>',
sortedHtml(c.node));
};

View File

@@ -66,7 +66,9 @@ describe("service $invalidWidgets", function(){
});
it("should count number of invalid widgets", function(){
var scope = compile('<input name="price" ng-required></input>').$init();
var doc = jqLite(window.document.body);
doc.append('<input name="price" ng-required></input>');
var scope = compile(doc).$init();
expect(scope.$invalidWidgets.length).toEqual(1);
scope.price = 123;
scope.$eval();

View File

@@ -74,19 +74,18 @@ function sortedHtml(element) {
return html;
}
function isVisible(node) {
function isCssVisible(node) {
var display = node.css('display');
if (display == 'block') display = "";
return display != 'none';
}
function assertHidden(node) {
var display = node.css('display');
assertFalse("Node should be hidden but vas visible: " + sortedHtml(node), isVisible(node));
assertFalse("Node should be hidden but vas visible: " + sortedHtml(node), isCssVisible(node));
}
function assertVisible(node) {
assertTrue("Node should be visible but vas hidden: " + sortedHtml(node), isVisible(node));
assertTrue("Node should be visible but vas hidden: " + sortedHtml(node), isCssVisible(node));
}
function assertJsonEquals(expected, actual) {