| 'use strict'; |
| |
| class Test extends LabeledObject { |
| constructor(id, object) |
| { |
| super(id, object); |
| this._url = object.url; // FIXME: Unused |
| this._parentId = object.parentId; |
| this._childTests = []; |
| this._metrics = []; |
| this._computePathLazily = new LazilyEvaluatedFunction(this._computePath.bind(this)); |
| |
| if (!this._parentId) |
| this.ensureNamedStaticMap('topLevelTests')[id] = this; |
| else { |
| var childMap = this.ensureNamedStaticMap('childTestMap'); |
| if (!childMap[this._parentId]) |
| childMap[this._parentId] = [this]; |
| else |
| childMap[this._parentId].push(this); |
| } |
| } |
| |
| static topLevelTests() { return this.sortByName(this.listForStaticMap('topLevelTests')); } |
| |
| static findByPath(path) |
| { |
| var matchingTest = null; |
| var testList = this.topLevelTests(); |
| for (var part of path) { |
| matchingTest = null; |
| for (var test of testList) { |
| if (part == test.name()) { |
| matchingTest = test; |
| break; |
| } |
| } |
| if (!matchingTest) |
| return null; |
| testList = matchingTest.childTests(); |
| } |
| return matchingTest; |
| } |
| |
| parentTest() { return Test.findById(this._parentId); } |
| |
| path() { return this._computePathLazily.evaluate(); } |
| |
| _computePath() |
| { |
| const path = []; |
| let currentTest = this; |
| while (currentTest) { |
| path.unshift(currentTest); |
| currentTest = currentTest.parentTest(); |
| } |
| return path; |
| } |
| |
| fullName() { return this.path().map((test) => test.label()).join(' \u220B '); } |
| |
| relativeName(sharedPath) |
| { |
| const path = this.path(); |
| const partialName = (index) => path.slice(index).map((test) => test.label()).join(' \u220B '); |
| if (!sharedPath || !sharedPath.length) |
| return partialName(0); |
| let i = 0; |
| for (; i < path.length && i < sharedPath.length; i++) { |
| if (sharedPath[i] != path[i]) |
| return partialName(i); |
| } |
| if (i < path.length) |
| return partialName(i); |
| return null; |
| } |
| |
| onlyContainsSingleMetric() { return !this.childTests().length && this._metrics.length == 1; } |
| |
| childTests() |
| { |
| var childMap = this.namedStaticMap('childTestMap'); |
| return childMap && this.id() in childMap ? childMap[this.id()] : []; |
| } |
| |
| metrics() { return this._metrics; } |
| |
| addChildTest(test) { this._childTests.push(test); } |
| addMetric(metric) { this._metrics.push(metric); } |
| } |
| |
| if (typeof module != 'undefined') |
| module.exports.Test = Test; |