Use mocha

This commit is contained in:
Tom MacWright 2013-03-01 16:49:20 -05:00 committed by John Firebaugh
parent b84be89095
commit a2f7d7e834
36 changed files with 11515 additions and 3869 deletions

View File

@ -32,7 +32,7 @@ function getFiles(compsBase32) {
if (compsBase32) {
comps = parseInt(compsBase32, 32).toString(2).split('');
console.log('Managing dependencies...')
console.log('Managing dependencies...');
}
function addFiles(srcs) {
@ -160,6 +160,8 @@ exports.test = function() {
testConfig = {configFile : __dirname + '/../spec/karma.conf.js'};
testConfig.browsers = ['PhantomJS'];
if (isArgv('--chrome')) testConfig.browsers.push('Chrome');
if (isArgv('--ff')) testConfig.browsers.push('Firefox');
if (isArgv('--chrome')) {
testConfig.browsers.push('Chrome');
@ -170,7 +172,7 @@ exports.test = function() {
if (isArgv('--cov')) {
testConfig.preprocessors = {
'**/src/**/*.js': 'coverage',
'**/src/**/*.js': 'coverage'
};
testConfig.coverageReporter = {
type : 'html',
@ -184,4 +186,4 @@ exports.test = function() {
function isArgv(optName) {
return process.argv.indexOf(optName) !== -1;
}
}
};

1253
spec/expect.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<title>Jasmine Spec Runner</title>
<link rel="stylesheet" type="text/css" href="jasmine/jasmine.css">
<script type="text/javascript" src="jasmine/jasmine.js"></script>
<script type="text/javascript" src="jasmine/jasmine-html.js"></script>
<meta charset="utf-8">
<title>Spec Runner</title>
<link rel="stylesheet" type="text/css" href="mocha/mocha.css">
</head>
<body>
<div id="mocha"></div>
<script src="expect.js"></script>
<script type="text/javascript" src="mocha/mocha.js"></script>
<script type="text/javascript" src="happen.js"></script>
<script type="text/javascript" src="sinon.js"></script>
<!-- source files -->
<script type="text/javascript" src="before.js"></script>
@ -13,6 +18,10 @@
<script type="text/javascript" src="../debug/leaflet-include.js"></script>
<script>
mocha.setup('bdd');
mocha.ignoreLeaks();
</script>
<!-- spec files -->
@ -59,22 +68,9 @@
<!-- /map -->
<script type="text/javascript" src="suites/map/MapSpec.js"></script>
</head>
<body>
<script type="text/javascript">
(function() {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function(spec) {
return htmlReporter.specFilter(spec);
};
jasmineEnv.execute();
})();
</script>
<script>
(window.mochaPhantomJS || window.mocha).run();
</script>
</body>
</html>

View File

@ -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.

View File

@ -1,681 +0,0 @@
jasmine.HtmlReporterHelpers = {};
jasmine.HtmlReporterHelpers.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.HtmlReporterHelpers.getSpecStatus = function(child) {
var results = child.results();
var status = results.passed() ? 'passed' : 'failed';
if (results.skipped) {
status = 'skipped';
}
return status;
};
jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
var parentDiv = this.dom.summary;
var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
var parent = child[parentSuite];
if (parent) {
if (typeof this.views.suites[parent.id] == 'undefined') {
this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
}
parentDiv = this.views.suites[parent.id].element;
}
parentDiv.appendChild(childElement);
};
jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
for(var fn in jasmine.HtmlReporterHelpers) {
ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
}
};
jasmine.HtmlReporter = function(_doc) {
var self = this;
var doc = _doc || window.document;
var reporterView;
var dom = {};
// Jasmine Reporter Public Interface
self.logRunningSpecs = false;
self.reportRunnerStarting = function(runner) {
var specs = runner.specs() || [];
if (specs.length == 0) {
return;
}
createReporterDom(runner.env.versionString());
doc.body.appendChild(dom.reporter);
setExceptionHandling();
reporterView = new jasmine.HtmlReporter.ReporterView(dom);
reporterView.addSpecs(specs, self.specFilter);
};
self.reportRunnerResults = function(runner) {
reporterView && reporterView.complete();
};
self.reportSuiteResults = function(suite) {
reporterView.suiteComplete(suite);
};
self.reportSpecStarting = function(spec) {
if (self.logRunningSpecs) {
self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
}
};
self.reportSpecResults = function(spec) {
reporterView.specComplete(spec);
};
self.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
}
}
};
self.specFilter = function(spec) {
if (!focusedSpecName()) {
return true;
}
return spec.getFullName().indexOf(focusedSpecName()) === 0;
};
return self;
function focusedSpecName() {
var specName;
(function memoizeFocusedSpec() {
if (specName) {
return;
}
var paramMap = [];
var params = jasmine.HtmlReporter.parameters(doc);
for (var i = 0; i < params.length; i++) {
var p = params[i].split('=');
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
}
specName = paramMap.spec;
})();
return specName;
}
function createReporterDom(version) {
dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
dom.banner = self.createDom('div', { className: 'banner' },
self.createDom('span', { className: 'title' }, "Jasmine "),
self.createDom('span', { className: 'version' }, version)),
dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
dom.alert = self.createDom('div', {className: 'alert'},
self.createDom('span', { className: 'exceptions' },
self.createDom('label', { className: 'label', 'for': 'no_try_catch' }, 'No try/catch'),
self.createDom('input', { id: 'no_try_catch', type: 'checkbox' }))),
dom.results = self.createDom('div', {className: 'results'},
dom.summary = self.createDom('div', { className: 'summary' }),
dom.details = self.createDom('div', { id: 'details' }))
);
}
function noTryCatch() {
return window.location.search.match(/catch=false/);
}
function searchWithCatch() {
var params = jasmine.HtmlReporter.parameters(window.document);
var removed = false;
var i = 0;
while (!removed && i < params.length) {
if (params[i].match(/catch=/)) {
params.splice(i, 1);
removed = true;
}
i++;
}
if (jasmine.CATCH_EXCEPTIONS) {
params.push("catch=false");
}
return params.join("&");
}
function setExceptionHandling() {
var chxCatch = document.getElementById('no_try_catch');
if (noTryCatch()) {
chxCatch.setAttribute('checked', true);
jasmine.CATCH_EXCEPTIONS = false;
}
chxCatch.onclick = function() {
window.location.search = searchWithCatch();
};
}
};
jasmine.HtmlReporter.parameters = function(doc) {
var paramStr = doc.location.search.substring(1);
var params = [];
if (paramStr.length > 0) {
params = paramStr.split('&');
}
return params;
}
jasmine.HtmlReporter.sectionLink = function(sectionName) {
var link = '?';
var params = [];
if (sectionName) {
params.push('spec=' + encodeURIComponent(sectionName));
}
if (!jasmine.CATCH_EXCEPTIONS) {
params.push("catch=false");
}
if (params.length > 0) {
link += params.join("&");
}
return link;
};
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);
jasmine.HtmlReporter.ReporterView = function(dom) {
this.startedAt = new Date();
this.runningSpecCount = 0;
this.completeSpecCount = 0;
this.passedCount = 0;
this.failedCount = 0;
this.skippedCount = 0;
this.createResultsMenu = function() {
this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
' | ',
this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
this.summaryMenuItem.onclick = function() {
dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
};
this.detailsMenuItem.onclick = function() {
showDetails();
};
};
this.addSpecs = function(specs, specFilter) {
this.totalSpecCount = specs.length;
this.views = {
specs: {},
suites: {}
};
for (var i = 0; i < specs.length; i++) {
var spec = specs[i];
this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
if (specFilter(spec)) {
this.runningSpecCount++;
}
}
};
this.specComplete = function(spec) {
this.completeSpecCount++;
if (isUndefined(this.views.specs[spec.id])) {
this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
}
var specView = this.views.specs[spec.id];
switch (specView.status()) {
case 'passed':
this.passedCount++;
break;
case 'failed':
this.failedCount++;
break;
case 'skipped':
this.skippedCount++;
break;
}
specView.refresh();
this.refresh();
};
this.suiteComplete = function(suite) {
var suiteView = this.views.suites[suite.id];
if (isUndefined(suiteView)) {
return;
}
suiteView.refresh();
};
this.refresh = function() {
if (isUndefined(this.resultsMenu)) {
this.createResultsMenu();
}
// currently running UI
if (isUndefined(this.runningAlert)) {
this.runningAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "runningAlert bar" });
dom.alert.appendChild(this.runningAlert);
}
this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
// skipped specs UI
if (isUndefined(this.skippedAlert)) {
this.skippedAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "skippedAlert bar" });
}
this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
if (this.skippedCount === 1 && isDefined(dom.alert)) {
dom.alert.appendChild(this.skippedAlert);
}
// passing specs UI
if (isUndefined(this.passedAlert)) {
this.passedAlert = this.createDom('span', { href: jasmine.HtmlReporter.sectionLink(), className: "passingAlert bar" });
}
this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
// failing specs UI
if (isUndefined(this.failedAlert)) {
this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
}
this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
if (this.failedCount === 1 && isDefined(dom.alert)) {
dom.alert.appendChild(this.failedAlert);
dom.alert.appendChild(this.resultsMenu);
}
// summary info
this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
};
this.complete = function() {
dom.alert.removeChild(this.runningAlert);
this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
if (this.failedCount === 0) {
dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
} else {
showDetails();
}
dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
};
return this;
function showDetails() {
if (dom.reporter.className.search(/showDetails/) === -1) {
dom.reporter.className += " showDetails";
}
}
function isUndefined(obj) {
return typeof obj === 'undefined';
}
function isDefined(obj) {
return !isUndefined(obj);
}
function specPluralizedFor(count) {
var str = count + " spec";
if (count > 1) {
str += "s"
}
return str;
}
};
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
this.spec = spec;
this.dom = dom;
this.views = views;
this.symbol = this.createDom('li', { className: 'pending' });
this.dom.symbolSummary.appendChild(this.symbol);
this.summary = this.createDom('div', { className: 'specSummary' },
this.createDom('a', {
className: 'description',
href: jasmine.HtmlReporter.sectionLink(this.spec.getFullName()),
title: this.spec.getFullName()
}, this.spec.description)
);
this.detail = this.createDom('div', { className: 'specDetail' },
this.createDom('a', {
className: 'description',
href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
title: this.spec.getFullName()
}, this.spec.getFullName())
);
};
jasmine.HtmlReporter.SpecView.prototype.status = function() {
return this.getSpecStatus(this.spec);
};
jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
this.symbol.className = this.status();
switch (this.status()) {
case 'skipped':
break;
case 'passed':
this.appendSummaryToSuiteDiv();
break;
case 'failed':
this.appendSummaryToSuiteDiv();
this.appendFailureDetail();
break;
}
};
jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
this.summary.className += ' ' + this.status();
this.appendToSummary(this.spec, this.summary);
};
jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
this.detail.className += ' ' + this.status();
var resultItems = this.spec.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) {
this.detail.appendChild(messagesDiv);
this.dom.details.appendChild(this.detail);
}
};
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
this.suite = suite;
this.dom = dom;
this.views = views;
this.element = this.createDom('div', { className: 'suite' },
this.createDom('a', { className: 'description', href: jasmine.HtmlReporter.sectionLink(this.suite.getFullName()) }, this.suite.description)
);
this.appendToSummary(this.suite, this.element);
};
jasmine.HtmlReporter.SuiteView.prototype.status = function() {
return this.getSpecStatus(this.suite);
};
jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
this.element.className += " " + this.status();
};
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
/* @deprecated Use jasmine.HtmlReporter instead
*/
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', { id: 'TrivialReporter', 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;
};

