2 new revisions:
Revision: 7242f05b38be
Author: Janne Härkönen <[email protected]>
Date: Tue Jun 7 04:09:07 2011
Log: large code style cleanup, also changed signatures of Suite(),
Test() a...
http://code.google.com/p/robotframework/source/detail?r=7242f05b38be
Revision: 02ed31f16d9d
Author: Janne Härkönen <[email protected]>
Date: Tue Jun 7 04:09:41 2011
Log: Automated merge with https://robotframework.googlecode.com/hg/
http://code.google.com/p/robotframework/source/detail?r=02ed31f16d9d
==============================================================================
Revision: 7242f05b38be
Author: Janne Härkönen <[email protected]>
Date: Tue Jun 7 04:09:07 2011
Log: large code style cleanup, also changed signatures of Suite(),
Test() and Keyword()
http://code.google.com/p/robotframework/source/detail?r=7242f05b38be
Modified:
/src/robot/webcontent/js/model.js
/src/robot/webcontent/js/testdata.js
=======================================
--- /src/robot/webcontent/js/model.js Mon Jun 6 08:38:20 2011
+++ /src/robot/webcontent/js/model.js Tue Jun 7 04:09:07 2011
@@ -1,4 +1,4 @@
-window.model = (function () {
+window.model = function () {
var STATUS = {
pass:"pass",
@@ -11,44 +11,52 @@
teardown:'TEARDOWN'
};
- function Suite(parent, name, source, doc, status, times, stats,
metadata) {
- var suite = {};
- populateCommonAttrs(suite, name, doc, status, times);
- suite.parent = parent;
- suite.source = source;
- suite.fullname = parent ? parent.fullname + "." + name : name;
- suite.statusText = status.status.toUpperCase();
- setStats(suite, stats);
- suite.metadata = metadata;
+ function Suite(data) {
+ var suite = createModelObject(data);
+ suite.source = data.source;
+ suite.fullname = data.parent ? data.parent.fullname + "." +
data.name : data.name;
+ suite.statusText = data.status.status.toUpperCase();
+ setStats(suite, data.statistics);
+ suite.metadata = data.metadata;
suite.populateKeywords = createIterablePopulator("Keyword");
suite.populateTests = createIterablePopulator("Test");
suite.populateSuites = createIterablePopulator("Suite");
- suite.children = function () { return
suite.keywords().concat(suite.tests()).concat(suite.suites()); };
- suite.hasTeardownFailure = function () { return
suiteTeardownFailed(suite) || status.parentSuiteTeardownFailed; };
+ suite.children = function () {
+ return
suite.keywords().concat(suite.tests()).concat(suite.suites());
+ };
+ suite.hasTeardownFailure = function () {
+ return suiteTeardownFailed(suite) ||
data.status.parentSuiteTeardownFailed;
+ };
suite.getFailureMessage = function () {
- if(status.parentSuiteTeardownFailed)
+ if (data.status.parentSuiteTeardownFailed)
return "Teardown of the parent suite failed.";
- if(suite.hasTeardownFailure())
- return "Suite teardown failed:\n"+
-
suite.keyword(suite.numberOfKeywords-1).message(0).text;
+ if (suite.hasTeardownFailure())
+ return "Suite teardown failed:\n" +
+ suite.keyword(suite.numberOfKeywords -
1).message(0).text;
};
suite.searchTests = function (predicate) {
var tests = [];
- for (var i=0; i<this.numberOfSuites; i++)
+ for (var i = 0; i < this.numberOfSuites; i++)
tests = tests.concat(this.suite(i).searchTests(predicate));
return tests.concat(util.filter(this.tests(), predicate));
};
suite.searchTestsByTag = function (tag) {
- return suite.searchTests(function (test) { return
containsTag(test.tags, tag.label, tag.info == 'combined'); });
+ return suite.searchTests(function (test) {
+ return containsTag(test.tags, tag.label, tag.info
== 'combined');
+ });
};
suite.findSuiteByName = function (name) {
return findSuiteByName(suite, name);
};
suite.allTests = function () {
- return suite.searchTests(function (test) { return true; });
+ return suite.searchTests(function (test) {
+ return true;
+ });
};
suite.criticalTests = function () {
- return suite.searchTests(function (test) { return
test.isCritical; });
+ return suite.searchTests(function (test) {
+ return test.isCritical;
+ });
};
return suite;
}
@@ -59,14 +67,18 @@
return util.contains(testTags, util.normalize(tagname));
if (tagname.indexOf(' & ') != -1) {
var tagnames = tagname.split(' & ');
- return util.all(util.map(tagnames, function (name) { return
containsTag(testTags, name, true); }));
+ return util.all(util.map(tagnames, function (name) {
+ return containsTag(testTags, name, true);
+ }));
}
if (tagname.indexOf(' NOT ') != -1) {
var tagnames = tagname.split(' NOT ');
var required = tagnames[0];
var notAllowed = tagnames.slice(1);
return containsTag(testTags, required, true) &&
- util.all(util.map(notAllowed, function (name) {
return !containsTag(testTags, name, true); }))
+ util.all(util.map(notAllowed, function (name) {
+ return !containsTag(testTags, name, true);
+ }))
}
var matcher = util.Matcher(tagname)
return util.any(util.map(testTags, matcher.matches));
@@ -76,7 +88,7 @@
if (suite.fullname == name)
return suite;
var subSuites = suite.suites();
- for (var i=0; i<subSuites.length; i++) {
+ for (var i = 0; i < subSuites.length; i++) {
var match = findSuiteByName(subSuites[i], name);
if (match)
return match;
@@ -84,9 +96,9 @@
return null;
}
- function suiteTeardownFailed(suite){
+ function suiteTeardownFailed(suite) {
if (suite.numberOfKeywords) {
- var kw = suite.keyword(suite.numberOfKeywords -1);
+ var kw = suite.keyword(suite.numberOfKeywords - 1);
if (kw.type == KEYWORD_TYPE.teardown)
return kw.status == STATUS.fail;
}
@@ -97,6 +109,7 @@
for (var name in stats) {
suite[name] = stats[name];
}
+ // TODO: move to templates
if (suite.totalFailed == 0)
suite.totalFailureClass = 'pass';
else
@@ -107,41 +120,49 @@
suite.criticalFailureClass = 'fail';
}
- function populateCommonAttrs(obj, name, doc, status, times) {
- obj.name = name;
- obj.documentation = doc;
- obj.status = status.status;
- obj.times = times;
+ function createModelObject(data) {
+ var obj = {};
+ obj.name = data.name;
+ obj.documentation = data.doc; // TODO: rename documentation -> doc
+ obj.status = data.status.status;
+ obj.times = data.times;
+ return obj
}
- function Test(parent, name, doc, timeout, isCritical, status, times,
tags) {
- var test = {};
- populateCommonAttrs(test, name, doc, status, times);
- test.fullname= parent.fullname + "." + test.name; // TODO: is
this used?, could be function also
+ function Test(data) {
+ var names = ['name', 'doc', 'status', '...']
+ var test = createModelObject(data);
+ test.fullname = data.parent.fullname + "." + test.name; // TODO:
is this used?, could be function also
test.parentName = function () {
- return parent.fullname.replace('.', ' . ', 'g') + ' . '; //
TODO: duplicate
+ return data.parent.fullname.replace('.', ' . ', 'g') + ' . ';
// TODO: duplicate
};
- test.timeout = timeout;
+ test.timeout = data.timeout;
test.populateKeywords = createIterablePopulator("Keyword");
- test.children = function () { return test.keywords(); };
- test.isCritical = isCritical;
- test.statusText = test.status.toUpperCase() + (isCritical ? "
(critical)" : "");
- test.tags = tags;
- test.parentSuiteTeardownFailed = status.parentSuiteTeardownFailed;
- test.getFailureMessage = function () { return
getTestFailureMessage(test); };
+ test.children = function () {
+ return test.keywords();
+ };
+ test.isCritical = data.isCritical;
+ test.statusText = test.status.toUpperCase() + (test.isCritical ? "
(critical)" : ""); // TODO: move to templates
+ test.tags = data.tags;
+ test.parentSuiteTeardownFailed =
data.status.parentSuiteTeardownFailed;
+ test.getFailureMessage = function () {
+ return getTestFailureMessage(test);
+ };
return test;
}
- function Keyword(type, name, args, doc, status, times, parent, index) {
- var kw = {};
- populateCommonAttrs(kw, name, doc, status, times);
- kw.type = type;
+ function Keyword(data) {
+ var kw = createModelObject(data);
+ kw.type = data.type;
+ var parent = data.parent
var parentPath = (parent.path === undefined) ? parent.fullname :
parent.path;
- kw.path = parentPath + "." + index;
- kw.arguments = args;
+ kw.path = parentPath + "." + data.index;
+ kw.arguments = data.args;
kw.populateKeywords = createIterablePopulator("Keyword");
kw.populateMessages = createIterablePopulator("Message");
- kw.children = function () { return kw.keywords(); };
+ kw.children = function () {
+ return kw.keywords();
+ };
kw.getFailureMessage = getKeywordFailureMessage;
return kw;
}
@@ -151,8 +172,12 @@
message.level = level;
message.levelText = level.toUpperCase();
message.time = time;
- message.shortTime = function () {return
timeFromDate(message.time);};
- message.date = function () {return formatDate(message.time);};
+ message.shortTime = function () {
+ return timeFromDate(message.time);
+ };
+ message.date = function () {
+ return formatDate(message.time);
+ };
message.text = text;
message.link = link;
return message;
@@ -161,7 +186,7 @@
function Status(status, parentSuiteTeardownFailed) {
return {
parentSuiteTeardownFailed: parentSuiteTeardownFailed,
- status: parentSuiteTeardownFailed? model.FAIL : status
+ status: parentSuiteTeardownFailed ? model.FAIL : status
};
}
@@ -207,15 +232,15 @@
function formatElapsed(elapsed, excludeMillis) {
var millis = elapsed;
- var hours = Math.floor(millis / (60 * 60 * 1000));
- millis -= hours * 60 * 60 * 1000;
- var minutes = Math.floor(millis / (60 * 1000));
- millis -= minutes * 60 * 1000;
- var seconds = Math.floor(millis / 1000);
- millis -= seconds * 1000;
- if (excludeMillis)
- millis = undefined;
- return shortTime(hours, minutes, seconds, millis);
+ var hours = Math.floor(millis / (60 * 60 * 1000));
+ millis -= hours * 60 * 60 * 1000;
+ var minutes = Math.floor(millis / (60 * 1000));
+ millis -= minutes * 60 * 1000;
+ var seconds = Math.floor(millis / 1000);
+ millis -= seconds * 1000;
+ if (excludeMillis)
+ millis = undefined;
+ return shortTime(hours, minutes, seconds, millis);
}
function padTo(number, len) {
@@ -266,10 +291,10 @@
if (msg)
return msg;
if (this.message(0)) return this.message(0).text;
- }
+ }
function getFailureMessageFromKeywords(obj) {
- for(var i = 0; i < obj.numberOfKeywords; i++){
+ for (var i = 0; i < obj.numberOfKeywords; i++) {
var child = obj.keyword(i);
if (child.status == STATUS.fail)
return child.getFailureMessage();
@@ -298,7 +323,7 @@
containsTag: containsTag, // Exposed for tests
shortTime: shortTime
};
-}());
+}();
window.stats = (function () {
=======================================
--- /src/robot/webcontent/js/testdata.js Wed Jun 1 03:41:18 2011
+++ /src/robot/webcontent/js/testdata.js Tue Jun 7 04:09:07 2011
@@ -1,70 +1,70 @@
-window.testdata = (function () {
+window.testdata = function () {
var elementsById = {};
var LEVEL = {I:'info', H:'info', T:'trace', W:'warn', E:'error',
D:'debug', F:'fail'};
var KEYWORD_TYPE = {kw: 'KEYWORD',
- setup:'SETUP',
- teardown:'TEARDOWN'};
-
- function addElement(elem){
+ setup:'SETUP',
+ teardown:'TEARDOWN'};
+
+ function addElement(elem) {
elem.id = uuid();
elementsById[elem.id] = elem;
return elem;
}
- function uuid(){
+ function uuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
function(c) {
- var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
+ var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 |
0x8);
return v.toString(16);
});
}
- function timestamp(millis){
+ function timestamp(millis) {
return new Date(window.basemillis + millis);
}
- function get(id){
+ function get(id) {
return texts.get(id)
}
- function times(stats){
+ function times(stats) {
var start = timestamp(stats[1]);
var elapsed = stats[2];
- var stop = timestamp(stats[1]+elapsed);
+ var stop = timestamp(stats[1] + elapsed);
return [start, stop, elapsed];
}
- function message(element){
+ function message(element) {
return addElement(
model.Message(LEVEL[element[1]], timestamp(element[0]),
get(element[2]), element[3]));
}
- function status(stats){
- return (stats[0] == "P" ? model.PASS : model.FAIL);
- }
-
- function statuz(stats, parentSuiteTeardownFailed){
- return model.Status(status(stats), parentSuiteTeardownFailed);
+ function createStatus(stats, parentSuiteTeardownFailed) {
+ var status = (stats[0] == "P" ? model.PASS : model.FAIL);
+ return model.Status(status, parentSuiteTeardownFailed);
}
function last(items) {
- return items[items.length-1];
+ return items[items.length - 1];
}
function childCreator(parent, childType) {
- return function (elem, index) { return
addElement(childType(parent, elem, index)); };
+ return function (elem, index) {
+ return addElement(childType(parent, elem, index));
+ };
}
- function createKeyword(parent, element, index){
- var kw = model.Keyword(
- KEYWORD_TYPE[element[0]],
- get(element[1]),
- get(element[4]),
- get(element[3]),
- statuz(last(element)),
- model.Times(times(last(element))),
- parent,
- index);
+ function createKeyword(parent, element, index) {
+ var kw = model.Keyword({
+ type: KEYWORD_TYPE[element[0]],
+ name: get(element[1]),
+ args: get(element[4]),
+ doc: get(element[3]),
+ status: createStatus(last(element)),
+ times: model.Times(times(last(element))),
+ parent: parent,
+ index: index
+ });
kw.populateKeywords(Populator(element, keywordMatcher,
childCreator(kw, createKeyword)));
kw.populateMessages(Populator(element, messageMatcher, message));
return kw;
@@ -73,55 +73,52 @@
var keywordMatcher = headerMatcher("kw", "setup", "teardown");
function messageMatcher(elem) {
- if(elem.length != 3) return false;
- if(typeof(elem[0]) != "number") return false;
- if(typeof(elem[1]) != "string") return false;
- if(typeof(elem[2]) != "number") return false;
- return true;
+ return (elem.length == 3 &&
+ typeof(elem[0]) == "number" &&
+ typeof(elem[1]) == "string" &&
+ typeof(elem[2]) == "number");
}
- function tags(taglist){
- var tgs = [];
- for(var i in taglist) tgs[i] = get(taglist[i]);
- return tgs;
+ function tags(taglist) {
+ return util.map(taglist, texts.get);
}
function createTest(suite, element) {
- var test = model.Test(
- suite,
- get(element[1]),
- get(element[4]),
- get(element[2]),
- (element[3] == "Y"),
- statuz(last(element), suite.hasTeardownFailure()),
- model.Times(times(last(element))),
- tags(element[element.length-2])
- );
+ var test = model.Test({
+ parent: suite,
+ name: get(element[1]),
+ doc: get(element[4]),
+ timeout: get(element[2]),
+ isCritical: (element[3] == "Y"),
+ status: createStatus(last(element),
suite.hasTeardownFailure()),
+ times: model.Times(times(last(element))),
+ tags: tags(element[element.length - 2])
+ });
test.populateKeywords(Populator(element, keywordMatcher,
childCreator(test, createKeyword)));
return test;
}
function createSuite(parent, element) {
- var suit = model.Suite(
- parent,
- element[2],
- element[1],
- get(element[3]),
- statuz(element[element.length-2], parent &&
parent.hasTeardownFailure()),
- model.Times(times(element[element.length-2])),
- suiteStats(last(element)),
- parseMetadata(element[4])
- );
- suit.populateKeywords(Populator(element, keywordMatcher,
childCreator(suit, createKeyword)));
- suit.populateTests(Populator(element, headerMatcher("test"),
childCreator(suit, createTest)));
- suit.populateSuites(Populator(element, headerMatcher("suite"),
childCreator(suit, createSuite)));
- return suit;
+ var suite = model.Suite({
+ parent: parent,
+ name: element[2],
+ source: element[1],
+ doc: get(element[3]),
+ status: createStatus(element[element.length - 2], parent &&
parent.hasTeardownFailure()),
+ times: model.Times(times(element[element.length - 2])),
+ statistics: suiteStats(last(element)),
+ metadata: parseMetadata(element[4])
+ });
+ suite.populateKeywords(Populator(element, keywordMatcher,
childCreator(suite, createKeyword)));
+ suite.populateTests(Populator(element, headerMatcher("test"),
childCreator(suite, createTest)));
+ suite.populateSuites(Populator(element, headerMatcher("suite"),
childCreator(suite, createSuite)));
+ return suite;
}
- function parseMetadata(data){
+ function parseMetadata(data) {
var metadata = {};
- for(var key in data){
- metadata[key] = get(data[key]);
+ for (var key in data) {
+ metadata[key] = get(data[key]);
}
return metadata;
}
@@ -137,132 +134,134 @@
};
}
- function headerMatcher(){
- var args = arguments;
- return function(elem){
- for (var i=0; i < args.length; i++)
- if (elem[0] == args[i]) return true;
- return false;
- };
+ function headerMatcher() {
+ var args = arguments;
+ return function(elem) {
+ for (var i = 0; i < args.length; i++)
+ if (elem[0] == args[i]) return true;
+ return false;
+ };
}
function Populator(element, matcher, creator) {
var items = findElements(element, matcher);
return {
numberOfItems: items.length,
- creator: function (index) {return creator(items[index],
index);}
+ creator: function (index) {
+ return creator(items[index], index);
+ }
};
}
function findElements(fromElement, matcher) {
var results = new Array();
- for(var i = 0; i < fromElement.length; i++)
- if(matcher(fromElement[i]))
+ for (var i = 0; i < fromElement.length; i++)
+ if (matcher(fromElement[i]))
results.push(fromElement[i]);
return results;
}
function suite() {
var elem = window.data[2];
- if(elementsById[elem.id])
+ if (elementsById[elem.id])
return elem;
var main = addElement(createSuite(undefined, elem));
window.data[2] = main;
return main;
}
- function findById(id){
+ function findById(id) {
return elementsById[id];
}
- function pathToKeyword(fullname){
+ function pathToKeyword(fullname) {
var root = suite();
- if(fullname.indexOf(root.fullname+".") != 0) return [];
- return keywordPathTo(fullname+".", root, [root.id]);
+ if (fullname.indexOf(root.fullname + ".") != 0) return [];
+ return keywordPathTo(fullname + ".", root, [root.id]);
}
- function pathToTest(fullname){
+ function pathToTest(fullname) {
var root = suite();
- if(fullname.indexOf(root.fullname+".") != 0) return [];
+ if (fullname.indexOf(root.fullname + ".") != 0) return [];
return testPathTo(fullname, root, [root.id]);
}
- function pathToSuite(fullname){
+ function pathToSuite(fullname) {
var root = suite();
- if(fullname.indexOf(root.fullname) != 0) return [];
- if(fullname == root.fullname) return [root.id];
+ if (fullname.indexOf(root.fullname) != 0) return [];
+ if (fullname == root.fullname) return [root.id];
return suitePathTo(fullname, root, [root.id]);
}
- function keywordPathTo(fullname, current, result){
- if(fullname == "") return result;
- for(var i = 0; i < current.numberOfKeywords; i++){
+ function keywordPathTo(fullname, current, result) {
+ if (fullname == "") return result;
+ for (var i = 0; i < current.numberOfKeywords; i++) {
var kw = current.keyword(i);
- if(fullname.indexOf(kw.path+".") == 0){
+ if (fullname.indexOf(kw.path + ".") == 0) {
result.push(kw.id);
- if(fullname == kw.path+".")
+ if (fullname == kw.path + ".")
return result;
return keywordPathTo(fullname, kw, result);
}
}
- for(var i = 0; i < current.numberOfTests; i++){
+ for (var i = 0; i < current.numberOfTests; i++) {
var test = current.test(i);
- if(fullname.indexOf(test.fullname+".") == 0){
+ if (fullname.indexOf(test.fullname + ".") == 0) {
result.push(test.id);
return keywordPathTo(fullname, test, result);
}
}
- for(var i = 0; i < current.numberOfSuites; i++){
+ for (var i = 0; i < current.numberOfSuites; i++) {
var suite = current.suite(i);
- if(fullname.indexOf(suite.fullname+".") == 0){
+ if (fullname.indexOf(suite.fullname + ".") == 0) {
result.push(suite.id);
return keywordPathTo(fullname, suite, result);
}
}
}
- function testPathTo(fullname, currentSuite, result){
- for(var i = 0; i < currentSuite.numberOfTests; i++){
+ function testPathTo(fullname, currentSuite, result) {
+ for (var i = 0; i < currentSuite.numberOfTests; i++) {
var test = currentSuite.test(i);
- if(fullname == test.fullname){
+ if (fullname == test.fullname) {
result.push(test.id);
return result;
}
}
- for(var i = 0; i < currentSuite.numberOfSuites; i++){
+ for (var i = 0; i < currentSuite.numberOfSuites; i++) {
var suite = currentSuite.suite(i);
- if(fullname.indexOf(suite.fullname+".") == 0){
+ if (fullname.indexOf(suite.fullname + ".") == 0) {
result.push(suite.id);
return testPathTo(fullname, suite, result);
}
}
}
- function suitePathTo(fullname, currentSuite, result){
- for(var i = 0; i < currentSuite.numberOfSuites; i++){
+ function suitePathTo(fullname, currentSuite, result) {
+ for (var i = 0; i < currentSuite.numberOfSuites; i++) {
var suite = currentSuite.suite(i);
- if(fullname == suite.fullname){
+ if (fullname == suite.fullname) {
result.push(suite.id);
return result;
}
- if(fullname.indexOf(suite.fullname+".") == 0){
+ if (fullname.indexOf(suite.fullname + ".") == 0) {
result.push(suite.id);
return suitePathTo(fullname, suite, result);
}
}
}
- function generated(){
+ function generated() {
return timestamp(window.data[0]);
}
- function error(index){
- if(window.data[4].length <= index)
+ function error(index) {
+ if (window.data[4].length <= index)
return undefined;
return message(window.data[4][index]);
}
- function statistics () {
+ function statistics() {
var statData = window.data[3];
return stats.Statistics(statData[0], statData[1], statData[2]);
}
@@ -278,7 +277,7 @@
statistics: statistics
};
-}());
+}();
window.texts = (function () {
==============================================================================
Revision: 02ed31f16d9d
Author: Janne Härkönen <[email protected]>
Date: Tue Jun 7 04:09:41 2011
Log: Automated merge with https://robotframework.googlecode.com/hg/
http://code.google.com/p/robotframework/source/detail?r=02ed31f16d9d