Add Inspector specs

This commit is contained in:
John Firebaugh
2012-11-25 16:21:15 -04:00
parent 66da508836
commit f73f1a5429
4 changed files with 138 additions and 0 deletions
+2
View File
@@ -95,6 +95,7 @@ iD.Inspector = function() {
d3.select(this)
.append('button')
.attr('class', 'save')
.text('Save')
.on('click', function() {
event.change(entity, newtags(table));
@@ -102,6 +103,7 @@ iD.Inspector = function() {
d3.select(this)
.append('button')
.attr('class', 'delete')
.text('Delete')
.on('click', function() {
event.remove(entity);
+2
View File
@@ -7,6 +7,7 @@
<link rel="stylesheet" type="text/css" href="lib/jasmine-1.2.0/jasmine.css">
<script type="text/javascript" src="lib/jasmine-1.2.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-1.2.0/jasmine-html.js"></script>
<script type="text/javascript" src="lib/happen.js"></script>
<!-- include source files here... -->
<script type='text/javascript' src='../js/lib/lodash.js'></script>
@@ -47,6 +48,7 @@
<script type="text/javascript" src="spec/Map.js"></script>
<script type="text/javascript" src="spec/Connection.js"></script>
<script type="text/javascript" src="spec/GeoJSON.js"></script>
<script type="text/javascript" src="spec/Inspector.js"></script>
<script type="text/javascript">
(function() {
+91
View File
@@ -0,0 +1,91 @@
!(function(context) {
var h = {};
// Make inheritance bearable: clone one level of properties
function extend(child, parent) {
for (var property in parent) {
if (typeof child[property] == 'undefined') {
child[property] = parent[property];
}
}
return child;
}
h.once = function(x, o) {
var evt;
if (o.type.slice(0, 3) === 'key') {
if (typeof Event === 'function') {
evt = new Event(o.type);
evt.keyCode = o.keyCode || 0;
evt.charCode = o.charCode || 0;
evt.shift = o.shift || false;
evt.meta = o.meta || false;
evt.ctrl = o.ctrl || false;
evt.alt = o.alt || false;
} else {
evt = document.createEvent('KeyboardEvent');
// https://developer.mozilla.org/en/DOM/event.initKeyEvent
// https://developer.mozilla.org/en/DOM/KeyboardEvent
evt[(evt.initKeyEvent) ? 'initKeyEvent'
: 'initKeyboardEvent'](
o.type, // in DOMString typeArg,
true, // in boolean canBubbleArg,
true, // in boolean cancelableArg,
null, // in nsIDOMAbstractView viewArg, Specifies UIEvent.view. This value may be null.
o.ctrl || false, // in boolean ctrlKeyArg,
o.alt || false, // in boolean altKeyArg,
o.shift || false, // in boolean shiftKeyArg,
o.meta || false, // in boolean metaKeyArg,
o.keyCode || 0, // in unsigned long keyCodeArg,
o.charCode || 0 // in unsigned long charCodeArg);
);
}
} else {
evt = document.createEvent('MouseEvents');
// https://developer.mozilla.org/en/DOM/event.initMouseEvent
evt.initMouseEvent(o.type,
true, // canBubble
true, // cancelable
window, // 'AbstractView'
o.clicks || 0, // click count
o.screenX || 0, // screenX
o.screenY || 0, // screenY
o.clientX || 0, // clientX
o.clientY || 0, // clientY
o.ctrl || 0, // ctrl
o.alt || false, // alt
o.shift || false, // shift
o.meta || false, // meta
o.button || false, // mouse button
null // relatedTarget
);
}
x.dispatchEvent(evt);
};
var shortcuts = ['click', 'mousedown', 'mouseup', 'mousemove', 'keydown', 'keyup', 'keypress'],
s, i = 0;
while (s = shortcuts[i++]) {
h[s] = (function(s) {
return function(x, o) {
h.once(x, extend(o || {}, { type: s }));
};
})(s);
}
h.dblclick = function(x, o) {
h.once(x, extend(o || {}, {
type: 'dblclick',
clicks: 2
}));
};
this.happen = h;
if (typeof module !== 'undefined') {
module.exports = this.happen;
}
})(this);
+43
View File
@@ -0,0 +1,43 @@
describe("Inspector", function () {
var inspector, element, entity = iD.Entity({type: 'node', id: "n12345", tags: {}});
beforeEach(function () {
inspector = iD.Inspector();
element = d3.select('body')
.append('div')
.attr('id', 'inspector-wrap')
.datum(entity)
.call(inspector);
});
afterEach(function () {
element.remove();
});
it("emits a close event when the close button is clicked", function () {
var spy = jasmine.createSpy();
inspector.on('close', spy);
happen.click(element.select('.close').node());
expect(spy).toHaveBeenCalledWith(entity);
});
it("emits a change event when the save button is clicked", function () {
var spy = jasmine.createSpy();
inspector.on('change', spy);
happen.click(element.select('.save').node());
expect(spy).toHaveBeenCalledWith(entity, { '': '' });
});
it("emits a remove event when the delete button is clicked", function () {
var spy = jasmine.createSpy();
inspector.on('remove', spy);
happen.click(element.select('.delete').node());
expect(spy).toHaveBeenCalledWith(entity);
});
});