Some node.js test hacking.

git-svn-id: http://svn.openlayers.org/trunk/openlayers@11551 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2011-02-27 00:39:39 +00:00
parent 7ede83ad75
commit 709863eeae
5 changed files with 155 additions and 0 deletions

106
tests/node.js/mockdom.js Normal file
View File

@@ -0,0 +1,106 @@
XMLHttpRequest = function() {
return {
'open': function() { },
'send': function() { }
}
};
alert = print;
navigator = {
'appName': 'mockdom',
'userAgent': 'mockdom',
'appVersion': '0.1',
'language': 'en',
'userLanguage': 'en'
}
element = function(type) {
type = type || "";
return {
'childNodes': [],
'className': '',
'tagName': type.toUpperCase(),
'style': {},
'setAttribute': function(attr, value) {
this[attr] = value;
},
'appendChild': function(element) {
if (this.childNodes.length) {
this.childNodes[this.childNodes.length - 1].nextSibling = element;
} else {
this.firstChild = element;
}
element.parentNode = this;
this.childNodes.push(element);
},
'removeChild': function(element) {
var i = this.childNodes.indexOf(element);
this.childNodes.splice(i, 1);
},
'addEventListener': function() {
},
'removeEventListener': function() {
},
'getElementsByTagName': function(name, externalList) {
var uc = name.toUpperCase();
var list = externalList || [];
for(var i = 0; i < this.childNodes.length; i++) {
if (this.childNodes[i].tagName == uc) {
list.push(this.childNodes[i]);
}
this.childNodes[i].getElementsByTagName(name, list);
}
return list;
},
'getElementById': function(id) {
for(var i = 0; i < this.childNodes.length; i++) {
if (this.childNodes[i].id == id) {
return this.childNodes[i];
} else {
var elem = this.childNodes[i].getElementById(id);
if (elem) {
return elem
}
}
}
}
}
};
document = element();
document.createElement = function(type) {
return element(type);
};
document.createTextNode = function(text) {
var e = element("Text");
e.innerHTML = text;
}
document.appendChild(element("head"));
document.body = element("body");
document.appendChild(document.body);
window = {
'addEventListener': function() {
},
'getSelection': function() {
return {
collapseToStart: function() {}
}
},
document: document,
navigator: navigator,
location: {
href: '#',
port: '',
hostname: 'openlayers.org',
host: 'openlayers.org',
proto: 'https'
}
};
document.location = window.location;
window.Function = Function;

View File

@@ -0,0 +1,12 @@
# This build config is supposed to be used for the units tests with "mode=build"
[first]
mockdom.js
[last]
node.js
[include]
[exclude]
OpenLayers.js
Firebug/firebug.js

1
tests/node.js/node.js Normal file
View File

@@ -0,0 +1 @@
exports.OpenLayers = OpenLayers;

26
tests/node.js/run-test.js Normal file
View File

@@ -0,0 +1,26 @@
// Requires:
/// 0. nodejs
// 1. jsdom installed (npm install jsdom)
// 2. A build profile with mockdom.js included in [first], and node.js
// inclded in [last], at ../../build/OpenLayers.js , like node-tests.js.
// 3. Run with node run-tests.js
//
// Missing: integration with a solid node.js testrunner.
var jsdom = require('jsdom');
jsdom.env('<html><body></body></html>', function(errors, window) {
for (var i in window) {
if (i == "console") {
continue;
}
eval(i+"=window['"+i+"'];");
}
OpenLayers = require("../../build/OpenLayers.js")['OpenLayers'];
var map = new OpenLayers.Map(document.createElement("map"));
map.addLayer(new OpenLayers.Layer("", {isBaseLayer:true}));
map.setCenter(new OpenLayers.LonLat(-71,42), 10);
var px = map.getPixelFromLonLat(map.getLonLatFromPixel(new OpenLayers.Pixel(100,100)));
console.log(px);
var px = map.getLonLatFromPixel(map.getPixelFromLonLat(new OpenLayers.LonLat(10,10)));
console.log(px);
});

10
tests/node.js/run.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
cp mockdom.js node.js ../../lib
cp node-tests.cfg ../../build
cd ../../build
python build.py -c none node-tests
cd ../tests/node.js/
node run-test.js
rm ../../lib/mockdom.js
rm ../../lib/node.js