Leaflet/spec/suites/core/UtilSpec.js
John Firebaugh 01332ebead Omit "should" in spec descriptions
The rationale is this: the spec string describes the expected
behavior unconditionally. The code examples, on the other hand,
set up an expectation that is tested with the call to the expect
method. The code examples can violate the expectation, but the
spec string does not. The value of the spec string is as clearly
as possible describing the behavior. Including “should” in that
description adds no value. (From http://rubyspec.org/style_guide/)
2013-02-19 12:41:48 -08:00

209 lines
4.4 KiB
JavaScript

describe('Util', function() {
describe('#extend', function() {
var a;
beforeEach(function() {
a = {
foo: 5,
bar: 'asd'
};
});
it('extends the first argument with the properties of the second', function() {
L.Util.extend(a, {
bar: 7,
baz: 3
});
expect(a).toEqual({
foo: 5,
bar: 7,
baz: 3
});
});
it('accepts more than 2 arguments', function() {
L.Util.extend(a, {bar: 7}, {baz: 3});
expect(a).toEqual({
foo: 5,
bar: 7,
baz: 3
});
});
});
describe('#bind', function() {
it('returns the given function with the given context', function() {
var fn = function() {
return this;
};
var fn2 = L.Util.bind(fn, 5);
expect(fn2()).toEqual(5);
});
it('passes additional arguments to the bound function', function () {
var fn = jasmine.createSpy(),
foo = {},
a = {},
b = {};
var fn2 = L.Util.bind(fn, foo, a, b);
fn2();
expect(fn).toHaveBeenCalledWith(a, b);
});
});
describe('#stamp', function() {
it('sets a unique id on the given object and returns it', function() {
var a = {},
id = L.Util.stamp(a);
expect(typeof id).toEqual('number');
expect(L.Util.stamp(a)).toEqual(id);
var b = {},
id2 = L.Util.stamp(b);
expect(id2).not.toEqual(id);
});
});
describe('#falseFn', function () {
it('returns false', function () {
expect(L.Util.falseFn()).toBe(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);
});
});
describe('#getParamString', function() {
it('creates a valid query string for appending depending on url input', function() {
var a = {
url: "http://example.com/get",
obj: {bar: 7, baz: 3},
result: "?bar=7&baz=3"
};
expect(L.Util.getParamString(a.obj,a.url)).toEqual(a.result);
var b = {
url: "http://example.com/get?justone=qs",
obj: {bar: 7, baz: 3},
result: "&bar=7&baz=3"
};
expect(L.Util.getParamString(b.obj,b.url)).toEqual(b.result);
var c = {
url: undefined,
obj: {bar: 7, baz: 3},
result: "?bar=7&baz=3"
};
expect(L.Util.getParamString(c.obj,c.url)).toEqual(c.result);
});
});
describe('#requestAnimFrame', function () {
it('calles a function on next frame, unless canceled', function () {
var spy = jasmine.createSpy(),
spy2 = jasmine.createSpy(),
called = false,
foo = {};
runs(function () {
L.Util.requestAnimFrame(spy);
L.Util.requestAnimFrame(function () {
called = true;
expect(this).toEqual(foo);
spy();
}, foo);
L.Util.cancelAnimFrame(spy);
});
waitsFor(function () {
return called;
}, 'function should be called', 500);
runs(function () {
expect(spy).toHaveBeenCalled();
expect(spy2).not.toHaveBeenCalled();
});
});
});
describe('#limitExecByInterval', function() {
it('limits execution to not more often than specified time interval', function () {
var spy = jasmine.createSpy(),
check = false;
var fn = L.Util.limitExecByInterval(spy, 20);
runs(function () {
fn();
fn();
fn();
expect(spy.calls.length).toEqual(1);
setTimeout(function () {
check = true;
}, 30);
});
waitsFor(function () {
return check;
});
runs(function () {
expect(spy.calls.length).toEqual(2);
});
});
});
describe('#splitWords', function () {
it('splits words into an array', function () {
expect(L.Util.splitWords('foo bar baz')).toEqual(['foo', 'bar', 'baz']);
});
});
// TODO setOptions
describe('#template', function () {
it('evaluates templates with a given data object', function () {
var tpl = 'Hello {foo} and {bar}!';
var str = L.Util.template(tpl, {
foo: 'Vlad',
bar: 'Dave'
});
expect(str).toEqual('Hello Vlad and Dave!');
});
it('does not modify text without a token variable', function () {
expect(L.Util.template('foo', {})).toEqual('foo');
});
it('throws when a template token is not given', function () {
expect(function () {
L.Util.template(tpl, {foo: 'bar'});
}).toThrow();
});
});
});