Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,18 @@ var CONFIG = {
formatDart: {
packageName: 'dart_style',
args: ['dart_style:format', '-w', 'dist/dart']
},
test: {
js: {
cjs: [
'/angular2/test/core/compiler/**/*_spec.js',
'/angular2/test/directives/**/*_spec.js',
'/angular2/test/forms/**/*_spec.js'
]
}
}
};
CONFIG.test.js.cjs = CONFIG.test.js.cjs.map(function(s) {return CONFIG.dest.js.cjs + s});

// ------------
// clean
Expand Down Expand Up @@ -553,7 +563,7 @@ gulp.task('test.unit.dart/ci', function (done) {
singleRun: true, reporters: ['dots'], browsers: getBrowsersFromCLI()}, done);
});
gulp.task('test.unit.cjs', function (done) {
return gulp.src(CONFIG.dest.js.cjs + '/angular2/test/core/compiler/**/*_spec.js').pipe(jasmine({verbose: true, includeStackTrace: true}));
return gulp.src(CONFIG.test.js.cjs).pipe(jasmine(/*{verbose: true, includeStackTrace: true}*/));
});

// ------------------
Expand Down
53 changes: 37 additions & 16 deletions modules/angular2/src/dom/parse5_adapter.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ var url = require('url');
import {List, MapWrapper, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
import {DomAdapter, setRootDomAdapter} from './dom_adapter';
import {BaseException, isPresent, isBlank} from 'angular2/src/facade/lang';
import {SelectorMatcher, CssSelector} from 'angular2/src/core/compiler/selector';

var _attrToPropMap = {
'inner-html': 'innerHTML',
Expand All @@ -35,27 +36,55 @@ export class Parse5DomAdapter extends DomAdapter {
throw _notImplemented('query');
}
querySelector(el, selector:string) {
throw _notImplemented('querySelector');
return this.querySelectorAll(el, selector)[0];
}
querySelectorAll(el, selector:string) {
//TODO: use selector class from core. For now, only works for .classname ...
var res = ListWrapper.create();
var _recursive = (result, node, className) => {
if (this.hasClass(node, className)) {
var _recursive = (result, node, selector, matcher) => {
if (this.elementMatches(node, selector, matcher)) {
ListWrapper.push(result, node);
}
var cNodes = node.childNodes;
if (cNodes && cNodes.length > 0) {
for (var i = 0; i < cNodes.length; i++) {
_recursive(result, cNodes[i], className);
_recursive(result, cNodes[i], selector, matcher);
}
}
};
_recursive(res, el, selector.substring(1));
var matcher = new SelectorMatcher();
matcher.addSelectable(CssSelector.parse(selector));
_recursive(res, el, selector, matcher);
return res;
}
elementMatches(node, selector:string, matcher = null):boolean {
var result = false;
if (selector && selector.charAt(0) == "#") {
result = this.getAttribute(node, 'id') == selector.substring(1);
} else if (selector) {
var result = false;
if (matcher == null) {
matcher = new SelectorMatcher();
matcher.addSelectable(CssSelector.parse(selector));
}

var cssSelector = new CssSelector();
cssSelector.setElement(this.tagName(node));
if (node.attribs) {
for (var attrName in node.attribs) {
cssSelector.addAttribute(attrName, node.attribs[attrName]);
}
}
var classList = this.classList(node);
for (var i = 0; i < classList.length; i++) {
cssSelector.addClassName(classList[i]);
}

matcher.match(cssSelector, function(selector, cb) {result = true;});
}
return result;
}
on(el, evt, listener) {
throw _notImplemented('on');
//Do nothing, in order to not break forms integration tests
}
dispatchEvent(el, evt) {
throw _notImplemented('dispatchEvent');
Expand Down Expand Up @@ -316,7 +345,7 @@ export class Parse5DomAdapter extends DomAdapter {
return res;
}
getAttribute(element, attribute:string) {
return element.attribs.hasOwnProperty(attribute) ? element.attribs[attribute] : null;
return element.attribs && element.attribs.hasOwnProperty(attribute)? element.attribs[attribute]: null;
}
setAttribute(element, attribute:string, value:string) {
if (attribute) {
Expand All @@ -341,14 +370,6 @@ export class Parse5DomAdapter extends DomAdapter {
}
return defDoc;
}
elementMatches(n, selector:string):boolean {
//TODO: use selector class from core.
if (selector && selector.charAt(0) == ".") {
return this.hasClass(n, selector.substring(1));
} else {
return n.tagName == selector;
}
}
isTemplateElement(el:any):boolean {
return this.isElementNode(el) && this.tagName(el) === "template";
}
Expand Down
16 changes: 8 additions & 8 deletions modules/angular2/src/forms/form_builder.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
import {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';
import {isPresent} from 'angular2/src/facade/lang';
import {ControlGroup, Control, OptionalControl, OptionalControlGroup} from 'angular2/forms';
import * as modelModule from './model';


export class FormBuilder {
group(controlsConfig, extra = null):ControlGroup {
group(controlsConfig, extra = null):modelModule.ControlGroup {
var controls = this._reduceControls(controlsConfig);
var optionals = isPresent(extra) ? StringMapWrapper.get(extra, "optionals") : null;
var validator = isPresent(extra) ? StringMapWrapper.get(extra, "validator") : null;

if (isPresent(validator)) {
return new ControlGroup(controls, optionals, validator);
return new modelModule.ControlGroup(controls, optionals, validator);
} else {
return new ControlGroup(controls, optionals);
return new modelModule.ControlGroup(controls, optionals);
}
}

control(value, validator:Function = null):Control {
control(value, validator:Function = null):modelModule.Control {
if (isPresent(validator)) {
return new Control(value, validator);
return new modelModule.Control(value, validator);
} else {
return new Control(value);
return new modelModule.Control(value);
}
}

Expand All @@ -33,7 +33,7 @@ export class FormBuilder {
}

_createControl(controlConfig) {
if (controlConfig instanceof Control || controlConfig instanceof ControlGroup) {
if (controlConfig instanceof modelModule.Control || controlConfig instanceof modelModule.ControlGroup) {
return controlConfig;

} else if (ListWrapper.isList(controlConfig)) {
Expand Down
10 changes: 5 additions & 5 deletions modules/angular2/src/forms/validators.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import {isBlank, isPresent} from 'angular2/src/facade/lang';
import {List, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';

import {ControlGroup, Control} from 'angular2/forms';
import * as modelModule from './model';

export function required(c:Control) {
export function required(c:modelModule.Control) {
return isBlank(c.value) || c.value == "" ? {"required" : true} : null;
}

export function nullValidator(c:Control) {
export function nullValidator(c:modelModule.Control) {
return null;
}

export function compose(validators:List<Function>):Function {
return function(c:Control) {
return function(c:modelModule.Control) {
var res = ListWrapper.reduce(validators, (res, validator) => {
var errors = validator(c);
return isPresent(errors) ? StringMapWrapper.merge(res, errors) : res;
Expand All @@ -21,7 +21,7 @@ export function compose(validators:List<Function>):Function {
}
}

export function controlGroupValidator(c:ControlGroup) {
export function controlGroupValidator(c:modelModule.ControlGroup) {
var res = {};
StringMapWrapper.forEach(c.controls, (control, name) => {
if (c.contains(name) && isPresent(control.errors)) {
Expand Down
28 changes: 14 additions & 14 deletions modules/angular2/test/directives/if_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export function main() {
createView(pv);
cd.detectChanges();

expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello');
async.done();
});
Expand All @@ -86,7 +86,7 @@ export function main() {
createView(pv);
cd.detectChanges();

expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello2');
async.done();
});
Expand All @@ -98,18 +98,18 @@ export function main() {

component.booleanCondition = false;
cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(0);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(0);
expect(DOM.getText(view.nodes[0])).toEqual('');


component.booleanCondition = true;
cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello');

component.booleanCondition = false;
cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(0);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(0);
expect(DOM.getText(view.nodes[0])).toEqual('');

async.done();
Expand All @@ -127,18 +127,18 @@ export function main() {
createView(pv);

cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(3);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(3);
expect(DOM.getText(view.nodes[0])).toEqual('helloNumberhelloStringhelloFunction');

component.numberCondition = 0;
cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('helloString');

component.numberCondition = 1;
component.stringCondition = "bar";
cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('helloNumber');
async.done();
});
Expand All @@ -151,7 +151,7 @@ export function main() {
createView(pv);
cd.detectChanges();

expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello');
async.done();
});
Expand All @@ -162,7 +162,7 @@ export function main() {
createView(pv);
cd.detectChanges();

expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello');
async.done();
});
Expand All @@ -173,7 +173,7 @@ export function main() {
createView(pv);
cd.detectChanges();

expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(0);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(0);
expect(DOM.getText(view.nodes[0])).toEqual('');
async.done();
});
Expand All @@ -184,12 +184,12 @@ export function main() {
createView(pv);

cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello');

component.numberCondition = 2;
cd.detectChanges();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(1);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(1);
expect(DOM.getText(view.nodes[0])).toEqual('hello');

async.done();
Expand All @@ -215,7 +215,7 @@ export function main() {
compileWithTemplate('<div><copy-me template="if numberCondition">hello</copy-me></div>').then((pv) => {
createView(pv);
expect(function(){cd.detectChanges();}).toThrowError();
expect(view.nodes[0].querySelectorAll('copy-me').length).toEqual(0);
expect(DOM.querySelectorAll(view.nodes[0], 'copy-me').length).toEqual(0);
expect(DOM.getText(view.nodes[0])).toEqual('');
async.done();
});
Expand Down
Loading