View File

@ -1,82 +0,0 @@
body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
#HTMLReporter a { text-decoration: none; }
#HTMLReporter a:hover { text-decoration: underline; }
#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
#HTMLReporter .version { color: #aaaaaa; }
#HTMLReporter .banner { margin-top: 14px; }
#HTMLReporter .duration { color: #aaaaaa; float: right; }
#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
#HTMLReporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
#HTMLReporter .runningAlert { background-color: #666666; }
#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
#HTMLReporter .passingAlert { background-color: #a6b779; }
#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
#HTMLReporter .failingAlert { background-color: #cf867e; }
#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
#HTMLReporter .results { margin-top: 14px; }
#HTMLReporter #details { display: none; }
#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
#HTMLReporter.showDetails .summary { display: none; }
#HTMLReporter.showDetails #details { display: block; }
#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
#HTMLReporter .summary { margin-top: 14px; }
#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
#HTMLReporter .description + .suite { margin-top: 0; }
#HTMLReporter .suite { margin-top: 14px; }
#HTMLReporter .suite a { color: #333333; }
#HTMLReporter #details .specDetail { margin-bottom: 28px; }
#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
#HTMLReporter .resultMessage span.result { display: block; }
#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
#TrivialReporter .runner.running { background-color: yellow; }
#TrivialReporter .options { text-align: right; font-size: .8em; }
#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
#TrivialReporter .suite .suite { margin: 5px; }
#TrivialReporter .suite.passed { background-color: #dfd; }
#TrivialReporter .suite.failed { background-color: #fdd; }
#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
#TrivialReporter .spec.skipped { background-color: #bbb; }
#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
#TrivialReporter .passed { background-color: #cfc; display: none; }
#TrivialReporter .failed { background-color: #fbb; }
#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
#TrivialReporter .resultMessage .mismatch { color: black; }
#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
#TrivialReporter .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

View File

