mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 04:12:13 +00:00
Merge pull request #97 from Neppord/javascript
Use node instead of a browser, fixing jasmine and adding mocha.
This commit is contained in:
commit
a788fae859
@ -1,56 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
|
|
||||||
<title>Jasmine Spec Runner</title>
|
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/png" href="lib/jasmine-1.1.0/jasmine_favicon.png">
|
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="lib/jasmine-1.1.0/jasmine.css">
|
|
||||||
<script type="text/javascript" src="lib/jasmine-1.1.0/jasmine.js"></script>
|
|
||||||
<script type="text/javascript" src="lib/jasmine-1.1.0/jasmine-html.js"></script>
|
|
||||||
<script type="text/javascript" src="lib/jquery-1.7.1/jquery-1.7.1.js"></script>
|
|
||||||
<script type="text/javascript" src="lib/jasmine-jquery-1.3.1/jasmine-jquery-1.3.1.js"></script>
|
|
||||||
<script type="text/javascript" src="lib/jasmine-ajax/mock-ajax.js"></script>
|
|
||||||
|
|
||||||
<!-- include source files here... -->
|
|
||||||
<script type="text/javascript" src="src/gilded_rose.js"></script>
|
|
||||||
|
|
||||||
<!-- include spec files here... -->
|
|
||||||
<script type="text/javascript" src="spec/gilded_rose_spec.js"></script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
(function() {
|
|
||||||
jasmine.getFixtures().fixturesPath = 'spec'
|
|
||||||
var jasmineEnv = jasmine.getEnv();
|
|
||||||
jasmineEnv.updateInterval = 1000;
|
|
||||||
|
|
||||||
var trivialReporter = new jasmine.TrivialReporter();
|
|
||||||
|
|
||||||
jasmineEnv.addReporter(trivialReporter);
|
|
||||||
|
|
||||||
jasmineEnv.specFilter = function(spec) {
|
|
||||||
return trivialReporter.specFilter(spec);
|
|
||||||
};
|
|
||||||
|
|
||||||
var currentWindowOnload = window.onload;
|
|
||||||
|
|
||||||
window.onload = function() {
|
|
||||||
if (currentWindowOnload) {
|
|
||||||
currentWindowOnload();
|
|
||||||
}
|
|
||||||
execJasmine();
|
|
||||||
};
|
|
||||||
|
|
||||||
function execJasmine() {
|
|
||||||
jasmineEnv.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
|
|
||||||
<title>Gilded Rose Texttest Fixture</title>
|
|
||||||
|
|
||||||
<script type="text/javascript" src="lib/jquery-1.7.1/jquery-1.7.1.js"></script>
|
|
||||||
<script type="text/javascript" src="src/gilded_rose.js"></script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
$( document ).ready(function() {
|
|
||||||
|
|
||||||
$('body').append('<p>OMGHAI!</p>');
|
|
||||||
|
|
||||||
items = [];
|
|
||||||
|
|
||||||
items.push(new Item('+5 Dexterity Vest', 10, 20));
|
|
||||||
items.push(new Item('Aged Brie', 2, 0));
|
|
||||||
items.push(new Item('Elixir of the Mongoose', 5, 7));
|
|
||||||
items.push(new Item('Sulfuras, Hand of Ragnaros', 0, 80));
|
|
||||||
items.push(new Item('Sulfuras, Hand of Ragnaros', -1, 80));
|
|
||||||
items.push(new Item('Backstage passes to a TAFKAL80ETC concert', 15, 20));
|
|
||||||
items.push(new Item('Backstage passes to a TAFKAL80ETC concert', 10, 49));
|
|
||||||
items.push(new Item('Backstage passes to a TAFKAL80ETC concert', 5, 49));
|
|
||||||
// this conjured item does not work properly yet
|
|
||||||
items.push(new Item('Conjured Mana Cake', 3, 6));
|
|
||||||
|
|
||||||
|
|
||||||
gildedRose = new Shop(items);
|
|
||||||
|
|
||||||
var days = 2;
|
|
||||||
|
|
||||||
for (var i = 0; i < days; i++) {
|
|
||||||
showHeaderFor(i);
|
|
||||||
showItemsFor(i);
|
|
||||||
gildedRose.updateQuality();
|
|
||||||
}
|
|
||||||
|
|
||||||
function showHeaderFor(day) {
|
|
||||||
$('body').append('<p>-------- day ' + day + ' --------</p>');
|
|
||||||
}
|
|
||||||
|
|
||||||
function showItemsFor(day) {
|
|
||||||
$('body').append('<p>name, sellIn, quality</p>');
|
|
||||||
for (var j = 0; j < gildedRose.items.length; j++) {
|
|
||||||
var item = gildedRose.items[j];
|
|
||||||
$('body').append('<p>' + item.name + ', ' + item.sellIn + ', ' + item.quality + '</p>');
|
|
||||||
}
|
|
||||||
$('body').append('<br />');
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
1
js/jasmine/.gitignore
vendored
Normal file
1
js/jasmine/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/node_modules/
|
||||||
112
js/jasmine/package-lock.json
generated
Normal file
112
js/jasmine/package-lock.json
generated
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
{
|
||||||
|
"name": "gilded-rose",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "1.0.0",
|
||||||
|
"inflight": "1.0.6",
|
||||||
|
"inherits": "2.0.3",
|
||||||
|
"minimatch": "3.0.4",
|
||||||
|
"once": "1.4.0",
|
||||||
|
"path-is-absolute": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "1.4.0",
|
||||||
|
"wrappy": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"jasmine": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-qv6TZ32r+slrQz8fbx2EhGbD9zlJo3NwPrpLK1nE8inILtZO9Fap52pyHk7mNTh4tG50a+1+tOiWVT3jO5I0Sg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"glob": "7.1.2",
|
||||||
|
"jasmine-core": "3.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"jasmine-core": {
|
||||||
|
"version": "3.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.2.1.tgz",
|
||||||
|
"integrity": "sha512-pa9tbBWgU0EE4SWgc85T4sa886ufuQdsgruQANhECYjwqgV4z7Vw/499aCaP8ZH79JDS4vhm8doDG9HO4+e4sA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "1.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
js/jasmine/package.json
Normal file
26
js/jasmine/package.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "gilded-rose",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "gilded rose kata in javascript",
|
||||||
|
"scripts": {
|
||||||
|
"test": "jasmine"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/emilybache/GildedRose-Refactoring-Kata.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"kata",
|
||||||
|
"refactor",
|
||||||
|
"gilded-rose"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"private": true,
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/emilybache/GildedRose-Refactoring-Kata/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/emilybache/GildedRose-Refactoring-Kata#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"jasmine": "^3.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
var {Shop, Item} = require('../src/gilded_rose.js');
|
||||||
describe("Gilded Rose", function() {
|
describe("Gilded Rose", function() {
|
||||||
|
|
||||||
it("should foo", function() {
|
it("should foo", function() {
|
||||||
11
js/jasmine/spec/support/jasmine.json
Normal file
11
js/jasmine/spec/support/jasmine.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"spec_dir": "spec",
|
||||||
|
"spec_files": [
|
||||||
|
"**/*[sS]pec.js"
|
||||||
|
],
|
||||||
|
"helpers": [
|
||||||
|
"helpers/**/*.js"
|
||||||
|
],
|
||||||
|
"stopSpecOnExpectationFailure": false,
|
||||||
|
"random": true
|
||||||
|
}
|
||||||
@ -60,3 +60,7 @@ class Shop {
|
|||||||
return this.items;
|
return this.items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
module.exports = {
|
||||||
|
Item,
|
||||||
|
Shop
|
||||||
|
}
|
||||||
@ -1,20 +0,0 @@
|
|||||||
Copyright (c) 2008-2011 Pivotal Labs
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
@ -1,190 +0,0 @@
|
|||||||
jasmine.TrivialReporter = function(doc) {
|
|
||||||
this.document = doc || document;
|
|
||||||
this.suiteDivs = {};
|
|
||||||
this.logRunningSpecs = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
|
|
||||||
var el = document.createElement(type);
|
|
||||||
|
|
||||||
for (var i = 2; i < arguments.length; i++) {
|
|
||||||
var child = arguments[i];
|
|
||||||
|
|
||||||
if (typeof child === 'string') {
|
|
||||||
el.appendChild(document.createTextNode(child));
|
|
||||||
} else {
|
|
||||||
if (child) { el.appendChild(child); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var attr in attrs) {
|
|
||||||
if (attr == "className") {
|
|
||||||
el[attr] = attrs[attr];
|
|
||||||
} else {
|
|
||||||
el.setAttribute(attr, attrs[attr]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return el;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
|
|
||||||
var showPassed, showSkipped;
|
|
||||||
|
|
||||||
this.outerDiv = this.createDom('div', { className: 'jasmine_reporter' },
|
|
||||||
this.createDom('div', { className: 'banner' },
|
|
||||||
this.createDom('div', { className: 'logo' },
|
|
||||||
this.createDom('span', { className: 'title' }, "Jasmine"),
|
|
||||||
this.createDom('span', { className: 'version' }, runner.env.versionString())),
|
|
||||||
this.createDom('div', { className: 'options' },
|
|
||||||
"Show ",
|
|
||||||
showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
|
|
||||||
this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
|
|
||||||
showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
|
|
||||||
this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
this.runnerDiv = this.createDom('div', { className: 'runner running' },
|
|
||||||
this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
|
|
||||||
this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
|
|
||||||
this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
|
|
||||||
);
|
|
||||||
|
|
||||||
this.document.body.appendChild(this.outerDiv);
|
|
||||||
|
|
||||||
var suites = runner.suites();
|
|
||||||
for (var i = 0; i < suites.length; i++) {
|
|
||||||
var suite = suites[i];
|
|
||||||
var suiteDiv = this.createDom('div', { className: 'suite' },
|
|
||||||
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
|
|
||||||
this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
|
|
||||||
this.suiteDivs[suite.id] = suiteDiv;
|
|
||||||
var parentDiv = this.outerDiv;
|
|
||||||
if (suite.parentSuite) {
|
|
||||||
parentDiv = this.suiteDivs[suite.parentSuite.id];
|
|
||||||
}
|
|
||||||
parentDiv.appendChild(suiteDiv);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.startedAt = new Date();
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
showPassed.onclick = function(evt) {
|
|
||||||
if (showPassed.checked) {
|
|
||||||
self.outerDiv.className += ' show-passed';
|
|
||||||
} else {
|
|
||||||
self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
showSkipped.onclick = function(evt) {
|
|
||||||
if (showSkipped.checked) {
|
|
||||||
self.outerDiv.className += ' show-skipped';
|
|
||||||
} else {
|
|
||||||
self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
|
|
||||||
var results = runner.results();
|
|
||||||
var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
|
|
||||||
this.runnerDiv.setAttribute("class", className);
|
|
||||||
//do it twice for IE
|
|
||||||
this.runnerDiv.setAttribute("className", className);
|
|
||||||
var specs = runner.specs();
|
|
||||||
var specCount = 0;
|
|
||||||
for (var i = 0; i < specs.length; i++) {
|
|
||||||
if (this.specFilter(specs[i])) {
|
|
||||||
specCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
|
|
||||||
message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
|
|
||||||
this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
|
|
||||||
|
|
||||||
this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
|
|
||||||
var results = suite.results();
|
|
||||||
var status = results.passed() ? 'passed' : 'failed';
|
|
||||||
if (results.totalCount === 0) { // todo: change this to check results.skipped
|
|
||||||
status = 'skipped';
|
|
||||||
}
|
|
||||||
this.suiteDivs[suite.id].className += " " + status;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
|
|
||||||
if (this.logRunningSpecs) {
|
|
||||||
this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
|
|
||||||
var results = spec.results();
|
|
||||||
var status = results.passed() ? 'passed' : 'failed';
|
|
||||||
if (results.skipped) {
|
|
||||||
status = 'skipped';
|
|
||||||
}
|
|
||||||
var specDiv = this.createDom('div', { className: 'spec ' + status },
|
|
||||||
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
|
|
||||||
this.createDom('a', {
|
|
||||||
className: 'description',
|
|
||||||
href: '?spec=' + encodeURIComponent(spec.getFullName()),
|
|
||||||
title: spec.getFullName()
|
|
||||||
}, spec.description));
|
|
||||||
|
|
||||||
|
|
||||||
var resultItems = results.getItems();
|
|
||||||
var messagesDiv = this.createDom('div', { className: 'messages' });
|
|
||||||
for (var i = 0; i < resultItems.length; i++) {
|
|
||||||
var result = resultItems[i];
|
|
||||||
|
|
||||||
if (result.type == 'log') {
|
|
||||||
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
|
|
||||||
} else if (result.type == 'expect' && result.passed && !result.passed()) {
|
|
||||||
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
|
|
||||||
|
|
||||||
if (result.trace.stack) {
|
|
||||||
messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (messagesDiv.childNodes.length > 0) {
|
|
||||||
specDiv.appendChild(messagesDiv);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.suiteDivs[spec.suite.id].appendChild(specDiv);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.log = function() {
|
|
||||||
var console = jasmine.getGlobal().console;
|
|
||||||
if (console && console.log) {
|
|
||||||
if (console.log.apply) {
|
|
||||||
console.log.apply(console, arguments);
|
|
||||||
} else {
|
|
||||||
console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.getLocation = function() {
|
|
||||||
return this.document.location;
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.TrivialReporter.prototype.specFilter = function(spec) {
|
|
||||||
var paramMap = {};
|
|
||||||
var params = this.getLocation().search.substring(1).split('&');
|
|
||||||
for (var i = 0; i < params.length; i++) {
|
|
||||||
var p = params[i].split('=');
|
|
||||||
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!paramMap.spec) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return spec.getFullName().indexOf(paramMap.spec) === 0;
|
|
||||||
};
|
|
||||||
@ -1,166 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.jasmine_reporter a:visited, .jasmine_reporter a {
|
|
||||||
color: #303;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jasmine_reporter a:hover, .jasmine_reporter a:active {
|
|
||||||
color: blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.run_spec {
|
|
||||||
float:right;
|
|
||||||
padding-right: 5px;
|
|
||||||
font-size: .8em;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jasmine_reporter {
|
|
||||||
margin: 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.banner {
|
|
||||||
color: #303;
|
|
||||||
background-color: #fef;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo {
|
|
||||||
float: left;
|
|
||||||
font-size: 1.1em;
|
|
||||||
padding-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo .version {
|
|
||||||
font-size: .6em;
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.runner.running {
|
|
||||||
background-color: yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.options {
|
|
||||||
text-align: right;
|
|
||||||
font-size: .8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.suite {
|
|
||||||
border: 1px outset gray;
|
|
||||||
margin: 5px 0;
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.suite .suite {
|
|
||||||
margin: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.suite.passed {
|
|
||||||
background-color: #dfd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.suite.failed {
|
|
||||||
background-color: #fdd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spec {
|
|
||||||
margin: 5px;
|
|
||||||
padding-left: 1em;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spec.failed, .spec.passed, .spec.skipped {
|
|
||||||
padding-bottom: 5px;
|
|
||||||
border: 1px solid gray;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spec.failed {
|
|
||||||
background-color: #fbb;
|
|
||||||
border-color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spec.passed {
|
|
||||||
background-color: #bfb;
|
|
||||||
border-color: green;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spec.skipped {
|
|
||||||
background-color: #bbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.messages {
|
|
||||||
border-left: 1px dashed gray;
|
|
||||||
padding-left: 1em;
|
|
||||||
padding-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.passed {
|
|
||||||
background-color: #cfc;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.failed {
|
|
||||||
background-color: #fbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.skipped {
|
|
||||||
color: #777;
|
|
||||||
background-color: #eee;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*.resultMessage {*/
|
|
||||||
/*white-space: pre;*/
|
|
||||||
/*}*/
|
|
||||||
|
|
||||||
.resultMessage span.result {
|
|
||||||
display: block;
|
|
||||||
line-height: 2em;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resultMessage .mismatch {
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.stackTrace {
|
|
||||||
white-space: pre;
|
|
||||||
font-size: .8em;
|
|
||||||
margin-left: 10px;
|
|
||||||
max-height: 5em;
|
|
||||||
overflow: auto;
|
|
||||||
border: 1px inset red;
|
|
||||||
padding: 1em;
|
|
||||||
background: #eef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.finished-at {
|
|
||||||
padding-left: 1em;
|
|
||||||
font-size: .6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.show-passed .passed,
|
|
||||||
.show-skipped .skipped {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#jasmine_content {
|
|
||||||
position:fixed;
|
|
||||||
right: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.runner {
|
|
||||||
border: 1px solid gray;
|
|
||||||
display: block;
|
|
||||||
margin: 5px 0;
|
|
||||||
padding: 2px 0 2px 10px;
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 905 B |
@ -1,207 +0,0 @@
|
|||||||
/*
|
|
||||||
Jasmine-Ajax : a set of helpers for testing AJAX requests under the Jasmine
|
|
||||||
BDD framework for JavaScript.
|
|
||||||
|
|
||||||
Supports both Prototype.js and jQuery.
|
|
||||||
|
|
||||||
http://github.com/pivotal/jasmine-ajax
|
|
||||||
|
|
||||||
Jasmine Home page: http://pivotal.github.com/jasmine
|
|
||||||
|
|
||||||
Copyright (c) 2008-2010 Pivotal Labs
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Jasmine-Ajax interface
|
|
||||||
var ajaxRequests = [];
|
|
||||||
|
|
||||||
function mostRecentAjaxRequest() {
|
|
||||||
if (ajaxRequests.length > 0) {
|
|
||||||
return ajaxRequests[ajaxRequests.length - 1];
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function clearAjaxRequests() {
|
|
||||||
ajaxRequests = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fake XHR for mocking Ajax Requests & Responses
|
|
||||||
function FakeXMLHttpRequest() {
|
|
||||||
var extend = Object.extend || $.extend;
|
|
||||||
extend(this, {
|
|
||||||
requestHeaders: {},
|
|
||||||
|
|
||||||
open: function() {
|
|
||||||
this.method = arguments[0];
|
|
||||||
this.url = arguments[1];
|
|
||||||
this.readyState = 1;
|
|
||||||
},
|
|
||||||
|
|
||||||
setRequestHeader: function(header, value) {
|
|
||||||
this.requestHeaders[header] = value;
|
|
||||||
},
|
|
||||||
|
|
||||||
abort: function() {
|
|
||||||
this.readyState = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
readyState: 0,
|
|
||||||
|
|
||||||
onreadystatechange: function(isTimeout) {
|
|
||||||
},
|
|
||||||
|
|
||||||
status: null,
|
|
||||||
|
|
||||||
send: function(data) {
|
|
||||||
this.params = data;
|
|
||||||
this.readyState = 2;
|
|
||||||
},
|
|
||||||
|
|
||||||
getResponseHeader: function(name) {
|
|
||||||
return this.responseHeaders[name];
|
|
||||||
},
|
|
||||||
|
|
||||||
getAllResponseHeaders: function() {
|
|
||||||
var responseHeaders = [];
|
|
||||||
for (var i in this.responseHeaders) {
|
|
||||||
if (this.responseHeaders.hasOwnProperty(i)) {
|
|
||||||
responseHeaders.push(i + ': ' + this.responseHeaders[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return responseHeaders.join('\r\n');
|
|
||||||
},
|
|
||||||
|
|
||||||
responseText: null,
|
|
||||||
|
|
||||||
response: function(response) {
|
|
||||||
this.status = response.status;
|
|
||||||
this.responseText = response.responseText || "";
|
|
||||||
this.readyState = 4;
|
|
||||||
this.responseHeaders = response.responseHeaders ||
|
|
||||||
{"Content-type": response.contentType || "application/json" };
|
|
||||||
// uncomment for jquery 1.3.x support
|
|
||||||
// jasmine.Clock.tick(20);
|
|
||||||
|
|
||||||
this.onreadystatechange();
|
|
||||||
},
|
|
||||||
responseTimeout: function() {
|
|
||||||
this.readyState = 4;
|
|
||||||
jasmine.Clock.tick(jQuery.ajaxSettings.timeout || 30000);
|
|
||||||
this.onreadystatechange('timeout');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
jasmine.Ajax = {
|
|
||||||
|
|
||||||
isInstalled: function() {
|
|
||||||
return jasmine.Ajax.installed == true;
|
|
||||||
},
|
|
||||||
|
|
||||||
assertInstalled: function() {
|
|
||||||
if (!jasmine.Ajax.isInstalled()) {
|
|
||||||
throw new Error("Mock ajax is not installed, use jasmine.Ajax.useMock()")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
useMock: function() {
|
|
||||||
if (!jasmine.Ajax.isInstalled()) {
|
|
||||||
var spec = jasmine.getEnv().currentSpec;
|
|
||||||
spec.after(jasmine.Ajax.uninstallMock);
|
|
||||||
|
|
||||||
jasmine.Ajax.installMock();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
installMock: function() {
|
|
||||||
if (typeof jQuery != 'undefined') {
|
|
||||||
jasmine.Ajax.installJquery();
|
|
||||||
} else if (typeof Prototype != 'undefined') {
|
|
||||||
jasmine.Ajax.installPrototype();
|
|
||||||
} else {
|
|
||||||
throw new Error("jasmine.Ajax currently only supports jQuery and Prototype");
|
|
||||||
}
|
|
||||||
jasmine.Ajax.installed = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
installJquery: function() {
|
|
||||||
jasmine.Ajax.mode = 'jQuery';
|
|
||||||
jasmine.Ajax.real = jQuery.ajaxSettings.xhr;
|
|
||||||
jQuery.ajaxSettings.xhr = jasmine.Ajax.jQueryMock;
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
installPrototype: function() {
|
|
||||||
jasmine.Ajax.mode = 'Prototype';
|
|
||||||
jasmine.Ajax.real = Ajax.getTransport;
|
|
||||||
|
|
||||||
Ajax.getTransport = jasmine.Ajax.prototypeMock;
|
|
||||||
},
|
|
||||||
|
|
||||||
uninstallMock: function() {
|
|
||||||
jasmine.Ajax.assertInstalled();
|
|
||||||
if (jasmine.Ajax.mode == 'jQuery') {
|
|
||||||
jQuery.ajaxSettings.xhr = jasmine.Ajax.real;
|
|
||||||
} else if (jasmine.Ajax.mode == 'Prototype') {
|
|
||||||
Ajax.getTransport = jasmine.Ajax.real;
|
|
||||||
}
|
|
||||||
jasmine.Ajax.reset();
|
|
||||||
},
|
|
||||||
|
|
||||||
reset: function() {
|
|
||||||
jasmine.Ajax.installed = false;
|
|
||||||
jasmine.Ajax.mode = null;
|
|
||||||
jasmine.Ajax.real = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
jQueryMock: function() {
|
|
||||||
var newXhr = new FakeXMLHttpRequest();
|
|
||||||
ajaxRequests.push(newXhr);
|
|
||||||
return newXhr;
|
|
||||||
},
|
|
||||||
|
|
||||||
prototypeMock: function() {
|
|
||||||
return new FakeXMLHttpRequest();
|
|
||||||
},
|
|
||||||
|
|
||||||
installed: false,
|
|
||||||
mode: null
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Jasmine-Ajax Glue code for Prototype.js
|
|
||||||
if (typeof Prototype != 'undefined' && Ajax && Ajax.Request) {
|
|
||||||
Ajax.Request.prototype.originalRequest = Ajax.Request.prototype.request;
|
|
||||||
Ajax.Request.prototype.request = function(url) {
|
|
||||||
this.originalRequest(url);
|
|
||||||
ajaxRequests.push(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
Ajax.Request.prototype.response = function(responseOptions) {
|
|
||||||
return this.transport.response(responseOptions);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -1,288 +0,0 @@
|
|||||||
var readFixtures = function() {
|
|
||||||
return jasmine.getFixtures().proxyCallTo_('read', arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
var preloadFixtures = function() {
|
|
||||||
jasmine.getFixtures().proxyCallTo_('preload', arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
var loadFixtures = function() {
|
|
||||||
jasmine.getFixtures().proxyCallTo_('load', arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
var setFixtures = function(html) {
|
|
||||||
jasmine.getFixtures().set(html);
|
|
||||||
};
|
|
||||||
|
|
||||||
var sandbox = function(attributes) {
|
|
||||||
return jasmine.getFixtures().sandbox(attributes);
|
|
||||||
};
|
|
||||||
|
|
||||||
var spyOnEvent = function(selector, eventName) {
|
|
||||||
jasmine.JQuery.events.spyOn(selector, eventName);
|
|
||||||
}
|
|
||||||
|
|
||||||
jasmine.getFixtures = function() {
|
|
||||||
return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures();
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures = function() {
|
|
||||||
this.containerId = 'jasmine-fixtures';
|
|
||||||
this.fixturesCache_ = {};
|
|
||||||
this.fixturesPath = 'spec/javascripts/fixtures';
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.set = function(html) {
|
|
||||||
this.cleanUp();
|
|
||||||
this.createContainer_(html);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.preload = function() {
|
|
||||||
this.read.apply(this, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.load = function() {
|
|
||||||
this.cleanUp();
|
|
||||||
this.createContainer_(this.read.apply(this, arguments));
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.read = function() {
|
|
||||||
var htmlChunks = [];
|
|
||||||
|
|
||||||
var fixtureUrls = arguments;
|
|
||||||
for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
|
|
||||||
htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return htmlChunks.join('');
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.clearCache = function() {
|
|
||||||
this.fixturesCache_ = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.cleanUp = function() {
|
|
||||||
jQuery('#' + this.containerId).remove();
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.sandbox = function(attributes) {
|
|
||||||
var attributesToSet = attributes || {};
|
|
||||||
return jQuery('<div id="sandbox" />').attr(attributesToSet);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.createContainer_ = function(html) {
|
|
||||||
var container;
|
|
||||||
if(html instanceof jQuery) {
|
|
||||||
container = jQuery('<div id="' + this.containerId + '" />');
|
|
||||||
container.html(html);
|
|
||||||
} else {
|
|
||||||
container = '<div id="' + this.containerId + '">' + html + '</div>'
|
|
||||||
}
|
|
||||||
jQuery('body').append(container);
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {
|
|
||||||
if (typeof this.fixturesCache_[url] == 'undefined') {
|
|
||||||
this.loadFixtureIntoCache_(url);
|
|
||||||
}
|
|
||||||
return this.fixturesCache_[url];
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
|
|
||||||
var self = this;
|
|
||||||
var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl;
|
|
||||||
jQuery.ajax({
|
|
||||||
async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
|
|
||||||
cache: false,
|
|
||||||
dataType: 'html',
|
|
||||||
url: url,
|
|
||||||
success: function(data) {
|
|
||||||
self.fixturesCache_[relativeUrl] = data;
|
|
||||||
},
|
|
||||||
error: function(jqXHR, status, errorThrown) {
|
|
||||||
throw Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
|
|
||||||
return this[methodName].apply(this, passedArguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
jasmine.JQuery = function() {};
|
|
||||||
|
|
||||||
jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
|
|
||||||
return jQuery('<div/>').append(html).html();
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.JQuery.elementToString = function(element) {
|
|
||||||
return jQuery('<div />').append(element.clone()).html();
|
|
||||||
};
|
|
||||||
|
|
||||||
jasmine.JQuery.matchersClass = {};
|
|
||||||
|
|
||||||
(function(namespace) {
|
|
||||||
var data = {
|
|
||||||
spiedEvents: {},
|
|
||||||
handlers: []
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace.events = {
|
|
||||||
spyOn: function(selector, eventName) {
|
|
||||||
var handler = function(e) {
|
|
||||||
data.spiedEvents[[selector, eventName]] = e;
|
|
||||||
};
|
|
||||||
jQuery(selector).bind(eventName, handler);
|
|
||||||
data.handlers.push(handler);
|
|
||||||
},
|
|
||||||
|
|
||||||
wasTriggered: function(selector, eventName) {
|
|
||||||
return !!(data.spiedEvents[[selector, eventName]]);
|
|
||||||
},
|
|
||||||
|
|
||||||
cleanUp: function() {
|
|
||||||
data.spiedEvents = {};
|
|
||||||
data.handlers = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})(jasmine.JQuery);
|
|
||||||
|
|
||||||
(function(){
|
|
||||||
var jQueryMatchers = {
|
|
||||||
toHaveClass: function(className) {
|
|
||||||
return this.actual.hasClass(className);
|
|
||||||
},
|
|
||||||
|
|
||||||
toBeVisible: function() {
|
|
||||||
return this.actual.is(':visible');
|
|
||||||
},
|
|
||||||
|
|
||||||
toBeHidden: function() {
|
|
||||||
return this.actual.is(':hidden');
|
|
||||||
},
|
|
||||||
|
|
||||||
toBeSelected: function() {
|
|
||||||
return this.actual.is(':selected');
|
|
||||||
},
|
|
||||||
|
|
||||||
toBeChecked: function() {
|
|
||||||
return this.actual.is(':checked');
|
|
||||||
},
|
|
||||||
|
|
||||||
toBeEmpty: function() {
|
|
||||||
return this.actual.is(':empty');
|
|
||||||
},
|
|
||||||
|
|
||||||
toExist: function() {
|
|
||||||
return this.actual.size() > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
toHaveAttr: function(attributeName, expectedAttributeValue) {
|
|
||||||
return hasProperty(this.actual.attr(attributeName), expectedAttributeValue);
|
|
||||||
},
|
|
||||||
|
|
||||||
toHaveId: function(id) {
|
|
||||||
return this.actual.attr('id') == id;
|
|
||||||
},
|
|
||||||
|
|
||||||
toHaveHtml: function(html) {
|
|
||||||
return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html);
|
|
||||||
},
|
|
||||||
|
|
||||||
toHaveText: function(text) {
|
|
||||||
if (text && jQuery.isFunction(text.test)) {
|
|
||||||
return text.test(this.actual.text());
|
|
||||||
} else {
|
|
||||||
return this.actual.text() == text;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
toHaveValue: function(value) {
|
|
||||||
return this.actual.val() == value;
|
|
||||||
},
|
|
||||||
|
|
||||||
toHaveData: function(key, expectedValue) {
|
|
||||||
return hasProperty(this.actual.data(key), expectedValue);
|
|
||||||
},
|
|
||||||
|
|
||||||
toBe: function(selector) {
|
|
||||||
return this.actual.is(selector);
|
|
||||||
},
|
|
||||||
|
|
||||||
toContain: function(selector) {
|
|
||||||
return this.actual.find(selector).size() > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
toBeDisabled: function(selector){
|
|
||||||
return this.actual.is(':disabled');
|
|
||||||
},
|
|
||||||
|
|
||||||
// tests the existence of a specific event binding
|
|
||||||
toHandle: function(eventName) {
|
|
||||||
var events = this.actual.data("events");
|
|
||||||
return events && events[eventName].length > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
// tests the existence of a specific event binding + handler
|
|
||||||
toHandleWith: function(eventName, eventHandler) {
|
|
||||||
var stack = this.actual.data("events")[eventName];
|
|
||||||
var i;
|
|
||||||
for (i = 0; i < stack.length; i++) {
|
|
||||||
if (stack[i].handler == eventHandler) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var hasProperty = function(actualValue, expectedValue) {
|
|
||||||
if (expectedValue === undefined) {
|
|
||||||
return actualValue !== undefined;
|
|
||||||
}
|
|
||||||
return actualValue == expectedValue;
|
|
||||||
};
|
|
||||||
|
|
||||||
var bindMatcher = function(methodName) {
|
|
||||||
var builtInMatcher = jasmine.Matchers.prototype[methodName];
|
|
||||||
|
|
||||||
jasmine.JQuery.matchersClass[methodName] = function() {
|
|
||||||
if (this.actual instanceof jQuery) {
|
|
||||||
var result = jQueryMatchers[methodName].apply(this, arguments);
|
|
||||||
this.actual = jasmine.JQuery.elementToString(this.actual);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (builtInMatcher) {
|
|
||||||
return builtInMatcher.apply(this, arguments);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
for(var methodName in jQueryMatchers) {
|
|
||||||
bindMatcher(methodName);
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
|
|
||||||
beforeEach(function() {
|
|
||||||
this.addMatchers(jasmine.JQuery.matchersClass);
|
|
||||||
this.addMatchers({
|
|
||||||
toHaveBeenTriggeredOn: function(selector) {
|
|
||||||
this.message = function() {
|
|
||||||
return [
|
|
||||||
"Expected event " + this.actual + " to have been triggered on" + selector,
|
|
||||||
"Expected event " + this.actual + " not to have been triggered on" + selector
|
|
||||||
];
|
|
||||||
};
|
|
||||||
return jasmine.JQuery.events.wasTriggered(selector, this.actual);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(function() {
|
|
||||||
jasmine.getFixtures().cleanUp();
|
|
||||||
jasmine.JQuery.events.cleanUp();
|
|
||||||
});
|
|
||||||
9266
js/lib/jquery-1.7.1/jquery-1.7.1.js
vendored
9266
js/lib/jquery-1.7.1/jquery-1.7.1.js
vendored
File diff suppressed because it is too large
Load Diff
1
js/mocha/.gitignore
vendored
Normal file
1
js/mocha/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/node_modules/
|
||||||
249
js/mocha/package-lock.json
generated
Normal file
249
js/mocha/package-lock.json
generated
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
{
|
||||||
|
"name": "gilded-rose",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"assertion-error": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"browser-stdout": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"chai": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"assertion-error": "1.1.0",
|
||||||
|
"check-error": "1.0.2",
|
||||||
|
"deep-eql": "3.0.1",
|
||||||
|
"get-func-name": "2.0.0",
|
||||||
|
"pathval": "1.1.0",
|
||||||
|
"type-detect": "4.0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"check-error": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"commander": {
|
||||||
|
"version": "2.15.1",
|
||||||
|
"resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
|
||||||
|
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deep-eql": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"type-detect": "4.0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"diff": {
|
||||||
|
"version": "3.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
|
||||||
|
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"escape-string-regexp": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||||
|
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"get-func-name": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "1.0.0",
|
||||||
|
"inflight": "1.0.6",
|
||||||
|
"inherits": "2.0.3",
|
||||||
|
"minimatch": "3.0.4",
|
||||||
|
"once": "1.4.0",
|
||||||
|
"path-is-absolute": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"growl": {
|
||||||
|
"version": "1.10.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
|
||||||
|
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"he": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
|
||||||
|
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "1.4.0",
|
||||||
|
"wrappy": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "1.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"mkdirp": {
|
||||||
|
"version": "0.5.1",
|
||||||
|
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||||
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"minimist": "0.0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mocha": {
|
||||||
|
"version": "5.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
|
||||||
|
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"browser-stdout": "1.3.1",
|
||||||
|
"commander": "2.15.1",
|
||||||
|
"debug": "3.1.0",
|
||||||
|
"diff": "3.5.0",
|
||||||
|
"escape-string-regexp": "1.0.5",
|
||||||
|
"glob": "7.1.2",
|
||||||
|
"growl": "1.10.5",
|
||||||
|
"he": "1.1.1",
|
||||||
|
"minimatch": "3.0.4",
|
||||||
|
"mkdirp": "0.5.1",
|
||||||
|
"supports-color": "5.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pathval": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "5.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
|
||||||
|
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type-detect": {
|
||||||
|
"version": "4.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
||||||
|
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
27
js/mocha/package.json
Normal file
27
js/mocha/package.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "gilded-rose",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "gilded rose kata in javascript",
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/emilybache/GildedRose-Refactoring-Kata.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"kata",
|
||||||
|
"refactor",
|
||||||
|
"gilded-rose"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"private": true,
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/emilybache/GildedRose-Refactoring-Kata/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/emilybache/GildedRose-Refactoring-Kata#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"chai": "^4.2.0",
|
||||||
|
"mocha": "^5.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
66
js/mocha/src/gilded_rose.js
Normal file
66
js/mocha/src/gilded_rose.js
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
class Item {
|
||||||
|
constructor(name, sellIn, quality){
|
||||||
|
this.name = name;
|
||||||
|
this.sellIn = sellIn;
|
||||||
|
this.quality = quality;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shop {
|
||||||
|
constructor(items=[]){
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
updateQuality() {
|
||||||
|
for (var i = 0; i < this.items.length; i++) {
|
||||||
|
if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') {
|
||||||
|
if (this.items[i].quality > 0) {
|
||||||
|
if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') {
|
||||||
|
this.items[i].quality = this.items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') {
|
||||||
|
if (this.items[i].sellIn < 11) {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.items[i].sellIn < 6) {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') {
|
||||||
|
this.items[i].sellIn = this.items[i].sellIn - 1;
|
||||||
|
}
|
||||||
|
if (this.items[i].sellIn < 0) {
|
||||||
|
if (this.items[i].name != 'Aged Brie') {
|
||||||
|
if (this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') {
|
||||||
|
if (this.items[i].quality > 0) {
|
||||||
|
if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') {
|
||||||
|
this.items[i].quality = this.items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.items[i].quality = this.items[i].quality - this.items[i].quality;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.items[i].quality < 50) {
|
||||||
|
this.items[i].quality = this.items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.items;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
Item,
|
||||||
|
Shop
|
||||||
|
}
|
||||||
11
js/mocha/test/test_gilded_rose.js
Normal file
11
js/mocha/test/test_gilded_rose.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
var {expect} = require('chai');
|
||||||
|
var {Shop, Item} = require('../src/gilded_rose.js');
|
||||||
|
describe("Gilded Rose", function() {
|
||||||
|
|
||||||
|
it("should foo", function() {
|
||||||
|
const gildedRose = new Shop([ new Item("foo", 0, 0) ]);
|
||||||
|
const items = gildedRose.updateQuality();
|
||||||
|
expect(items[0].name).to.equal("fixme");
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user