@ -10,10 +10,12 @@ for (var i=0; i < libSources.length; i++) {
// list of files / patterns to load in the browser
files = [].concat([
JASMINE,
JASMINE_ADAPTER,
MOCHA,
MOCHA_ADAPTER,
"before.js",
"karma.js"
"karma.js",
"sinon.js",
"expect.js"
], libSources, [
"after.js",
"happen.js",

231
spec/mocha/mocha.css Normal file
View File

@ -0,0 +1,231 @@
@charset "utf-8";
body {
font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
padding: 60px 50px;
}
#mocha ul, #mocha li {
margin: 0;
padding: 0;
}
#mocha ul {
list-style: none;
}
#mocha h1, #mocha h2 {
margin: 0;
}
#mocha h1 {
margin-top: 15px;
font-size: 1em;
font-weight: 200;
}
#mocha h1 a {
text-decoration: none;
color: inherit;
}
#mocha h1 a:hover {
text-decoration: underline;
}
#mocha .suite .suite h1 {
margin-top: 0;
font-size: .8em;
}
.hidden {
display: none;
}
#mocha h2 {
font-size: 12px;
font-weight: normal;
cursor: pointer;
}
#mocha .suite {
margin-left: 15px;
}
#mocha .test {
margin-left: 15px;
overflow: hidden;
}
#mocha .test.pending:hover h2::after {
content: '(pending)';
font-family: arial;
}
#mocha .test.pass.medium .duration {
background: #C09853;
}
#mocha .test.pass.slow .duration {
background: #B94A48;
}
#mocha .test.pass::before {
content: '✓';
font-size: 12px;
display: block;
float: left;
margin-right: 5px;
color: #00d6b2;
}
#mocha .test.pass .duration {
font-size: 9px;
margin-left: 5px;
padding: 2px 5px;
color: white;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
}
#mocha .test.pass.fast .duration {
display: none;
}
#mocha .test.pending {
color: #0b97c4;
}
#mocha .test.pending::before {
content: '◦';
color: #0b97c4;
}
#mocha .test.fail {
color: #c00;
}
#mocha .test.fail pre {
color: black;
}
#mocha .test.fail::before {
content: '✖';
font-size: 12px;
display: block;
float: left;
margin-right: 5px;
color: #c00;
}
#mocha .test pre.error {
color: #c00;
max-height: 300px;
overflow: auto;
}
#mocha .test pre {
display: block;
float: left;
clear: left;
font: 12px/1.5 monaco, monospace;
margin: 5px;
padding: 15px;
border: 1px solid #eee;
border-bottom-color: #ddd;
-webkit-border-radius: 3px;
-webkit-box-shadow: 0 1px 3px #eee;
-moz-border-radius: 3px;
-moz-box-shadow: 0 1px 3px #eee;
}
#mocha .test h2 {
position: relative;
}
#mocha .test a.replay {
position: absolute;
top: 3px;
right: 0;
text-decoration: none;
vertical-align: middle;
display: block;
width: 15px;
height: 15px;
line-height: 15px;
text-align: center;
background: #eee;
font-size: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
-webkit-transition: opacity 200ms;
-moz-transition: opacity 200ms;
transition: opacity 200ms;
opacity: 0.3;
color: #888;
}
#mocha .test:hover a.replay {
opacity: 1;
}
#mocha-report.pass .test.fail {
display: none;
}
#mocha-report.fail .test.pass {
display: none;
}
#mocha-error {
color: #c00;
font-size: 1.5 em;
font-weight: 100;
letter-spacing: 1px;
}
#mocha-stats {
position: fixed;
top: 15px;
right: 10px;
font-size: 12px;
margin: 0;
color: #888;
}
#mocha-stats .progress {
float: right;
padding-top: 0;
}
#mocha-stats em {
color: black;
}
#mocha-stats a {
text-decoration: none;
color: inherit;
}
#mocha-stats a:hover {
border-bottom: 1px solid #eee;
}
#mocha-stats li {
display: inline-block;
margin: 0 5px;
list-style: none;
padding-top: 11px;
}
code .comment { color: #ddd }
code .init { color: #2F6FAD }
code .string { color: #5890AD }
code .keyword { color: #8A6343 }
code .number { color: #2F6FAD }

5340
spec/mocha/mocha.js Normal file

File diff suppressed because it is too large Load Diff

4223
spec/sinon.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
describe('L#noConflict', function() {
it('restores the previous L value and returns Leaflet namespace', function(){
expect(L.version).toBeDefined();
expect(L.version).to.be.ok();
var L2 = L.noConflict();
expect(L).toEqual('test');
expect(L2.version).toBeDefined();
expect(L).to.eql('test');
expect(L2.version).to.be.ok();
window.L = L2;
});

View File

@ -11,25 +11,25 @@ describe("Control.Attribution", function () {
});
it("contains just prefix if no attributions added", function () {
expect(container.innerHTML).toEqual('prefix');
expect(container.innerHTML).to.eql('prefix');
});
describe('#addAttribution', function () {
it('adds one attribution correctly', function () {
control.addAttribution('foo');
expect(container.innerHTML).toEqual('prefix | foo');
expect(container.innerHTML).to.eql('prefix | foo');
});
it('adds no duplicate attributions', function () {
control.addAttribution('foo');
control.addAttribution('foo');
expect(container.innerHTML).toEqual('prefix | foo');
expect(container.innerHTML).to.eql('prefix | foo');
});
it('adds several attributions listed with comma', function () {
control.addAttribution('foo');
control.addAttribution('bar');
expect(container.innerHTML).toEqual('prefix | foo, bar');
expect(container.innerHTML).to.eql('prefix | foo, bar');
});
});
@ -38,7 +38,7 @@ describe("Control.Attribution", function () {
control.addAttribution('foo');
control.addAttribution('bar');
control.removeAttribution('foo');
expect(container.innerHTML).toEqual('prefix | bar');
expect(container.innerHTML).to.eql('prefix | bar');
});
it('does nothing if removing attribution that was not present', function () {
control.addAttribution('foo');
@ -47,21 +47,21 @@ describe("Control.Attribution", function () {
control.removeAttribution('baz');
control.removeAttribution('baz');
control.removeAttribution('');
expect(container.innerHTML).toEqual('prefix | foo');
expect(container.innerHTML).to.eql('prefix | foo');
});
});
describe('#setPrefix', function () {
it('changes prefix', function () {
control.setPrefix('bla');
expect(container.innerHTML).toEqual('bla');
expect(container.innerHTML).to.eql('bla');
});
});
describe('control.attribution factory', function () {
it('creates Control.Attribution instance', function () {
var options = {prefix: 'prefix'};
expect(L.control.attribution(options)).toEqual(new L.Control.Attribution(options));
expect(L.control.attribution(options)).to.eql(new L.Control.Attribution(options));
});
});

View File

@ -9,26 +9,26 @@ describe("Control.Layers", function () {
it("is fired on input that changes the base layer", function () {
var baseLayers = {"Layer 1": L.tileLayer(), "Layer 2": L.tileLayer()},
layers = L.control.layers(baseLayers).addTo(map),
spy = jasmine.createSpy();
spy = sinon.spy();
map.on('baselayerchange', spy)
.whenReady(function(){
.whenReady(function() {
happen.click(layers._baseLayersList.getElementsByTagName("input")[0]);
expect(spy).toHaveBeenCalled();
expect(spy.mostRecentCall.args[0].layer).toBe(baseLayers["Layer 1"]);
expect(spy.called).to.be.ok();
expect(spy.mostRecentCall.args[0].layer).to.be(baseLayers["Layer 1"]);
});
});
it("is not fired on input that doesn't change the base layer", function () {
var overlays = {"Marker 1": L.marker([0, 0]), "Marker 2": L.marker([0, 0])},
layers = L.control.layers({}, overlays).addTo(map),
spy = jasmine.createSpy();
spy = sinon.spy();
map.on('baselayerchange', spy);
happen.click(layers._overlaysList.getElementsByTagName("input")[0]);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).to.not.be.ok();
});
});
@ -42,13 +42,13 @@ describe("Control.Layers", function () {
overlay = L.marker([0, 0]),
layers = L.control.layers({"Base": baseLayer}, {"Overlay": overlay}).addTo(map);
spyOn(layers, '_update').andCallThrough();
var spy = sinon.spy(layers, '_update');
map.addLayer(overlay);
map.removeLayer(overlay);
expect(layers._update).toHaveBeenCalled();
expect(layers._update.callCount).toEqual(2);
expect(spy.called).to.be.ok();
expect(spy.callCount).to.eql(2);
});
it("not when a non-included layer is added or removed", function () {
@ -56,12 +56,12 @@ describe("Control.Layers", function () {
overlay = L.marker([0, 0]),
layers = L.control.layers({"Base": baseLayer}).addTo(map);
spyOn(layers, '_update').andCallThrough();
var spy = sinon.spy(layers, '_update');
map.addLayer(overlay);
map.removeLayer(overlay);
expect(layers._update).not.toHaveBeenCalled();
expect(spy.called).to.not.be.ok();
});
});
});

View File

@ -6,8 +6,8 @@ describe("Class", function() {
method;
beforeEach(function() {
constructor = jasmine.createSpy("Klass constructor");
method = jasmine.createSpy("Klass#bar method");
constructor = sinon.spy();
method = sinon.spy();
Klass = L.Class.extend({
statics: {bla: 1},
@ -22,12 +22,12 @@ describe("Class", function() {
it("creates a class with the given constructor & properties", function() {
var a = new Klass();
expect(constructor).toHaveBeenCalled();
expect(a.foo).toEqual(5);
expect(constructor.called).to.be.ok();
expect(a.foo).to.eql(5);
a.bar();
expect(method).toHaveBeenCalled();
expect(method.called).to.be.ok();
});
it("inherits parent classes' constructor & properties", function() {
@ -35,36 +35,36 @@ describe("Class", function() {
var b = new Klass2();
expect(b instanceof Klass).toBeTruthy();
expect(b instanceof Klass2).toBeTruthy();
expect(b instanceof Klass).to.be.ok();
expect(b instanceof Klass2).to.be.ok();
expect(constructor).toHaveBeenCalled();
expect(b.baz).toEqual(2);
expect(constructor.called).to.be.ok();
expect(b.baz).to.eql(2);
b.bar();
expect(method).toHaveBeenCalled();
expect(method.called).to.be.ok();
});
it("supports static properties", function() {
expect(Klass.bla).toEqual(1);
expect(Klass.bla).to.eql(1);
});
it("inherits parent static properties", function() {
var Klass2 = Klass.extend({});
expect(Klass2.bla).toEqual(1);
expect(Klass2.bla).to.eql(1);
});
it("overrides parent static properties", function() {
var Klass2 = Klass.extend({statics: {bla: 2}});
expect(Klass2.bla).toEqual(2);
expect(Klass2.bla).to.eql(2);
});
it("includes the given mixin", function() {
var a = new Klass();
expect(a.mixin).toBeTruthy();
expect(a.mixin).to.be.ok();
});
it("includes multiple mixins", function() {
@ -73,15 +73,15 @@ describe("Class", function() {
});
var a = new Klass2();
expect(a.mixin).toBeTruthy();
expect(a.mixin2).toBeTruthy();
expect(a.mixin).to.be.ok();
expect(a.mixin2).to.be.ok();
});
it("grants the ability to include the given mixin", function() {
Klass.include({mixin2: true});
var a = new Klass();
expect(a.mixin2).toBeTruthy();
expect(a.mixin2).to.be.ok();
});
it("merges options instead of replacing them", function() {
@ -100,7 +100,7 @@ describe("Class", function() {
var a = new KlassWithOptions2();
expect(a.options).toEqual({
expect(a.options).to.eql({
foo1: 1,
foo2: 3,
foo3: 4
@ -108,20 +108,20 @@ describe("Class", function() {
});
it("adds constructor hooks correctly", function () {
var spy1 = jasmine.createSpy("init hook 1");
var spy1 = sinon.spy();
Klass.addInitHook(spy1);
Klass.addInitHook('bar', 1, 2, 3);
var a = new Klass();
expect(spy1).toHaveBeenCalled();
expect(method).toHaveBeenCalledWith(1, 2, 3);
expect(spy1.called).to.be.ok();
expect(method.calledWith(1, 2, 3));
});
it("inherits constructor hooks", function () {
var spy1 = jasmine.createSpy("init hook 1"),
spy2 = jasmine.createSpy("init hook 2");
var spy1 = sinon.spy(),
spy2 = sinon.spy();
var Klass2 = Klass.extend({});
@ -130,13 +130,13 @@ describe("Class", function() {
var a = new Klass2();
expect(spy1).toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
expect(spy1.called).to.be.ok();
expect(spy2.called).to.be.ok();
});
it("does not call child constructor hooks", function () {
var spy1 = jasmine.createSpy("init hook 1"),
spy2 = jasmine.createSpy("init hook 2");
var spy1 = sinon.spy(),
spy2 = sinon.spy();
var Klass2 = Klass.extend({});
@ -145,8 +145,8 @@ describe("Class", function() {
var a = new Klass();
expect(spy1).toHaveBeenCalled();
expect(spy2).not.toHaveBeenCalled();
expect(spy1.called).to.be.ok();
expect(spy2.called).to.eql(false);
});
});

View File

@ -11,35 +11,35 @@ describe('Events', function() {
it('fires all listeners added through #addEventListener', function() {
var obj = new Klass(),
spy = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
spy3 = jasmine.createSpy(),
spy4 = jasmine.createSpy(),
spy5 = jasmine.createSpy();
spy6 = jasmine.createSpy();
spy1 = sinon.spy(),
spy2 = sinon.spy(),
spy3 = sinon.spy(),
spy4 = sinon.spy(),
spy5 = sinon.spy();
spy6 = sinon.spy();
obj.addEventListener('test', spy);
obj.addEventListener('test', spy1);
obj.addEventListener('test', spy2);
obj.addEventListener('other', spy3);
obj.addEventListener({ test: spy4, other: spy5 });
obj.addEventListener({'test other': spy6 });
expect(spy).not.toHaveBeenCalled();
expect(spy2).not.toHaveBeenCalled();
expect(spy3).not.toHaveBeenCalled();
expect(spy4).not.toHaveBeenCalled();
expect(spy5).not.toHaveBeenCalled();
expect(spy6).not.toHaveBeenCalled();
expect(spy1.called).to.be(false);
expect(spy2.called).to.be(false);
expect(spy3.called).to.be(false);
expect(spy4.called).to.be(false);
expect(spy5.called).to.be(false);
expect(spy6.called).to.be(false);
obj.fireEvent('test');
expect(spy).toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
expect(spy3).not.toHaveBeenCalled();
expect(spy4).toHaveBeenCalled();
expect(spy5).not.toHaveBeenCalled();
expect(spy6).toHaveBeenCalled();
expect(spy6.calls.length).toEqual(1);
expect(spy1.called).to.be(true);
expect(spy2.called).to.be(true);
expect(spy3.called).to.be(false);
expect(spy4.called).to.be(true);
expect(spy5.called).to.be(false);
expect(spy6.called).to.be(true);
expect(spy6.callCount).to.be(1);
});
it('provides event object to listeners and executes them in the right context', function() {
@ -50,31 +50,31 @@ describe('Events', function() {
foo = {};
function listener1(e) {
expect(e.type).toEqual('test');
expect(e.target).toEqual(obj);
expect(this).toEqual(obj);
expect(e.baz).toEqual(1);
expect(e.type).to.eql('test');
expect(e.target).to.eql(obj);
expect(this).to.eql(obj);
expect(e.baz).to.eql(1);
}
function listener2(e) {
expect(e.type).toEqual('test');
expect(e.target).toEqual(obj2);
expect(this).toEqual(foo);
expect(e.baz).toEqual(2);
expect(e.type).to.eql('test');
expect(e.target).to.eql(obj2);
expect(this).to.eql(foo);
expect(e.baz).to.eql(2);
}
function listener3(e) {
expect(e.type).toEqual('test');
expect(e.target).toEqual(obj3);
expect(this).toEqual(obj3);
expect(e.baz).toEqual(3);
expect(e.type).to.eql('test');
expect(e.target).to.eql(obj3);
expect(this).to.eql(obj3);
expect(e.baz).to.eql(3);
}
function listener4(e) {
expect(e.type).toEqual('test');
expect(e.target).toEqual(obj4);
expect(this).toEqual(foo);
expect(e.baz).toEqual(4);
expect(e.type).to.eql('test');
expect(e.target).to.eql(obj4);
expect(this).to.eql(foo);
expect(e.baz).to.eql(4);
}
obj.addEventListener('test', listener1);
@ -90,18 +90,18 @@ describe('Events', function() {
it('calls no listeners removed through #removeEventListener', function() {
var obj = new Klass(),
spy = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
spy3 = jasmine.createSpy(),
spy4 = jasmine.createSpy(),
spy5 = jasmine.createSpy();
spy = sinon.spy(),
spy2 = sinon.spy(),
spy3 = sinon.spy(),
spy4 = sinon.spy(),
spy5 = sinon.spy();
obj.addEventListener('test', spy);
obj.removeEventListener('test', spy);
obj.fireEvent('test');
expect(spy).not.toHaveBeenCalled();
expect(spy.called).to.be(false);
obj.addEventListener('test2', spy2);
obj.addEventListener('test2', spy3);
@ -109,8 +109,8 @@ describe('Events', function() {
obj.fireEvent('test2');
expect(spy2).not.toHaveBeenCalled();
expect(spy3).not.toHaveBeenCalled();
expect(spy2.called).to.be(false);
expect(spy3.called).to.be(false);
obj.addEventListener('test3', spy4);
obj.addEventListener('test4', spy5);
@ -122,45 +122,45 @@ describe('Events', function() {
obj.fireEvent('test3');
obj.fireEvent('test4');
expect(spy4).not.toHaveBeenCalled();
expect(spy5).not.toHaveBeenCalled();
expect(spy4.called).to.be(false);
expect(spy5.called).to.be(false);
});
// added due to context-sensitive removeListener optimization
it('fires multiple listeners with the same context with id', function () {
var obj = new Klass(),
spy = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
spy1 = sinon.spy(),
spy2 = sinon.spy(),
foo = {};
L.Util.stamp(foo);
obj.addEventListener('test', spy, foo);
obj.addEventListener('test', spy1, foo);
obj.addEventListener('test', spy2, foo);
obj.fireEvent('test');
expect(spy).toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
expect(spy1.called).to.be(true);
expect(spy2.called).to.be(true);
});
it('removes listeners with stamped contexts', function () {
var obj = new Klass(),
spy = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
spy1 = sinon.spy(),
spy2 = sinon.spy(),
foo = {};
L.Util.stamp(foo);
obj.addEventListener('test', spy, foo);
obj.addEventListener('test', spy1, foo);
obj.addEventListener('test', spy2, foo);
obj.removeEventListener('test', spy, foo);
obj.removeEventListener('test', spy1, foo);
obj.fireEvent('test');
expect(spy).not.toHaveBeenCalled();
expect(spy2).toHaveBeenCalled();
expect(spy1.called).to.be(false);
expect(spy2.called).to.be(true);
});
it('removes listeners with a stamp originally added without one', function() {
@ -208,23 +208,23 @@ describe('Events', function() {
it('works like #addEventListener && #removeEventListener', function() {
var obj = new Klass(),
spy = jasmine.createSpy();
spy = sinon.spy();
obj.on('test', spy);
obj.fire('test');
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be(true);
obj.off('test', spy);
obj.fireEvent('test');
expect(spy.callCount).toBeLessThan(2);
expect(spy.callCount).to.be.lessThan(2);
});
it('does not override existing methods with the same name', function() {
var spy1 = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
spy3 = jasmine.createSpy();
var spy1 = sinon.spy(),
spy2 = sinon.spy(),
spy3 = sinon.spy();
var Klass2 = L.Class.extend({
includes: L.Mixin.Events,
@ -236,13 +236,13 @@ describe('Events', function() {
var obj = new Klass2();
obj.on();
expect(spy1).toHaveBeenCalled();
expect(spy1.called).to.be(true);
obj.off();
expect(spy2).toHaveBeenCalled();
expect(spy2.called).to.be(true);
obj.fire();
expect(spy3).toHaveBeenCalled();
expect(spy3.called).to.be(true);
});
});
});

View File

@ -16,7 +16,7 @@ describe('Util', function() {
baz: 3
});
expect(a).toEqual({
expect(a).to.eql({
foo: 5,
bar: 7,
baz: 3
@ -26,7 +26,7 @@ describe('Util', function() {
it('accepts more than 2 arguments', function() {
L.Util.extend(a, {bar: 7}, {baz: 3});
expect(a).toEqual({
expect(a).to.eql({
foo: 5,
bar: 7,
baz: 3
@ -40,13 +40,13 @@ describe('Util', function() {
return this;
};
var fn2 = L.Util.bind(fn, 5);
var fn2 = L.Util.bind(fn, { foo: 'bar' });
expect(fn2()).toEqual(5);
expect(fn2()).to.eql({ foo: 'bar' });
});
it('passes additional arguments to the bound function', function () {
var fn = jasmine.createSpy(),
var fn = sinon.spy(),
foo = {},
a = {},
b = {};
@ -55,7 +55,7 @@ describe('Util', function() {
fn2();
expect(fn).toHaveBeenCalledWith(a, b);
expect(fn.calledWith(a, b)).to.be.ok();
});
});
@ -64,26 +64,26 @@ describe('Util', function() {
var a = {},
id = L.Util.stamp(a);
expect(typeof id).toEqual('number');
expect(L.Util.stamp(a)).toEqual(id);
expect(typeof id).to.eql('number');
expect(L.Util.stamp(a)).to.eql(id);
var b = {},
id2 = L.Util.stamp(b);
expect(id2).not.toEqual(id);
expect(id2).not.to.eql(id);
});
});
describe('#falseFn', function () {
it('returns false', function () {
expect(L.Util.falseFn()).toBe(false);
expect(L.Util.falseFn()).to.be(false);
});
});
describe('#formatNum', function () {
it('formats numbers with a given precision', function () {
expect(L.Util.formatNum(13.12325555, 3)).toEqual(13.123);
expect(L.Util.formatNum(13.12325555)).toEqual(13.12326);
expect(L.Util.formatNum(13.12325555, 3)).to.eql(13.123);
expect(L.Util.formatNum(13.12325555)).to.eql(13.12326);
});
});
@ -96,7 +96,7 @@ describe('Util', function() {
result: "?bar=7&baz=3"
};
expect(L.Util.getParamString(a.obj,a.url)).toEqual(a.result);
expect(L.Util.getParamString(a.obj,a.url)).to.eql(a.result);
var b = {
url: "http://example.com/get?justone=qs",
@ -104,7 +104,7 @@ describe('Util', function() {
result: "&bar=7&baz=3"
};
expect(L.Util.getParamString(b.obj,b.url)).toEqual(b.result);
expect(L.Util.getParamString(b.obj,b.url)).to.eql(b.result);
var c = {
url: undefined,
@ -112,72 +112,49 @@ describe('Util', function() {
result: "?bar=7&baz=3"
};
expect(L.Util.getParamString(c.obj,c.url)).toEqual(c.result);
expect(L.Util.getParamString(c.obj,c.url)).to.eql(c.result);
});
});
describe('#requestAnimFrame', function () {
it('calles a function on next frame, unless canceled', function () {
var spy = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
called = false,
it('calles a function on next frame, unless canceled', function (done) {
var spy = sinon.spy(),
spy2 = sinon.spy(),
foo = {};
runs(function () {
L.Util.requestAnimFrame(spy);
L.Util.requestAnimFrame(spy);
L.Util.requestAnimFrame(function () {
called = true;
expect(this).toEqual(foo);
spy();
}, foo);
L.Util.requestAnimFrame(function () {
expect(this).to.eql(foo);
done();
}, foo);
L.Util.cancelAnimFrame(spy);
});
waitsFor(function () {
return called;
}, 'function should be called', 500);
runs(function () {
expect(spy).toHaveBeenCalled();
expect(spy2).not.toHaveBeenCalled();
});
L.Util.cancelAnimFrame(spy);
});
});
describe('#limitExecByInterval', function() {
it('limits execution to not more often than specified time interval', function () {
var spy = jasmine.createSpy(),
check = false;
it('limits execution to not more often than specified time interval', function (done) {
var spy = sinon.spy();
var fn = L.Util.limitExecByInterval(spy, 20);
runs(function () {
fn();
fn();
fn();
fn();
fn();
fn();
expect(spy.calls.length).toEqual(1);
expect(spy.callCount).to.eql(1);
setTimeout(function () {
check = true;
}, 30);
});
waitsFor(function () {
return check;
});
runs(function () {
expect(spy.calls.length).toEqual(2);
});
setTimeout(function () {
expect(spy.callCount).to.eql(2);
done();
}, 30);
});
});
describe('#splitWords', function () {
it('splits words into an array', function () {
expect(L.Util.splitWords('foo bar baz')).toEqual(['foo', 'bar', 'baz']);
expect(L.Util.splitWords('foo bar baz')).to.eql(['foo', 'bar', 'baz']);
});
});
@ -192,17 +169,17 @@ describe('Util', function() {
bar: 'Dave'
});
expect(str).toEqual('Hello Vlad and Dave!');
expect(str).to.eql('Hello Vlad and Dave!');
});
it('does not modify text without a token variable', function () {
expect(L.Util.template('foo', {})).toEqual('foo');
expect(L.Util.template('foo', {})).to.eql('foo');
});
it('throws when a template token is not given', function () {
expect(function () {
L.Util.template(tpl, {foo: 'bar'});
}).toThrow();
}).to.throwError();
});
});
});

View File

@ -11,84 +11,84 @@ describe('DomEvent', function() {
return el.fireEvent('onclick');
}
}
beforeEach(function() {
el = document.createElement('div');
el.style.position = 'absolute';
el.style.top = el.style.left = '-10000px';
document.body.appendChild(el);
});
afterEach(function() {
document.body.removeChild(el);
});
describe('#addListener', function() {
it('adds a listener and calls it on event', function() {
var listener1 = jasmine.createSpy('listener1'),
listener2 = jasmine.createSpy('listener2');
var listener1 = sinon.spy(),
listener2 = sinon.spy();
L.DomEvent.addListener(el, 'click', listener1);
L.DomEvent.addListener(el, 'click', listener2);
simulateClick(el);
expect(listener1).toHaveBeenCalled();
expect(listener2).toHaveBeenCalled();
expect(listener1.called).to.be.ok();
expect(listener2.called).to.be.ok();
});
it('binds "this" to the given context', function() {
var obj = {foo: 'bar'},
result;
L.DomEvent.addListener(el, 'click', function() {
result = this;
}, obj);
simulateClick(el);
expect(result).toEqual(obj);
expect(result).to.eql(obj);
});
it('passes an event object to the listener', function() {
var type;
L.DomEvent.addListener(el, 'click', function(e) {
type = e && e.type;
});
simulateClick(el);
expect(type).toEqual('click');
expect(type).to.eql('click');
});
});
describe('#removeListener', function() {
it('removes a previously added listener', function() {
var listener = jasmine.createSpy('listener');
var listener = sinon.spy();
L.DomEvent.addListener(el, 'click', listener);
L.DomEvent.removeListener(el, 'click', listener);
simulateClick(el);
expect(listener).not.toHaveBeenCalled();
expect(listener.called).to.not.be.ok();
});
});
describe('#stopPropagation', function() {
it('stops propagation of the given event', function() {
var child = document.createElement('div'),
listener = jasmine.createSpy('listener');
listener = sinon.spy();
el.appendChild(child);
L.DomEvent.addListener(child, 'click', L.DomEvent.stopPropagation);
L.DomEvent.addListener(el, 'click', listener);
simulateClick(child);
expect(listener).not.toHaveBeenCalled();
expect(listener.called).to.not.be.ok();
el.removeChild(child);
});
});
@ -96,7 +96,7 @@ describe('DomEvent', function() {
it('prevents the default action of event', function() {
L.DomEvent.addListener(el, 'click', L.DomEvent.preventDefault);
expect(simulateClick(el)).toBe(false);
expect(simulateClick(el)).to.be(false);
});
});
});
});

View File

@ -15,48 +15,48 @@ describe('DomUtil', function() {
describe('#get', function() {
it('gets element by id if the given argument is string', function() {
el.id = 'testId';
expect(L.DomUtil.get(el.id)).toBe(el);
expect(L.DomUtil.get(el.id)).to.eql(el);
});
it('returns the element if it is given as an argument', function() {
expect(L.DomUtil.get(el)).toBe(el);
expect(L.DomUtil.get(el)).to.eql(el);
});
});
describe('#addClass, #removeClass, #hasClass', function() {
it('has defined class for test element', function() {
el.className = 'bar foo baz ';
expect(L.DomUtil.hasClass(el, 'foo')).toBeTruthy();
expect(L.DomUtil.hasClass(el, 'bar')).toBeTruthy();
expect(L.DomUtil.hasClass(el, 'baz')).toBeTruthy();
expect(L.DomUtil.hasClass(el, 'boo')).toBeFalsy();
expect(L.DomUtil.hasClass(el, 'foo')).to.be.ok();
expect(L.DomUtil.hasClass(el, 'bar')).to.be.ok();
expect(L.DomUtil.hasClass(el, 'baz')).to.be.ok();
expect(L.DomUtil.hasClass(el, 'boo')).to.not.be.ok();
});
it('adds or removes the class', function() {
el.className = '';
L.DomUtil.addClass(el, 'foo');
expect(el.className).toEqual('foo');
expect(L.DomUtil.hasClass(el, 'foo')).toBeTruthy();
expect(el.className).to.eql('foo');
expect(L.DomUtil.hasClass(el, 'foo')).to.be.ok();
L.DomUtil.addClass(el, 'bar');
expect(el.className).toEqual('foo bar');
expect(L.DomUtil.hasClass(el, 'foo')).toBeTruthy();
expect(el.className).to.eql('foo bar');
expect(L.DomUtil.hasClass(el, 'foo')).to.be.ok();
L.DomUtil.removeClass(el, 'foo');
expect(el.className).toEqual('bar');
expect(L.DomUtil.hasClass(el, 'foo')).toBeFalsy();
expect(el.className).to.eql('bar');
expect(L.DomUtil.hasClass(el, 'foo')).to.not.be.ok();
el.className = 'foo bar barz';
L.DomUtil.removeClass(el, 'bar');
expect(el.className).toEqual('foo barz');
expect(el.className).to.eql('foo barz');
});
});
describe('#documentIsLtr', function () {
it('returns true if doc direction is ltr', function () {
expect(L.DomUtil.documentIsLtr()).toBe(true);
expect(L.DomUtil.documentIsLtr()).toBe(true); // cached
expect(L.DomUtil.documentIsLtr()).to.eql(true);
expect(L.DomUtil.documentIsLtr()).to.eql(true); // cached
});
});
@ -77,13 +77,13 @@ describe('DomUtil', function() {
document.body.appendChild(div);
expect(L.DomUtil.getViewportOffset(div2)).toEqual(new L.Point(260, 260));
expect(L.DomUtil.getViewportOffset(div2)).to.eql(new L.Point(260, 260));
document.body.removeChild(div);
});
});
describe('#setPosition', noSpecs);
// describe('#setPosition', noSpecs);
describe('#getStyle', noSpecs);
// describe('#getStyle', noSpecs);
});

View File

@ -14,27 +14,27 @@ describe('LatLngBounds', function() {
new L.LatLng(14, 12),
new L.LatLng(30, 40)
]);
expect(b).toEqual(a);
expect(b.getNorthWest()).toEqual(new L.LatLng(30, 12));
expect(b).to.eql(a);
expect(b.getNorthWest()).to.eql(new L.LatLng(30, 12));
});
});
describe('#extend', function () {
it('extends the bounds by a given point', function () {
a.extend(new L.LatLng(20, 50));
expect(a.getNorthEast()).toEqual(new L.LatLng(30, 50));
expect(a.getNorthEast()).to.eql(new L.LatLng(30, 50));
});
it('extends the bounds by given bounds', function () {
a.extend([[20, 50], [8, 40]]);
expect(a.getSouthEast()).toEqual(new L.LatLng(8, 50));
expect(a.getSouthEast()).to.eql(new L.LatLng(8, 50));
});
});
describe('#getCenter', function () {
it('returns the bounds center', function () {
expect(a.getCenter()).toEqual(new L.LatLng(22, 26));
expect(a.getCenter()).to.eql(new L.LatLng(22, 26));
});
});
@ -42,94 +42,94 @@ describe('LatLngBounds', function() {
it('pads the bounds by a given ratio', function () {
var b = a.pad(0.5);
expect(b).toEqual(L.latLngBounds([[6, -2], [38, 54]]));
expect(b).to.eql(L.latLngBounds([[6, -2], [38, 54]]));
});
});
describe('#equals', function () {
it('returns true if bounds equal', function () {
expect(a.equals([[14, 12], [30, 40]])).toBe(true);
expect(a.equals([[14, 13], [30, 40]])).toBe(false);
expect(a.equals(null)).toBe(false);
expect(a.equals([[14, 12], [30, 40]])).to.eql(true);
expect(a.equals([[14, 13], [30, 40]])).to.eql(false);
expect(a.equals(null)).to.eql(false);
});
});
describe('#isValid', function() {
it('returns true if properly set up', function() {
expect(a.isValid()).toBeTruthy();
expect(a.isValid()).to.be.ok();
});
it('returns false if is invalid', function() {
expect(c.isValid()).toBeFalsy();
expect(c.isValid()).to.not.be.ok();
});
it('returns true if extended', function() {
c.extend([0, 0]);
expect(c.isValid()).toBeTruthy();
expect(c.isValid()).to.be.ok();
});
});
describe('#getWest', function () {
it('returns a proper bbox west value', function() {
expect(a.getWest()).toEqual(12);
expect(a.getWest()).to.eql(12);
});
});
describe('#getSouth', function () {
it('returns a proper bbox south value', function() {
expect(a.getSouth()).toEqual(14);
expect(a.getSouth()).to.eql(14);
});
});
describe('#getEast', function () {
it('returns a proper bbox east value', function() {
expect(a.getEast()).toEqual(40);
expect(a.getEast()).to.eql(40);
});
});
describe('#getNorth', function () {
it('returns a proper bbox north value', function() {
expect(a.getNorth()).toEqual(30);
expect(a.getNorth()).to.eql(30);
});
});
describe('#toBBoxString', function () {
it('returns a proper left,bottom,right,top bbox', function() {
expect(a.toBBoxString()).toEqual("12,14,40,30");
expect(a.toBBoxString()).to.eql("12,14,40,30");
});
});
describe('#getNorthWest', function () {
it('returns a proper north-west LatLng', function() {
expect(a.getNorthWest()).toEqual(new L.LatLng(a.getNorth(), a.getWest()));
expect(a.getNorthWest()).to.eql(new L.LatLng(a.getNorth(), a.getWest()));
});
});
describe('#getSouthEast', function () {
it('returns a proper south-east LatLng', function() {
expect(a.getSouthEast()).toEqual(new L.LatLng(a.getSouth(), a.getEast()));
expect(a.getSouthEast()).to.eql(new L.LatLng(a.getSouth(), a.getEast()));
});
});
describe('#contains', function () {
it('returns true if contains latlng point', function () {
expect(a.contains([16, 20])).toBe(true);
expect(L.latLngBounds(a).contains([5, 20])).toBe(false);
expect(a.contains([16, 20])).to.eql(true);
expect(L.latLngBounds(a).contains([5, 20])).to.eql(false);
});
it('returns true if contains bounds', function () {
expect(a.contains([[16, 20], [20, 40]])).toBe(true);
expect(a.contains([[16, 50], [8, 40]])).toBe(false);
expect(a.contains([[16, 20], [20, 40]])).to.eql(true);
expect(a.contains([[16, 50], [8, 40]])).to.eql(false);
});
});
describe('#intersects', function () {
it('returns true if intersects the given bounds', function () {
expect(a.intersects([[16, 20], [50, 60]])).toBe(true);
expect(a.contains([[40, 50], [50, 60]])).toBe(false);
expect(a.intersects([[16, 20], [50, 60]])).to.eql(true);
expect(a.contains([[40, 50], [50, 60]])).to.eql(false);
});
});

View File

@ -2,18 +2,18 @@ describe('LatLng', function() {
describe('constructor', function() {
it("sets lat and lng", function() {
var a = new L.LatLng(25, 74);
expect(a.lat).toEqual(25);
expect(a.lng).toEqual(74);
expect(a.lat).to.eql(25);
expect(a.lng).to.eql(74);
var b = new L.LatLng(-25, -74);
expect(b.lat).toEqual(-25);
expect(b.lng).toEqual(-74);
expect(b.lat).to.eql(-25);
expect(b.lng).to.eql(-74);
});
it('throws an error if invalid lat or lng', function () {
expect(function () {
var a = new L.LatLng(NaN, NaN);
}).toThrow();
}).to.throwError();
});
});
@ -21,51 +21,51 @@ describe('LatLng', function() {
it("returns true if compared objects are equal within a certain margin", function() {
var a = new L.LatLng(10, 20);
var b = new L.LatLng(10 + 1.0E-10, 20 - 1.0E-10);
expect(a.equals(b)).toBe(true);
expect(a.equals(b)).to.eql(true);
});
it("returns false if compared objects are not equal within a certain margin", function() {
var a = new L.LatLng(10, 20);
var b = new L.LatLng(10, 23.3);
expect(a.equals(b)).toBe(false);
expect(a.equals(b)).to.eql(false);
});
it('returns false if passed non-valid object', function () {
var a = new L.LatLng(10, 20);
expect(a.equals(null)).toBe(false);
expect(a.equals(null)).to.eql(false);
});
});
describe('#wrap', function () {
it("wraps longitude to lie between -180 and 180 by default", function() {
var a = new L.LatLng(0, 190).wrap().lng;
expect(a).toEqual(-170);
expect(a).to.eql(-170);
var b = new L.LatLng(0, 360).wrap().lng;
expect(b).toEqual(0);
expect(b).to.eql(0);
var c = new L.LatLng(0, 380).wrap().lng;
expect(c).toEqual(20);
expect(c).to.eql(20);
var d = new L.LatLng(0, -190).wrap().lng;
expect(d).toEqual(170);
expect(d).to.eql(170);
var e = new L.LatLng(0, -360).wrap().lng;
expect(e).toEqual(0);
expect(e).to.eql(0);
var f = new L.LatLng(0, -380).wrap().lng;
expect(f).toEqual(-20);
expect(f).to.eql(-20);
var g = new L.LatLng(0, 90).wrap().lng;
expect(g).toEqual(90);
expect(g).to.eql(90);
var h = new L.LatLng(0, 180).wrap().lng;
expect(h).toEqual(180);
expect(h).to.eql(180);
});
it("wraps longitude within the given range", function() {
var a = new L.LatLng(0, 190).wrap(-100, 100).lng;
expect(a).toEqual(-10);
expect(a).to.eql(-10);
});
});
@ -73,7 +73,7 @@ describe('LatLng', function() {
describe('#toString', function () {
it('formats a string', function () {
var a = new L.LatLng(10.333333333, 20.2222222);
expect(a.toString(3)).toEqual('LatLng(10.333, 20.222)');
expect(a.toString(3)).to.eql('LatLng(10.333, 20.222)');
});
});
@ -82,7 +82,7 @@ describe('LatLng', function() {
var a = new L.LatLng(50.5, 30.5);
var b = new L.LatLng(50, 1);
expect(Math.abs(Math.round(a.distanceTo(b) / 1000) - 2084) < 5).toBe(true);
expect(Math.abs(Math.round(a.distanceTo(b) / 1000) - 2084) < 5).to.eql(true);
});
});
@ -90,28 +90,28 @@ describe('LatLng', function() {
it('returns LatLng instance as is', function () {
var a = new L.LatLng(50, 30);
expect(L.latLng(a)).toBe(a);
expect(L.latLng(a)).to.eql(a);
});
it('accepts an array of coordinates', function () {
expect(L.latLng([50, 30])).toEqual(new L.LatLng(50, 30));
expect(L.latLng([50, 30])).to.eql(new L.LatLng(50, 30));
});
it('passes null or undefined as is', function () {
expect(L.latLng(undefined)).toBe(undefined);
expect(L.latLng(null)).toBe(null);
expect(L.latLng(undefined)).to.eql(undefined);
expect(L.latLng(null)).to.eql(null);
});
it('creates a LatLng object from two coordinates', function () {
expect(L.latLng(50, 30)).toEqual(new L.LatLng(50, 30));
expect(L.latLng(50, 30)).to.eql(new L.LatLng(50, 30));
});
it('accepts an object with lat/lng', function () {
expect(L.latLng({lat: 50, lng: 30})).toEqual(new L.LatLng(50, 30));
expect(L.latLng({lat: 50, lng: 30})).to.eql(new L.LatLng(50, 30));
});
it('accepts an object with lat/lon', function () {
expect(L.latLng({lat: 50, lon: 30})).toEqual(new L.LatLng(50, 30));
expect(L.latLng({lat: 50, lon: 30})).to.eql(new L.LatLng(50, 30));
});
});
});

View File

@ -1,28 +1,22 @@
xdescribe("Projection.Mercator", function() {
describe("Projection.Mercator", function() {
var p = L.Projection.Mercator;
beforeEach(function() {
function almostEqual(a, b, p) {
return Math.abs(a - b) <= (p || 1.0E-12);
}
this.addMatchers({
toAlmostEqual: function(expected, margin) {
var p1 = this.actual,
p2 = expected;
return almostEqual(p1.x, p2.x, margin) && almostEqual(p1.y, p2.y, margin);
}
});
});
expect.Assertion.prototype.near = function(expected, delta) {
delta = 0 || 1.0;
expect(this.obj.x).to
.be.within(expected.x - delta, expected.y + delta);
expect(this.obj.y).to
.be.within(expected.y - delta, expected.x + delta);
};
describe("#project", function() {
it("projects", function() {
//edge cases
expect(p.project(new L.LatLng(0, 0))).toAlmostEqual(new L.Point(0, 0));
expect(p.project(new L.LatLng(90, 180))).toAlmostEqual(new L.Point(-Math.PI, Math.PI));
expect(p.project(new L.LatLng(-90, -180))).toAlmostEqual(new L.Point(-Math.PI, -Math.PI));
expect(p.project(new L.LatLng(0, 0))).near(new L.Point(0, 0));
expect(p.project(new L.LatLng(90, 180))).near(new L.Point(-Math.PI, Math.PI));
expect(p.project(new L.LatLng(-90, -180))).near(new L.Point(-Math.PI, -Math.PI));
expect(p.project(new L.LatLng(50, 30))).toAlmostEqual(new L.Point(0.523598775598, 1.010683188683));
expect(p.project(new L.LatLng(50, 30))).near(new L.Point(0.523598775598, 1.010683188683));
});
});
@ -32,11 +26,11 @@ xdescribe("Projection.Mercator", function() {
return p.project(p.unproject(point));
}
expect(pr(new L.Point(0, 0))).toAlmostEqual(new L.Point(0, 0));
expect(pr(new L.Point(-Math.PI, Math.PI))).toAlmostEqual(new L.Point(-Math.PI, Math.PI));
expect(pr(new L.Point(-Math.PI, -Math.PI))).toAlmostEqual(new L.Point(-Math.PI, -Math.PI));
expect(pr(new L.Point(0, 0))).near(new L.Point(0, 0));
expect(pr(new L.Point(-Math.PI, Math.PI))).near(new L.Point(-Math.PI, Math.PI));
expect(pr(new L.Point(-Math.PI, -Math.PI))).near(new L.Point(-Math.PI, -Math.PI));
expect(pr(new L.Point(0.523598775598, 1.010683188683))).toAlmostEqual(new L.Point(0.523598775598, 1.010683188683));
expect(pr(new L.Point(0.523598775598, 1.010683188683))).near(new L.Point(0.523598775598, 1.010683188683));
});
});
});

View File

@ -15,73 +15,73 @@ describe('Bounds', function() {
describe('constructor', function() {
it('creates bounds with proper min & max on (Point, Point)', function() {
expect(a.min).toEqual(new L.Point(14, 12));
expect(a.max).toEqual(new L.Point(30, 40));
expect(a.min).to.eql(new L.Point(14, 12));
expect(a.max).to.eql(new L.Point(30, 40));
});
it('creates bounds with proper min & max on (Point[])', function() {
expect(b.min).toEqual(new L.Point(14, 12));
expect(b.max).toEqual(new L.Point(30, 40));
expect(b.min).to.eql(new L.Point(14, 12));
expect(b.max).to.eql(new L.Point(30, 40));
});
});
describe('#extend', function() {
it('extends the bounds to contain the given point', function() {
a.extend(new L.Point(50, 20));
expect(a.min).toEqual(new L.Point(14, 12));
expect(a.max).toEqual(new L.Point(50, 40));
expect(a.min).to.eql(new L.Point(14, 12));
expect(a.max).to.eql(new L.Point(50, 40));
b.extend(new L.Point(25, 50));
expect(b.min).toEqual(new L.Point(14, 12));
expect(b.max).toEqual(new L.Point(30, 50));
expect(b.min).to.eql(new L.Point(14, 12));
expect(b.max).to.eql(new L.Point(30, 50));
});
});
describe('#getCenter', function() {
it('returns the center point', function() {
expect(a.getCenter()).toEqual(new L.Point(22, 26));
expect(a.getCenter()).to.eql(new L.Point(22, 26));
});
});
describe('#contains', function() {
it('contains other bounds or point', function() {
a.extend(new L.Point(50, 10));
expect(a.contains(b)).toBeTruthy();
expect(b.contains(a)).toBeFalsy();
expect(a.contains(new L.Point(24, 25))).toBeTruthy();
expect(a.contains(new L.Point(54, 65))).toBeFalsy();
expect(a.contains(b)).to.be.ok();
expect(b.contains(a)).to.not.be.ok();
expect(a.contains(new L.Point(24, 25))).to.be.ok();
expect(a.contains(new L.Point(54, 65))).to.not.be.ok();
});
});
describe('#isValid', function() {
it('returns true if properly set up', function() {
expect(a.isValid()).toBeTruthy();
expect(a.isValid()).to.be.ok();
});
it('returns false if is invalid', function() {
expect(c.isValid()).toBeFalsy();
expect(c.isValid()).to.not.be.ok();
});
it('returns true if extended', function() {
c.extend([0, 0]);
expect(c.isValid()).toBeTruthy();
expect(c.isValid()).to.be.ok();
});
});
describe('#getSize', function () {
it('returns the size of the bounds as point', function () {
expect(a.getSize()).toEqual(new L.Point(16, 28));
expect(a.getSize()).to.eql(new L.Point(16, 28));
});
});
describe('#intersects', function () {
it('returns true if bounds intersect', function () {
expect(a.intersects(b)).toBe(true);
expect(a.intersects(new L.Bounds(new L.Point(100, 100), new L.Point(120, 120)))).toEqual(false);
expect(a.intersects(b)).to.be(true);
expect(a.intersects(new L.Bounds(new L.Point(100, 100), new L.Point(120, 120)))).to.eql(false);
});
});
describe('L.bounds factory', function () {
it('creates bounds from array of number arrays', function () {
var bounds = L.bounds([[14, 12], [30, 40]]);
expect(bounds).toEqual(a);
expect(bounds).to.eql(a);
});
});
});

View File

@ -14,16 +14,16 @@ describe('LineUtil', function () {
var segment = L.LineUtil.clipSegment(a, b, bounds);
expect(segment[0]).toEqual(new L.Point(5, 5));
expect(segment[1]).toEqual(new L.Point(10, 10));
expect(segment[0]).to.eql(new L.Point(5, 5));
expect(segment[1]).to.eql(new L.Point(10, 10));
var c = new L.Point(5, -5);
var d = new L.Point(20, 10);
var segment2 = L.LineUtil.clipSegment(c, d, bounds);
expect(segment2[0]).toEqual(new L.Point(10, 0));
expect(segment2[1]).toEqual(new L.Point(15, 5));
expect(segment2[0]).to.eql(new L.Point(10, 0));
expect(segment2[1]).to.eql(new L.Point(15, 5));
});
it('uses last bit code and reject segments out of bounds', function () {
@ -31,7 +31,7 @@ describe('LineUtil', function () {
var b = new L.Point(25, 20);
var segment = L.LineUtil.clipSegment(a, b, bounds, true);
expect(segment).toBe(false);
expect(segment).to.be(false);
});
});
@ -42,11 +42,11 @@ describe('LineUtil', function () {
var p = new L.Point(0, 0);
it('calculates distance from point to segment', function () {
expect(L.LineUtil.pointToSegmentDistance(p, p1, p2)).toEqual(Math.sqrt(200) / 2);
expect(L.LineUtil.pointToSegmentDistance(p, p1, p2)).to.eql(Math.sqrt(200) / 2);
});
it('calculates point closest to segment', function () {
expect(L.LineUtil.closestPointOnSegment(p, p1, p2)).toEqual(new L.Point(5, 5));
expect(L.LineUtil.closestPointOnSegment(p, p1, p2)).to.eql(new L.Point(5, 5));
});
});
@ -64,7 +64,7 @@ describe('LineUtil', function () {
var simplified = L.LineUtil.simplify(points, 0.1);
expect(simplified).toEqual([
expect(simplified).to.eql([
new L.Point(0, 0),
new L.Point(1, 0),
new L.Point(2, 1)

View File

@ -4,14 +4,14 @@ describe("Point", function() {
it("creates a point with the given x and y", function() {
var p = new L.Point(1.5, 2.5);
expect(p.x).toEqual(1.5);
expect(p.y).toEqual(2.5);
expect(p.x).to.eql(1.5);
expect(p.y).to.eql(2.5);
});
it("rounds the given x and y if the third argument is true", function() {
var p = new L.Point(1.3, 2.7, true);
expect(p.x).toEqual(1);
expect(p.y).toEqual(3);
expect(p.x).to.eql(1);
expect(p.y).to.eql(3);
});
});
@ -19,31 +19,31 @@ describe("Point", function() {
it('subtracts the given point from this one', function() {
var a = new L.Point(50, 30),
b = new L.Point(20, 10);
expect(a.subtract(b)).toEqual(new L.Point(30, 20));
expect(a.subtract(b)).to.eql(new L.Point(30, 20));
});
});
describe('#add', function() {
it('adds given point to this one', function() {
expect(new L.Point(50, 30).add(new L.Point(20, 10))).toEqual(new L.Point(70, 40));
expect(new L.Point(50, 30).add(new L.Point(20, 10))).to.eql(new L.Point(70, 40));
});
});
describe('#divideBy', function() {
it('divides this point by the given amount', function() {
expect(new L.Point(50, 30).divideBy(5)).toEqual(new L.Point(10, 6));
expect(new L.Point(50, 30).divideBy(5)).to.eql(new L.Point(10, 6));
});
});
describe('#multiplyBy', function() {
it('multiplies this point by the given amount', function() {
expect(new L.Point(50, 30).multiplyBy(2)).toEqual(new L.Point(100, 60));
expect(new L.Point(50, 30).multiplyBy(2)).to.eql(new L.Point(100, 60));
});
});
describe('#floor', function () {
it('returns a new point with floored coordinates', function () {
expect(new L.Point(50.56, 30.123).floor()).toEqual(new L.Point(50, 30));
expect(new L.Point(50.56, 30.123).floor()).to.eql(new L.Point(50, 30));
});
});
@ -51,7 +51,7 @@ describe("Point", function() {
it('calculates distance between two points', function () {
var p1 = new L.Point(0, 30);
var p2 = new L.Point(40, 0);
expect(p1.distanceTo(p2)).toEqual(50.0);
expect(p1.distanceTo(p2)).to.eql(50.0);
});
});
@ -61,8 +61,8 @@ describe("Point", function() {
var p2 = new L.Point(20.4, 50.12);
var p3 = new L.Point(20.5, 50.13);
expect(p1.equals(p2)).toBe(true);
expect(p1.equals(p3)).toBe(false);
expect(p1.equals(p2)).to.be(true);
expect(p1.equals(p3)).to.be(false);
});
});
@ -73,32 +73,32 @@ describe("Point", function() {
p3 = new L.Point(60, -20),
p4 = new L.Point(-40, -40);
expect(p1.contains(p2)).toBe(true);
expect(p1.contains(p3)).toBe(false);
expect(p1.contains(p4)).toBe(false);
expect(p1.contains(p2)).to.be(true);
expect(p1.contains(p3)).to.be(false);
expect(p1.contains(p4)).to.be(false);
});
});
describe('#toString', function () {
it('formats a string out of point coordinates', function () {
expect(new L.Point(50, 30) + '').toEqual('Point(50, 30)');
expect(new L.Point(50, 30) + '').to.eql('Point(50, 30)');
});
});
describe('L.point factory', function () {
it('leaves L.Point instances as is', function () {
var p = new L.Point(50, 30);
expect(L.point(p)).toBe(p);
expect(L.point(p)).to.be(p);
});
it('creates a point out of three arguments', function () {
expect(L.point(50.1, 30.1, true)).toEqual(new L.Point(50, 30));
expect(L.point(50.1, 30.1, true)).to.eql(new L.Point(50, 30));
});
it('creates a point from an array of coordinates', function () {
expect(L.point([50, 30])).toEqual(new L.Point(50, 30));
expect(L.point([50, 30])).to.eql(new L.Point(50, 30));
});
it('does not fail on invalid arguments', function () {
expect(L.point(undefined)).toBe(undefined);
expect(L.point(null)).toBe(null);
expect(L.point(undefined)).to.be(undefined);
expect(L.point(null)).to.be(null);
});
});
});

View File

@ -16,7 +16,7 @@ describe('PolyUtil', function () {
delete clipped[i]._code;
}
expect(clipped).toEqual([
expect(clipped).to.eql([
new L.Point(7.5, 10),
new L.Point(5, 5),
new L.Point(10, 7.5),

View File

@ -9,11 +9,11 @@ describe("Transformation", function() {
describe('#transform', function () {
it("performs a transformation", function() {
var p2 = t.transform(p, 2);
expect(p2).toEqual(new L.Point(24, 128));
expect(p2).to.eql(new L.Point(24, 128));
});
it('assumes a scale of 1 if not specified', function () {
var p2 = t.transform(p);
expect(p2).toEqual(new L.Point(12, 64));
expect(p2).to.eql(new L.Point(12, 64));
});
});
@ -21,11 +21,11 @@ describe("Transformation", function() {
it("performs a reverse transformation", function() {
var p2 = t.transform(p, 2);
var p3 = t.untransform(p2, 2);
expect(p3).toEqual(p);
expect(p3).to.eql(p);
});
it('assumes a scale of 1 if not specified', function () {
var p2 = t.transform(p);
expect(t.untransform(new L.Point(12, 64))).toEqual(new L.Point(10, 20));
expect(t.untransform(new L.Point(12, 64))).to.eql(new L.Point(10, 20));
});
});
});

View File

@ -16,20 +16,20 @@
var wasClicked = 0;
fg2.on('click', function(e) {
expect(e.layer).toBe(marker);
expect(e.target).toBe(fg2);
expect(e.layer).to.be(marker);
expect(e.target).to.be(fg2);
wasClicked |= 1;
});
fg1.on('click', function (e) {
expect(e.layer).toBe(marker);
expect(e.target).toBe(fg1);
expect(e.layer).to.be(marker);
expect(e.target).to.be(fg1);
wasClicked |= 2;
});
marker.fire('click', { type: 'click' });
expect(wasClicked).toBe(3);
expect(wasClicked).to.be(3);
});
});
});

View File

@ -4,9 +4,9 @@
var lg = L.layerGroup(),
marker = L.marker([0, 0]);
expect(lg.addLayer(marker)).toEqual(lg);
expect(lg.addLayer(marker)).to.eql(lg);
expect(lg.hasLayer(marker)).toBe(true);
expect(lg.hasLayer(marker)).to.be(true);
});
});
describe("#removeLayer", function () {
@ -15,9 +15,9 @@
marker = L.marker([0, 0]);
lg.addLayer(marker);
expect(lg.removeLayer(marker)).toEqual(lg);
expect(lg.removeLayer(marker)).to.eql(lg);
expect(lg.hasLayer(marker)).toBe(false);
expect(lg.hasLayer(marker)).to.be(false);
});
});
describe("#clearLayers", function () {
@ -26,9 +26,9 @@
marker = L.marker([0, 0]);
lg.addLayer(marker);
expect(lg.clearLayers()).toEqual(lg);
expect(lg.clearLayers()).to.eql(lg);
expect(lg.hasLayer(marker)).toBe(false);
expect(lg.hasLayer(marker)).to.be(false);
});
});
describe("#getLayers", function () {
@ -38,7 +38,7 @@
lg.addLayer(marker);
expect(lg.getLayers()).toEqual([marker]);
expect(lg.getLayers()).to.eql([marker]);
});
});
describe("#eachLayer", function () {
@ -50,8 +50,8 @@
lg.addLayer(marker);
lg.eachLayer(function(layer) {
expect(layer).toEqual(marker);
expect(this).toEqual(ctx);
expect(layer).to.eql(marker);
expect(this).to.eql(ctx);
}, ctx);
});
});

View File

@ -17,8 +17,8 @@ describe('TileLayer', function () {
maxZoom: maxZoom,
minZoom: minZoom
}).addTo(map);
expect(map.getMaxZoom()).toBe(maxZoom);
expect(map.getMinZoom()).toBe(minZoom);
expect(map.getMaxZoom()).to.be(maxZoom);
expect(map.getMinZoom()).to.be(minZoom);
});
});
@ -27,7 +27,7 @@ describe('TileLayer', function () {
map.setView([0, 0], 1);
var layer = L.tileLayer(tileUrl).addTo(map);
expect(layer.getContainer()).toBeTruthy();
expect(layer.getContainer()).to.be.ok();
});
});
@ -36,22 +36,22 @@ describe('TileLayer', function () {
map.setView([0, 0], 1);
L.tileLayer(tileUrl, { minZoom:10, maxZoom: 15 }).addTo(map);
expect(map.getMinZoom()).toBe(10);
expect(map.getMaxZoom()).toBe(15);
expect(map.getMinZoom()).to.be(10);
expect(map.getMaxZoom()).to.be(15);
L.tileLayer(tileUrl, { minZoom:5, maxZoom: 10 }).addTo(map);
expect(map.getMinZoom()).toBe(5); // changed
expect(map.getMaxZoom()).toBe(15); // unchanged
expect(map.getMinZoom()).to.be(5); // changed
expect(map.getMaxZoom()).to.be(15); // unchanged
L.tileLayer(tileUrl,{ minZoom:10, maxZoom: 20 }).addTo(map);
expect(map.getMinZoom()).toBe(5); // unchanged
expect(map.getMaxZoom()).toBe(20); // changed
expect(map.getMinZoom()).to.be(5); // unchanged
expect(map.getMaxZoom()).to.be(20); // changed
L.tileLayer(tileUrl, { minZoom:0, maxZoom: 25 }).addTo(map);
expect(map.getMinZoom()).toBe(0); // changed
expect(map.getMaxZoom()).toBe(25); // changed
expect(map.getMinZoom()).to.be(0); // changed
expect(map.getMaxZoom()).to.be(25); // changed
});
});
describe("when a tilelayer is removed from a map", function () {
@ -62,24 +62,24 @@ describe('TileLayer', function () {
L.tileLayer(tileUrl, { minZoom:0, maxZoom: 25 }).addTo(map)
];
map.whenReady(function() {
expect(map.getMinZoom()).toBe(0);
expect(map.getMaxZoom()).toBe(25);
expect(map.getMinZoom()).to.be(0);
expect(map.getMaxZoom()).to.be(25);
map.removeLayer(tiles[0]);
expect(map.getMinZoom()).toBe(0);
expect(map.getMaxZoom()).toBe(25);
expect(map.getMinZoom()).to.be(0);
expect(map.getMaxZoom()).to.be(25);
map.removeLayer(tiles[3]);
expect(map.getMinZoom()).toBe(5);
expect(map.getMaxZoom()).toBe(20);
expect(map.getMinZoom()).to.be(5);
expect(map.getMaxZoom()).to.be(20);
map.removeLayer(tiles[2]);
expect(map.getMinZoom()).toBe(5);
expect(map.getMaxZoom()).toBe(10);
expect(map.getMinZoom()).to.be(5);
expect(map.getMaxZoom()).to.be(10);
map.removeLayer(tiles[1]);
expect(map.getMinZoom()).toBe(0);
expect(map.getMaxZoom()).toBe(Infinity);
expect(map.getMinZoom()).to.be(0);
expect(map.getMaxZoom()).to.be(Infinity);
});
});
});

View File

@ -10,7 +10,7 @@
it("takes that radius", function() {
var marker = L.circleMarker([0, 0], { radius: 20 }).addTo(map);
expect(marker._radius).toBe(20);
expect(marker._radius).to.be(20);
});
});
@ -19,7 +19,7 @@
var marker = L.circleMarker([0, 0], { radius: 20 });
marker.setRadius(15);
marker.addTo(map);
expect(marker._radius).toBe(15);
expect(marker._radius).to.be(15);
});
});
@ -28,7 +28,7 @@
var marker = L.circleMarker([0, 0], { radius: 20 });
marker.addTo(map);
marker.setRadius(15);
expect(marker._radius).toBe(15);
expect(marker._radius).to.be(15);
});
});
@ -37,7 +37,7 @@
var marker = L.circleMarker([0, 0], { radius: 20 });
marker.addTo(map);
marker.setStyle({ radius: 15 });
expect(marker._radius).toBe(15);
expect(marker._radius).to.be(15);
});
});
describe("and setStyle is used to change the radius before adding", function () {
@ -45,9 +45,9 @@
var marker = L.circleMarker([0, 0], { radius: 20 });
marker.setStyle({ radius: 15 });
marker.addTo(map);
expect(marker._radius).toBe(15);
expect(marker._radius).to.be(15);
});
});
});
});
});
});

View File

@ -10,8 +10,8 @@ describe('Circle', function () {
it('returns bounds', function () {
var bounds = circle.getBounds();
expect(bounds.getSouthWest().equals([49.998203369, 29.997204939])).toBeTruthy();
expect(bounds.getNorthEast().equals([50.001796631, 30.002795061])).toBeTruthy();
expect(bounds.getSouthWest().equals([49.998203369, 29.997204939])).to.be.ok();
expect(bounds.getNorthEast().equals([50.001796631, 30.002795061])).to.be.ok();
});
});
});

View File

@ -1,11 +1,11 @@
describe('Polygon', function() {
var c = document.createElement('div');
c.style.width = '400px';
c.style.height = '400px';
var map = new L.Map(c);
map.setView(new L.LatLng(55.8, 37.6), 6);
describe("#initialize", function() {
it("doesn't overwrite the given latlng array", function () {
var originalLatLngs = [
@ -16,8 +16,8 @@ describe('Polygon', function() {
var polygon = new L.Polygon(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
expect(polygon._latlngs).toNotEqual(sourceLatLngs);
expect(sourceLatLngs).to.eql(originalLatLngs);
expect(polygon._latlngs).to.not.eql(sourceLatLngs);
});
});
@ -33,7 +33,7 @@ describe('Polygon', function() {
polygon.setLatLngs(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
expect(sourceLatLngs).to.eql(originalLatLngs);
});
});
@ -49,7 +49,7 @@ describe('Polygon', function() {
polygon.spliceLatLngs(1, 1, [7, 8]);
expect(polygon._latlngs).toEqual([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
expect(polygon._latlngs).to.eql([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
});
});
});

View File

@ -1,11 +1,11 @@
describe('PolylineGeometry', function() {
var c = document.createElement('div');
c.style.width = '400px';
c.style.height = '400px';
var map = new L.Map(c);
map.setView(new L.LatLng(55.8, 37.6), 6);
describe("#distanceTo", function() {
it("calculates distances to points", function() {
var p1 = map.latLngToLayerPoint(new L.LatLng(55.8, 37.6));
@ -18,18 +18,18 @@ describe('PolylineGeometry', function() {
'noClip': true
});
map.addLayer(polyline);
expect(polyline.closestLayerPoint(p1)).toEqual(null);
expect(polyline.closestLayerPoint(p1)).to.be(null);
polyline.setLatLngs(latlngs);
var point = polyline.closestLayerPoint(p1);
expect(point).not.toEqual(null);
expect(point.distance).not.toEqual(Infinity);
expect(point.distance).not.toEqual(NaN);
expect(point).not.to.be(null);
expect(point.distance).to.not.be(Infinity);
expect(point.distance).to.not.be(NaN);
var point2 = polyline.closestLayerPoint(p2);
expect(point.distance).toBeLessThan(point2.distance);
expect(point.distance).to.be.lessThan(point2.distance);
});
});
});

View File

@ -1,11 +1,11 @@
describe('Polyline', function() {
var c = document.createElement('div');
c.style.width = '400px';
c.style.height = '400px';
var map = new L.Map(c);
map.setView(new L.LatLng(55.8, 37.6), 6);
describe("#initialize", function() {
it("doesn't overwrite the given latlng array", function () {
var originalLatLngs = [
@ -16,8 +16,8 @@ describe('Polyline', function() {
var polyline = new L.Polyline(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
expect(polyline._latlngs).toNotEqual(sourceLatLngs);
expect(sourceLatLngs).to.eql(originalLatLngs);
expect(polyline._latlngs).to.not.eql(sourceLatLngs);
});
});
@ -33,7 +33,7 @@ describe('Polyline', function() {
polyline.setLatLngs(sourceLatLngs);
expect(sourceLatLngs).toEqual(originalLatLngs);
expect(sourceLatLngs).to.eql(originalLatLngs);
});
});
@ -49,7 +49,7 @@ describe('Polyline', function() {
polyline.spliceLatLngs(1, 1, [7, 8]);
expect(polyline._latlngs).toEqual([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
expect(polyline._latlngs).to.eql([L.latLng([1, 2]), L.latLng([7, 8]), L.latLng([5, 6])]);
});
});
});

View File

@ -3,36 +3,38 @@ describe("Map", function () {
spy;
beforeEach(function () {
map = L.map(document.createElement('div'));
spy = jasmine.createSpy();
});
describe("#remove", function () {
it("fires an unload event if loaded", function () {
var container = document.createElement('div'),
map = new L.Map(container).setView([0, 0], 0);
map = new L.Map(container).setView([0, 0], 0),
spy = sinon.spy();
map.on('unload', spy);
map.remove();
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
it("fires no unload event if not loaded", function () {
var container = document.createElement('div'),
map = new L.Map(container);
map = new L.Map(container),
spy = sinon.spy();
map.on('unload', spy);
map.remove();
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
});
it("undefines container._leaflet", function () {
var container = document.createElement('div'),
map = new L.Map(container);
map.remove();
expect(container._leaflet).toBeUndefined();
expect(container._leaflet).to.be(undefined);
});
it("unbinds events", function () {
var container = document.createElement('div'),
map = new L.Map(container).setView([0, 0], 1);
map = new L.Map(container).setView([0, 0], 1),
spy = sinon.spy();
map.on('click dblclick mousedown mouseup mousemove', spy);
map.remove();
happen.click(container);
@ -40,7 +42,7 @@ describe("Map", function () {
happen.mousedown(container);
happen.mouseup(container);
happen.mousemove(container);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).to.not.be.ok();
});
});
@ -48,36 +50,38 @@ describe("Map", function () {
it ('throws if not set before', function () {
expect(function () {
map.getCenter();
}).toThrow();
}).to.throwError();
});
});
describe("#whenReady", function () {
describe("when the map has not yet been loaded", function () {
it("calls the callback when the map is loaded", function () {
var spy = sinon.spy();
map.whenReady(spy);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).to.not.be.ok();
map.setView([0, 0], 1);
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
});
describe("when the map has already been loaded", function () {
it("calls the callback immediately", function () {
var spy = sinon.spy();
map.setView([0, 0], 1);
map.whenReady(spy);
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
});
});
describe("#setView", function () {
it("sets the view of the map", function () {
expect(map.setView([51.505, -0.09], 13)).toBe(map);
expect(map.getZoom()).toBe(13);
expect(map.getCenter().distanceTo([51.505, -0.09])).toBeLessThan(5);
expect(map.setView([51.505, -0.09], 13)).to.be(map);
expect(map.getZoom()).to.be(13);
expect(map.getCenter().distanceTo([51.505, -0.09])).to.be.lessThan(5);
});
});
@ -97,40 +101,43 @@ describe("Map", function () {
map = L.map(c, { minZoom: 5, maxZoom: 10 });
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
L.tileLayer("{z}{x}{y}", { minZoom:5, maxZoom: 15 }).addTo(map);
expect(map.getMinZoom()).toBe(5);
expect(map.getMaxZoom()).toBe(10);
expect(map.getMinZoom()).to.be(5);
expect(map.getMaxZoom()).to.be(10);
});
});
describe("#addLayer", function () {
describe("When the first layer is added to a map", function () {
it("fires a zoomlevelschange event", function () {
var spy = sinon.spy();
map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
});
describe("when a new layer with greater zoomlevel coverage than the current layer is added to a map", function () {
it("fires a zoomlevelschange event", function () {
var spy = sinon.spy();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 15 }).addTo(map);
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
});
describe("when a new layer with the same or lower zoomlevel coverage as the current layer is added to a map", function () {
it("fires no zoomlevelschange event", function () {
var spy = sinon.spy();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 5 }).addTo(map);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
});
});
});
@ -139,12 +146,13 @@ describe("Map", function () {
describe("when the last tile layer on a map is removed", function () {
it("fires a zoomlevelschange event", function () {
map.whenReady(function(){
var spy = sinon.spy();
var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).not.to.be.ok();
map.removeLayer(tl);
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
});
});
@ -152,13 +160,14 @@ describe("Map", function () {
describe("when a tile layer is removed from a map and it had greater zoom level coverage than the remainding layer", function () {
it("fires a zoomlevelschange event", function () {
map.whenReady(function(){
var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map),
var spy = sinon.spy(),
tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map),
t2 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 15 }).addTo(map);
map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled();
expect(spy.called).to.not.be.ok();
map.removeLayer(t2);
expect(spy).toHaveBeenCalled();
expect(spy.called).to.be.ok();
});
});
});
@ -183,26 +192,28 @@ describe("Map", function () {
describe("#eachLayer", function () {
it("returns self", function () {
expect(map.eachLayer(function () {})).toBe(map);
expect(map.eachLayer(function () {})).to.be(map);
});
it("calls the provided function for each layer", function () {
var t1 = L.tileLayer("{z}{x}{y}").addTo(map),
t2 = L.tileLayer("{z}{x}{y}").addTo(map);
t2 = L.tileLayer("{z}{x}{y}").addTo(map),
spy = sinon.spy();
map.eachLayer(spy);
expect(spy.calls.length).toEqual(2);
expect(spy.calls[0].args).toEqual([t1]);
expect(spy.calls[1].args).toEqual([t2]);
expect(spy.callCount).to.eql(2);
expect(spy.firstCall.args).to.eql([t1]);
expect(spy.secondCall.args).to.eql([t2]);
});
it("calls the provided function with the provided context", function () {
var t1 = L.tileLayer("{z}{x}{y}").addTo(map);
var t1 = L.tileLayer("{z}{x}{y}").addTo(map),
spy = sinon.spy();
map.eachLayer(spy, map);
expect(spy.calls[0].object).toEqual(map);
expect(spy.thisValues[0]).to.eql(map);
});
});
});