beautify_js

This commit is contained in:
Ilya Kantor 2015-03-09 18:48:58 +03:00
parent 0febe4f5fd
commit 5c2f32e184
208 changed files with 3891 additions and 1474 deletions

View file

@ -1 +1 @@
alert('Я - JavaScript!'); alert('Я - JavaScript!');

View file

@ -3,6 +3,6 @@ function pow(x, n) {
return x; return x;
} }
var result = x * pow(x, n-1); var result = x * pow(x, n - 1);
return result; return result;
} }

View file

@ -3,6 +3,6 @@ function pow(x, n) {
return y; return y;
} }
var result = x * pow(x, n-1); var result = x * pow(x, n - 1);
return result; return result;
} }

View file

@ -1,9 +1,9 @@
function pow(x, n) { function pow(x, n) {
if (n < 0) return NaN; if (n < 0) return NaN;
if (Math.round(n) != n) return NaN; if (Math.round(n) != n) return NaN;
var result = 1; var result = 1;
for(var i=0; i<n; i++) { for (var i = 0; i < n; i++) {
result *= x; result *= x;
} }
return result; return result;

View file

@ -1,7 +1,7 @@
/* исправьте этот код */ /* исправьте этот код */
function pow(x, n) { function pow(x, n) {
var result = 1; var result = 1;
for(var i=0; i<n; i++) { for (var i = 0; i < n; i++) {
result *= x; result *= x;
} }
return result; return result;

View file

@ -3,24 +3,24 @@ describe("pow", function() {
describe("возводит x в степень n", function() { describe("возводит x в степень n", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }
}); });
it("при возведении в отрицательную степень результат NaN", function() { it("при возведении в отрицательную степень результат NaN", function() {
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" ); assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
}); });
it("при возведении в дробную степень результат NaN", function() { it("при возведении в дробную степень результат NaN", function() {
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" ); assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
}); });
}); });

View file

@ -1,10 +1,10 @@
function pow(x, n) { function pow(x, n) {
if (n < 0) return NaN; if (n < 0) return NaN;
if (Math.round(n) != n) return NaN; if (Math.round(n) != n) return NaN;
if (n == 0 && x ==0) return NaN; if (n == 0 && x == 0) return NaN;
var result = 1; var result = 1;
for(var i=0; i<n; i++) { for (var i = 0; i < n; i++) {
result *= x; result *= x;
} }
return result; return result;

View file

@ -1,9 +1,9 @@
function pow(x, n) { function pow(x, n) {
if (n < 0) return NaN; if (n < 0) return NaN;
if (Math.round(n) != n) return NaN; if (Math.round(n) != n) return NaN;
var result = 1; var result = 1;
for(var i=0; i<n; i++) { for (var i = 0; i < n; i++) {
result *= x; result *= x;
} }
return result; return result;

View file

@ -3,42 +3,42 @@ describe("pow", function() {
describe("возводит x в степень n", function() { describe("возводит x в степень n", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }
}); });
it("при возведении в отрицательную степень результат NaN", function() { it("при возведении в отрицательную степень результат NaN", function() {
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" ); assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
}); });
it("при возведении в дробную степень результат NaN", function() { it("при возведении в дробную степень результат NaN", function() {
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" ); assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
}); });
describe("любое число, кроме нуля, в степени 0 равно 1", function() { describe("любое число, кроме нуля, в степени 0 равно 1", function() {
function makeTest(x) { function makeTest(x) {
it("при возведении " + x + " в степень 0 результат: 1", function() { it("при возведении " + x + " в степень 0 результат: 1", function() {
assert.equal( pow(x, 0), 1); assert.equal(pow(x, 0), 1);
}); });
} }
for(var x = -5; x <= 5; x+=2) { for (var x = -5; x <= 5; x += 2) {
makeTest(x); makeTest(x);
} }
}); });
it("ноль в нулевой степени даёт NaN", function() { it("ноль в нулевой степени даёт NaN", function() {
assert( isNaN( pow(0,0) ), "0 в степени 0 не NaN"); assert(isNaN(pow(0, 0)), "0 в степени 0 не NaN");
}); });
}); });

View file

@ -1,12 +1,24 @@
describe("Тест", function() { describe("Тест", function() {
before(function() { alert("Начало всех тестов"); }); before(function() {
after(function() { alert("Окончание всех тестов"); }); alert("Начало всех тестов");
});
after(function() {
alert("Окончание всех тестов");
});
beforeEach(function() { alert("Вход в тест"); }); beforeEach(function() {
afterEach(function() { alert("Выход из теста"); }); alert("Вход в тест");
});
afterEach(function() {
alert("Выход из теста");
});
it('тест 1', function() { alert('1'); }); it('тест 1', function() {
it('тест 2', function() { alert('2'); }); alert('1');
});
it('тест 2', function() {
alert('2');
});
}); });

View file

@ -1,7 +1,7 @@
describe("pow", function() { describe("pow", function() {
it("возводит в n-ю степень", function() { it("возводит в n-ю степень", function() {
assert.equal( pow(2, 3), 8); assert.equal(pow(2, 3), 8);
}); });
}); });

View file

@ -1,11 +1,11 @@
describe("pow", function() { describe("pow", function() {
it("при возведении 2 в 3ю степень результат 8", function() { it("при возведении 2 в 3ю степень результат 8", function() {
assert.equal( pow(2, 3), 8); assert.equal(pow(2, 3), 8);
}); });
it("при возведении 3 в 4ю степень равен 81", function() { it("при возведении 3 в 4ю степень равен 81", function() {
assert.equal( pow(3, 4), 81); assert.equal(pow(3, 4), 81);
}); });
}); });

View file

@ -1,13 +1,13 @@
describe("pow", function() { describe("pow", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }

View file

@ -3,18 +3,18 @@ describe("pow", function() {
describe("возводит x в степень n", function() { describe("возводит x в степень n", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }
}); });
// ... // ...
}); });

View file

@ -3,42 +3,42 @@ describe("pow", function() {
describe("возводит x в степень n", function() { describe("возводит x в степень n", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }
}); });
it("при возведении в отрицательную степень результат NaN", function() { it("при возведении в отрицательную степень результат NaN", function() {
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" ); assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
}); });
it("при возведении в дробную степень результат NaN", function() { it("при возведении в дробную степень результат NaN", function() {
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" ); assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
}); });
describe("любое число, кроме нуля, в степени 0 равно 1", function() { describe("любое число, кроме нуля, в степени 0 равно 1", function() {
function makeTest(x) { function makeTest(x) {
it("при возведении " + x + " в степень 0 результат: 1", function() { it("при возведении " + x + " в степень 0 результат: 1", function() {
assert.equal( pow(x, 0), 1); assert.equal(pow(x, 0), 1);
}); });
} }
for(var x = -5; x <= 5; x+=2) { for (var x = -5; x <= 5; x += 2) {
makeTest(x); makeTest(x);
} }
}); });
it("ноль в нулевой степени даёт NaN", function() { it("ноль в нулевой степени даёт NaN", function() {
assert( isNaN( pow(0,0) ), "0 в степени 0 не NaN"); assert(isNaN(pow(0, 0)), "0 в степени 0 не NaN");
}); });
}); });

View file

@ -1,7 +1,7 @@
describe("pow", function() { describe("pow", function() {
it("возводит в n-ю степень", function() { it("возводит в n-ю степень", function() {
assert.equal( pow(2, 3), 8); assert.equal(pow(2, 3), 8);
}); });
}); });

View file

@ -3,24 +3,24 @@ describe("pow", function() {
describe("возводит x в степень n", function() { describe("возводит x в степень n", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }
}); });
it("при возведении в отрицательную степень результат NaN", function() { it("при возведении в отрицательную степень результат NaN", function() {
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" ); assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
}); });
it("при возведении в дробную степень результат NaN", function() { it("при возведении в дробную степень результат NaN", function() {
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" ); assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
}); });
}); });

View file

@ -3,24 +3,24 @@ describe("pow", function() {
describe("возводит x в степень n", function() { describe("возводит x в степень n", function() {
function makeTest(x) { function makeTest(x) {
var expected = x*x*x; var expected = x * x * x;
it("при возведении "+x+" в степень 3 результат: " + expected, function() { it("при возведении " + x + " в степень 3 результат: " + expected, function() {
assert.equal( pow(x, 3), expected); assert.equal(pow(x, 3), expected);
}); });
} }
for(var x = 1; x <= 5; x++) { for (var x = 1; x <= 5; x++) {
makeTest(x); makeTest(x);
} }
}); });
it("при возведении в отрицательную степень результат NaN", function() { it("при возведении в отрицательную степень результат NaN", function() {
assert( isNaN( pow(2, -1) ) ); assert(isNaN(pow(2, -1)));
}); });
it("при возведении в дробную степень результат NaN", function() { it("при возведении в дробную степень результат NaN", function() {
assert( isNaN( pow(2, 1.5) ) ); assert(isNaN(pow(2, 1.5)));
}); });
}); });

View file

@ -1,5 +1,5 @@
function getWeekDay(date) { function getWeekDay(date) {
var days = ['вс','пн','вт','ср','чт','пт','сб'] ; var days = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];
return days[ date.getDay() ]; return days[date.getDay()];
} }

View file

@ -1,29 +1,29 @@
describe("getWeekDay", function() { describe("getWeekDay", function() {
it("3 января 2014 - пятница", function() { it("3 января 2014 - пятница", function() {
assert.equal( getWeekDay(new Date(2014, 0, 3)), 'пт'); assert.equal(getWeekDay(new Date(2014, 0, 3)), 'пт');
}); });
it("4 января 2014 - суббота", function() { it("4 января 2014 - суббота", function() {
assert.equal( getWeekDay(new Date(2014, 0, 4)), 'сб'); assert.equal(getWeekDay(new Date(2014, 0, 4)), 'сб');
}); });
it("5 января 2014 - воскресенье", function() { it("5 января 2014 - воскресенье", function() {
assert.equal( getWeekDay(new Date(2014, 0, 5)), 'вс'); assert.equal(getWeekDay(new Date(2014, 0, 5)), 'вс');
}); });
it("6 января 2014 - понедельник", function() { it("6 января 2014 - понедельник", function() {
assert.equal( getWeekDay(new Date(2014, 0, 6)), 'пн'); assert.equal(getWeekDay(new Date(2014, 0, 6)), 'пн');
}); });
it("7 января 2014 - вторник", function() { it("7 января 2014 - вторник", function() {
assert.equal( getWeekDay(new Date(2014, 0, 7)), 'вт'); assert.equal(getWeekDay(new Date(2014, 0, 7)), 'вт');
}); });
it("8 января 2014 - среда", function() { it("8 января 2014 - среда", function() {
assert.equal( getWeekDay(new Date(2014, 0, 8)), 'ср'); assert.equal(getWeekDay(new Date(2014, 0, 8)), 'ср');
}); });
it("9 января 2014 - четверг", function() { it("9 января 2014 - четверг", function() {
assert.equal( getWeekDay(new Date(2014, 0, 9)), 'чт'); assert.equal(getWeekDay(new Date(2014, 0, 9)), 'чт');
}); });
}); });

View file

@ -2,9 +2,9 @@ function getLocalDay(date) {
var day = date.getDay(); var day = date.getDay();
if ( day == 0 ) { // день 0 становится 7 if (day == 0) { // день 0 становится 7
day = 7; day = 7;
} }
return day; return day;
} }

View file

@ -1,29 +1,29 @@
describe("getLocalDay возвращает день недели", function() { describe("getLocalDay возвращает день недели", function() {
it("3 января 2014 - пятница", function() { it("3 января 2014 - пятница", function() {
assert.equal( getLocalDay(new Date(2014, 0, 3)), 5); assert.equal(getLocalDay(new Date(2014, 0, 3)), 5);
}); });
it("4 января 2014 - суббота", function() { it("4 января 2014 - суббота", function() {
assert.equal( getLocalDay(new Date(2014, 0, 4)), 6); assert.equal(getLocalDay(new Date(2014, 0, 4)), 6);
}); });
it("5 января 2014 - воскресенье", function() { it("5 января 2014 - воскресенье", function() {
assert.equal( getLocalDay(new Date(2014, 0, 5)), 7); assert.equal(getLocalDay(new Date(2014, 0, 5)), 7);
}); });
it("6 января 2014 - понедельник", function() { it("6 января 2014 - понедельник", function() {
assert.equal( getLocalDay(new Date(2014, 0, 6)), 1); assert.equal(getLocalDay(new Date(2014, 0, 6)), 1);
}); });
it("7 января 2014 - вторник", function() { it("7 января 2014 - вторник", function() {
assert.equal( getLocalDay(new Date(2014, 0, 7)), 2); assert.equal(getLocalDay(new Date(2014, 0, 7)), 2);
}); });
it("8 января 2014 - среда", function() { it("8 января 2014 - среда", function() {
assert.equal( getLocalDay(new Date(2014, 0, 8)), 3); assert.equal(getLocalDay(new Date(2014, 0, 8)), 3);
}); });
it("9 января 2014 - четверг", function() { it("9 января 2014 - четверг", function() {
assert.equal( getLocalDay(new Date(2014, 0, 9)), 4); assert.equal(getLocalDay(new Date(2014, 0, 9)), 4);
}); });
}); });

View file

@ -1,6 +1,6 @@
function getDateAgo(date, days) { function getDateAgo(date, days) {
var dateCopy = new Date(date); var dateCopy = new Date(date);
dateCopy.setDate( date.getDate() - days ); dateCopy.setDate(date.getDate() - days);
return dateCopy.getDate(); return dateCopy.getDate();
} }

View file

@ -1,20 +1,20 @@
describe("getDateAgo", function() { describe("getDateAgo", function() {
it("1 день до 02.01.2015 -> число 1", function() { it("1 день до 02.01.2015 -> число 1", function() {
assert.equal( getDateAgo(new Date(2015, 0, 2), 1), 1 ); assert.equal(getDateAgo(new Date(2015, 0, 2), 1), 1);
}); });
it("2 день до 02.01.2015 -> число 31", function() { it("2 день до 02.01.2015 -> число 31", function() {
assert.equal( getDateAgo(new Date(2015, 0, 2), 2), 31 ); assert.equal(getDateAgo(new Date(2015, 0, 2), 2), 31);
}); });
it("100 дней от 02.01.2015 -> число 24", function() { it("100 дней от 02.01.2015 -> число 24", function() {
assert.equal( getDateAgo(new Date(2015, 0, 2), 100), 24 ); assert.equal(getDateAgo(new Date(2015, 0, 2), 100), 24);
}); });
it("365 дней от 02.01.2015 -> число 2", function() { it("365 дней от 02.01.2015 -> число 2", function() {
assert.equal( getDateAgo(new Date(2015, 0, 2), 365), 2 ); assert.equal(getDateAgo(new Date(2015, 0, 2), 365), 2);
}); });
it("не меняет переданный объект Date", function() { it("не меняет переданный объект Date", function() {
@ -23,5 +23,5 @@ describe("getDateAgo", function() {
getDateAgo(dateCopy, 100); getDateAgo(dateCopy, 100);
assert.equal(date.getTime(), dateCopy.getTime()); assert.equal(date.getTime(), dateCopy.getTime());
}); });
}); });

View file

@ -1,4 +1,4 @@
function getLastDayOfMonth(year, month) { function getLastDayOfMonth(year, month) {
var date = new Date(year, month+1, 0); var date = new Date(year, month + 1, 0);
return date.getDate(); return date.getDate();
} }

View file

@ -1,13 +1,13 @@
describe("getLastDayOfMonth", function() { describe("getLastDayOfMonth", function() {
it("последний день 01.01.2012 - 31", function() { it("последний день 01.01.2012 - 31", function() {
assert.equal( getLastDayOfMonth(2012, 0), 31); assert.equal(getLastDayOfMonth(2012, 0), 31);
}); });
it("последний день 01.02.2012 - 29 (високосный год)", function() { it("последний день 01.02.2012 - 29 (високосный год)", function() {
assert.equal( getLastDayOfMonth(2012, 1), 29); assert.equal(getLastDayOfMonth(2012, 1), 29);
}); });
it("последний день 01.02.2013 - 28", function() { it("последний день 01.02.2013 - 28", function() {
assert.equal( getLastDayOfMonth(2013, 1), 28); assert.equal(getLastDayOfMonth(2013, 1), 28);
}); });
}); });

View file

@ -1,13 +1,13 @@
function formatDate(date) { function formatDate(date) {
var dd = date.getDate(); var dd = date.getDate();
if ( dd < 10 ) dd = '0' + dd; if (dd < 10) dd = '0' + dd;
var mm = date.getMonth()+1; var mm = date.getMonth() + 1;
if ( mm < 10 ) mm = '0' + mm; if (mm < 10) mm = '0' + mm;
var yy = date.getFullYear() % 100; var yy = date.getFullYear() % 100;
if ( yy < 10 ) yy = '0' + yy; if (yy < 10) yy = '0' + yy;
return dd+'.'+mm+'.'+yy; return dd + '.' + mm + '.' + yy;
} }

View file

@ -1,13 +1,13 @@
describe("formatDate", function() { describe("formatDate", function() {
it("правильно форматирует дату 30.01.14", function() { it("правильно форматирует дату 30.01.14", function() {
assert.equal( formatDate(new Date(2014, 0, 30)), '30.01.14'); assert.equal(formatDate(new Date(2014, 0, 30)), '30.01.14');
}); });
it("правильно форматирует дату 01.01.01", function() { it("правильно форматирует дату 01.01.01", function() {
assert.equal( formatDate(new Date(2001, 0, 1)), '01.01.01'); assert.equal(formatDate(new Date(2001, 0, 1)), '01.01.01');
}); });
it("правильно форматирует дату 01.01.00", function() { it("правильно форматирует дату 01.01.00", function() {
assert.equal( formatDate(new Date(2000, 0, 1)), '01.01.00'); assert.equal(formatDate(new Date(2000, 0, 1)), '01.01.00');
}); });
}); });

View file

@ -1,34 +1,34 @@
function formatDate(date) { function formatDate(date) {
var diff = new Date() - date; // разница в миллисекундах var diff = new Date() - date; // разница в миллисекундах
if (diff < 1000) { // прошло менее 1 секунды if (diff < 1000) { // прошло менее 1 секунды
return 'только что'; return 'только что';
} }
var sec = Math.floor( diff / 1000 ); // округлить diff до секунд var sec = Math.floor(diff / 1000); // округлить diff до секунд
if (sec < 60) { if (sec < 60) {
return sec + ' сек. назад'; return sec + ' сек. назад';
} }
var min = Math.floor( diff / 60000 ); // округлить diff до минут var min = Math.floor(diff / 60000); // округлить diff до минут
if (min < 60) { if (min < 60) {
return min + ' мин. назад'; return min + ' мин. назад';
} }
// форматировать дату, с учетом того, что месяцы начинаются с 0 // форматировать дату, с учетом того, что месяцы начинаются с 0
var d = date; var d = date;
d = [ d = [
'0'+d.getDate(), '0' + d.getDate(),
'0'+(d.getMonth()+1), '0' + (d.getMonth() + 1),
''+d.getFullYear(), '' + d.getFullYear(),
'0'+d.getHours(), '0' + d.getHours(),
'0'+d.getMinutes() '0' + d.getMinutes()
]; ];
for(var i=0; i<d.length; i++) { for (var i = 0; i < d.length; i++) {
d[i] = d[i].slice(-2); d[i] = d[i].slice(-2);
} }
return d.slice(0,3).join('.')+' '+d.slice(3).join(':'); return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
} }

View file

@ -1,18 +1,18 @@
describe("formatDate", function() { describe("formatDate", function() {
it("выводит дату 1мс назад как \"только что\"", function() { it("выводит дату 1мс назад как \"только что\"", function() {
assert.equal( formatDate( new Date(new Date - 1) ), 'только что' ); assert.equal(formatDate(new Date(new Date - 1)), 'только что');
}); });
it('выводит дату "30 сек назад"', function() { it('выводит дату "30 сек назад"', function() {
assert.equal( formatDate( new Date( new Date - 30*1000) ), "30 сек. назад" ); assert.equal(formatDate(new Date(new Date - 30 * 1000)), "30 сек. назад");
}); });
it('выводит дату "5 мин назад"', function() { it('выводит дату "5 мин назад"', function() {
assert.equal( formatDate( new Date( new Date- 5*60*1000) ), "5 мин. назад"); assert.equal(formatDate(new Date(new Date - 5 * 60 * 1000)), "5 мин. назад");
}); });
it("выводит старую дату в формате дд.мм.гг чч:мм", function() { it("выводит старую дату в формате дд.мм.гг чч:мм", function() {
assert.equal( formatDate( new Date(2014, 2, 1, 11, 22, 33) ), "01.03.14 11:22" ); assert.equal(formatDate(new Date(2014, 2, 1, 11, 22, 33)), "01.03.14 11:22");
}); });
}); });

View file

@ -1,12 +1,12 @@
function formatDate(date) { function formatDate(date) {
if (typeof date == 'number') { if (typeof date == 'number') {
// перевести секунды в миллисекунды и преобразовать к Date // перевести секунды в миллисекунды и преобразовать к Date
date = new Date(date*1000); date = new Date(date * 1000);
} else if(typeof date == 'string') { } else if (typeof date == 'string') {
// разобрать строку и преобразовать к Date // разобрать строку и преобразовать к Date
date = date.split('-'); date = date.split('-');
date = new Date(date[0], date[1]-1, date[2]); date = new Date(date[0], date[1] - 1, date[2]);
} else if ( date.length ) { // есть длина, но не строка - значит массив } else if (date.length) { // есть длина, но не строка - значит массив
date = new Date(date[0], date[1], date[2]); date = new Date(date[0], date[1], date[2]);
} }
// преобразования для поддержки полиморфизма завершены, // преобразования для поддержки полиморфизма завершены,
@ -15,13 +15,13 @@ function formatDate(date) {
var day = date.getDate(); var day = date.getDate();
if (day < 10) day = '0' + day; if (day < 10) day = '0' + day;
var month = date.getMonth()+1; var month = date.getMonth() + 1;
if (month < 10) month = '0' + month; if (month < 10) month = '0' + month;
// взять 2 последние цифры года // взять 2 последние цифры года
var year = date.getFullYear() % 100; var year = date.getFullYear() % 100;
if (year < 10) year = '0' + year; if (year < 10) year = '0' + year;
var formattedDate = day + '.' + month + '.' + year; var formattedDate = day + '.' + month + '.' + year;
return formattedDate; return formattedDate;

View file

@ -1,18 +1,18 @@
describe("formatDate", function() { describe("formatDate", function() {
it("читает дату вида гггг-мм-дд из строки", function() { it("читает дату вида гггг-мм-дд из строки", function() {
assert.equal( formatDate( '2011-10-02' ), "02.10.11" ); assert.equal(formatDate('2011-10-02'), "02.10.11");
}); });
it("читает дату из числа 1234567890 (миллисекунды)", function() { it("читает дату из числа 1234567890 (миллисекунды)", function() {
assert.equal( formatDate( 1234567890 ), "14.02.09" ); assert.equal(formatDate(1234567890), "14.02.09");
}); });
it("читает дату из массива вида [гггг, м, д]", function() { it("читает дату из массива вида [гггг, м, д]", function() {
assert.equal( formatDate( [2014,0,1] ), "01.01.14" ); assert.equal(formatDate([2014, 0, 1]), "01.01.14");
}); });
it("читает дату из объекта Date", function() { it("читает дату из объекта Date", function() {
assert.equal( formatDate( new Date(2014,0,1) ), "01.01.14" ); assert.equal(formatDate(new Date(2014, 0, 1)), "01.01.14");
}); });
}); });

View file

@ -2,6 +2,6 @@ function getDecimal(num) {
var str = "" + num; var str = "" + num;
var zeroPos = str.indexOf("."); var zeroPos = str.indexOf(".");
if (zeroPos == -1) return 0; if (zeroPos == -1) return 0;
str = str.slice( zeroPos ); str = str.slice(zeroPos);
return +str; return +str;
} }

View file

@ -1,21 +1,21 @@
describe("getDecimal", function() { describe("getDecimal", function() {
it("возвращает дробную часть 1.2 как 0.2", function() { it("возвращает дробную часть 1.2 как 0.2", function() {
assert.equal( getDecimal(1.2), 0.2 ); assert.equal(getDecimal(1.2), 0.2);
}); });
it("возвращает дробную часть 1.3 как 0.3", function() { it("возвращает дробную часть 1.3 как 0.3", function() {
assert.equal( getDecimal(1.3), 0.3 ); assert.equal(getDecimal(1.3), 0.3);
}); });
it("возвращает дробную часть 12.345 как 0.345", function() { it("возвращает дробную часть 12.345 как 0.345", function() {
assert.equal( getDecimal(12.345), 0.345 ); assert.equal(getDecimal(12.345), 0.345);
}); });
it("возвращает дробную часть -1.2 как 0.2", function() { it("возвращает дробную часть -1.2 как 0.2", function() {
assert.equal( getDecimal(-1.2), 0.2 ); assert.equal(getDecimal(-1.2), 0.2);
}); });
it("возвращает дробную часть 5 как 0", function() { it("возвращает дробную часть 5 как 0", function() {
assert.equal( getDecimal(5), 0 ); assert.equal(getDecimal(5), 0);
}); });
}); });

View file

@ -2,4 +2,4 @@ function ucFirst(str) {
if (!str) return str; if (!str) return str;
return str[0].toUpperCase() + str.slice(1); return str[0].toUpperCase() + str.slice(1);
} }

View file

@ -1,9 +1,9 @@
describe("ucFirst", function() { describe("ucFirst", function() {
it('делает первый символ заглавным', function() { it('делает первый символ заглавным', function() {
assert.strictEqual( ucFirst("вася"), "Вася" ); assert.strictEqual(ucFirst("вася"), "Вася");
}); });
it('для пустой строки возвращает пустую строку', function() { it('для пустой строки возвращает пустую строку', function() {
assert.strictEqual( ucFirst(""), "" ); assert.strictEqual(ucFirst(""), "");
}); });
}); });

View file

@ -2,4 +2,4 @@ function checkSpam(str) {
var lowerStr = str.toLowerCase(); var lowerStr = str.toLowerCase();
return !!(~lowerStr.indexOf('viagra') || ~lowerStr.indexOf('xxx')); return !!(~lowerStr.indexOf('viagra') || ~lowerStr.indexOf('xxx'));
} }

View file

@ -1,13 +1,13 @@
describe("checkSpam", function() { describe("checkSpam", function() {
it('считает спамом "buy ViAgRA now"', function() { it('считает спамом "buy ViAgRA now"', function() {
assert.isTrue( checkSpam('buy ViAgRA now') ); assert.isTrue(checkSpam('buy ViAgRA now'));
}); });
it('считает спамом "free xxxxx"', function() { it('считает спамом "free xxxxx"', function() {
assert.isTrue( checkSpam('free xxxxx') ); assert.isTrue(checkSpam('free xxxxx'));
}); });
it('не считает спамом "innocent rabbit"', function() { it('не считает спамом "innocent rabbit"', function() {
assert.isFalse( checkSpam('innocent rabbit') ); assert.isFalse(checkSpam('innocent rabbit'));
}); });
}); });

View file

@ -1,4 +1,4 @@
function truncate(str, maxlength) { function truncate(str, maxlength) {
return (str.length > maxlength) ? return (str.length > maxlength) ?
str.slice(0, maxlength - 3) + '...' : str; str.slice(0, maxlength - 3) + '...' : str;
} }

View file

@ -1,14 +1,14 @@
describe("truncate", function() { describe("truncate", function() {
it("обрезает строку до указанной длины (включая троеточие)", function() { it("обрезает строку до указанной длины (включая троеточие)", function() {
assert.equal( assert.equal(
truncate("Вот, что мне хотелось бы сказать на эту тему:", 20), truncate("Вот, что мне хотелось бы сказать на эту тему:", 20),
"Вот, что мне хоте..." "Вот, что мне хоте..."
); );
}); });
it("не меняет короткие строки", function() { it("не меняет короткие строки", function() {
assert.equal( assert.equal(
truncate("Всем привет!", 20), truncate("Всем привет!", 20),
"Всем привет!" "Всем привет!"
); );
}); });

View file

@ -1,6 +1,6 @@
function isEmpty(obj) { function isEmpty(obj) {
for(var key in obj) { for (var key in obj) {
return false; return false;
} }
return true; return true;
} }

View file

@ -1,9 +1,11 @@
describe("isEmpty", function() { describe("isEmpty", function() {
it("если объект пустой - возвращает true", function() { it("если объект пустой - возвращает true", function() {
assert.isTrue( isEmpty({}) ); assert.isTrue(isEmpty({}));
}); });
it("если у объекта есть любое свойство, не важно какое - возвращает false", function() { it("если у объекта есть любое свойство, не важно какое - возвращает false", function() {
assert.isFalse( isEmpty({ anything: false }) ); assert.isFalse(isEmpty({
anything: false
}));
}); });
}); });

View file

@ -1,11 +1,11 @@
function isNumeric(n) { function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n) return !isNaN(parseFloat(n)) && isFinite(n)
} }
function multiplyNumeric(obj) { function multiplyNumeric(obj) {
for(var key in obj) { for (var key in obj) {
if (isNumeric( obj[key] )) { if (isNumeric(obj[key])) {
obj[key] *= 2; obj[key] *= 2;
} }
} }
} }

View file

@ -1,4 +1,4 @@
function isNumeric(n) { function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n) return !isNaN(parseFloat(n)) && isFinite(n)
} }

View file

@ -6,8 +6,8 @@ describe("multiplyNumeric", function() {
title: "Моё меню" title: "Моё меню"
}; };
multiplyNumeric(menu); multiplyNumeric(menu);
assert.equal( menu.width, 400 ); assert.equal(menu.width, 400);
assert.equal( menu.height, 600 ); assert.equal(menu.height, 600);
assert.equal( menu.title, "Моё меню" ); assert.equal(menu.title, "Моё меню");
}); });
}); });

View file

@ -1,10 +1,10 @@
function getMaxSubSum(arr) { function getMaxSubSum(arr) {
var maxSum = 0, partialSum = 0; var maxSum = 0,
for (var i=0; i<arr.length; i++) { partialSum = 0;
for (var i = 0; i < arr.length; i++) {
partialSum += arr[i]; partialSum += arr[i];
maxSum = Math.max(maxSum, partialSum); maxSum = Math.max(maxSum, partialSum);
if (partialSum < 0) partialSum = 0; if (partialSum < 0) partialSum = 0;
} }
return maxSum; return maxSum;
} }

View file

@ -1,33 +1,33 @@
describe("getMaxSubSum", function() { describe("getMaxSubSum", function() {
it("максимальная подсумма [1, 2, 3] равна 6", function() { it("максимальная подсумма [1, 2, 3] равна 6", function() {
assert.equal( getMaxSubSum([1, 2, 3]), 6); assert.equal(getMaxSubSum([1, 2, 3]), 6);
}); });
it("максимальная подсумма [-1, 2, 3, -9] равна 5", function() { it("максимальная подсумма [-1, 2, 3, -9] равна 5", function() {
assert.equal( getMaxSubSum([-1, 2, 3, -9]), 5); assert.equal(getMaxSubSum([-1, 2, 3, -9]), 5);
}); });
it("максимальная подсумма [-1, 2, 3, -9, 11] равна 11", function() { it("максимальная подсумма [-1, 2, 3, -9, 11] равна 11", function() {
assert.equal( getMaxSubSum([-1, 2, 3, -9, 11]), 11); assert.equal(getMaxSubSum([-1, 2, 3, -9, 11]), 11);
}); });
it("максимальная подсумма [-2, -1, 1, 2] равна 3", function() { it("максимальная подсумма [-2, -1, 1, 2] равна 3", function() {
assert.equal( getMaxSubSum([-2, -1, 1, 2]), 3); assert.equal(getMaxSubSum([-2, -1, 1, 2]), 3);
}); });
it("максимальная подсумма [100, -9, 2, -3, 5] равна 100", function() { it("максимальная подсумма [100, -9, 2, -3, 5] равна 100", function() {
assert.equal( getMaxSubSum([100, -9, 2, -3, 5]), 100); assert.equal(getMaxSubSum([100, -9, 2, -3, 5]), 100);
}); });
it("максимальная подсумма [] равна 0", function() { it("максимальная подсумма [] равна 0", function() {
assert.equal( getMaxSubSum([]), 0); assert.equal(getMaxSubSum([]), 0);
}); });
it("максимальная подсумма [-1] равна 0", function() { it("максимальная подсумма [-1] равна 0", function() {
assert.equal( getMaxSubSum([-1]), 0); assert.equal(getMaxSubSum([-1]), 0);
}); });
it("максимальная подсумма [-1, -2] равна 0", function() { it("максимальная подсумма [-1, -2] равна 0", function() {
assert.equal( getMaxSubSum([-1, -2]), 0); assert.equal(getMaxSubSum([-1, -2]), 0);
}); });
}); });

View file

@ -3,9 +3,9 @@ function find(array, value) {
return array.indexOf(value); return array.indexOf(value);
} }
for(var i=0; i<array.length; i++) { for (var i = 0; i < array.length; i++) {
if (array[i] === value) return i; if (array[i] === value) return i;
} }
return -1; return -1;
} }

View file

@ -2,25 +2,25 @@ describe("find", function() {
describe("возвращает позицию, на которой найден элемент", function() { describe("возвращает позицию, на которой найден элемент", function() {
it("в массиве [1,2,3] находит 1 на позиции 0", function() { it("в массиве [1,2,3] находит 1 на позиции 0", function() {
assert.equal( find([1, 2, 3], 1), 0); assert.equal(find([1, 2, 3], 1), 0);
}); });
it("в массиве [1,2,3] находит 2 на позиции 1", function() { it("в массиве [1,2,3] находит 2 на позиции 1", function() {
assert.equal( find([1, 2, 3], 2), 1); assert.equal(find([1, 2, 3], 2), 1);
}); });
it("в массиве [1,2,3] находит 3 на позиции 2", function() { it("в массиве [1,2,3] находит 3 на позиции 2", function() {
assert.equal( find([1, 2, 3], 3), 2); assert.equal(find([1, 2, 3], 3), 2);
}); });
}); });
it("если элемент не найден, возвращает -1", function() { it("если элемент не найден, возвращает -1", function() {
assert.equal( find([1,2,3], 0), -1); assert.equal(find([1, 2, 3], 0), -1);
}); });
it("отличает false или null от 0", function() { it("отличает false или null от 0", function() {
assert.equal( find([false, true, null], 0), -1); assert.equal(find([false, true, null], 0), -1);
}); });
it("отличает 1 от true", function() { it("отличает 1 от true", function() {
assert.equal( find([1, 2, 3], true), -1); assert.equal(find([1, 2, 3], true), -1);
}); });
}); });

View file

@ -1,7 +1,7 @@
function filterRange(arr, a, b) { function filterRange(arr, a, b) {
var result = []; var result = [];
for(var i=0; i<arr.length; i++) { for (var i = 0; i < arr.length; i++) {
if (arr[i] >= a && arr[i] <= b) { if (arr[i] >= a && arr[i] <= b) {
result.push(arr[i]); result.push(arr[i]);
} }

View file

@ -1,15 +1,15 @@
describe("filterRange", function() { describe("filterRange", function() {
it("не меняет исходный массив", function() { it("не меняет исходный массив", function() {
var arr = [5, 4, 3, 8, 0]; var arr = [5, 4, 3, 8, 0];
filterRange(arr, 0, 10); filterRange(arr, 0, 10);
assert.deepEqual(arr, [5,4,3,8,0]); assert.deepEqual(arr, [5, 4, 3, 8, 0]);
}); });
it("оставляет только значения указанного интервала", function() { it("оставляет только значения указанного интервала", function() {
var arr = [5, 4, 3, 8, 0]; var arr = [5, 4, 3, 8, 0];
var result = filterRange(arr, 3, 5); var result = filterRange(arr, 3, 5);
assert.deepEqual(result, [5,4,3]); assert.deepEqual(result, [5, 4, 3]);
}); });
}); });

View file

@ -1,11 +1,11 @@
function addClass(obj, cls) { function addClass(obj, cls) {
var classes = obj.className ? obj.className.split(' ') : []; var classes = obj.className ? obj.className.split(' ') : [];
for(var i=0; i<classes.length; i++) { for (var i = 0; i < classes.length; i++) {
if (classes[i] == cls) return; // класс уже есть if (classes[i] == cls) return; // класс уже есть
} }
classes.push(cls); // добавить classes.push(cls); // добавить
obj.className = classes.join(' '); // и обновить свойство obj.className = classes.join(' '); // и обновить свойство
} }

View file

@ -1,7 +1,9 @@
describe("addClass", function() { describe("addClass", function() {
it("добавляет класс, которого нет", function() { it("добавляет класс, которого нет", function() {
var obj = { className: 'open menu' }; var obj = {
className: 'open menu'
};
addClass(obj, 'new'); addClass(obj, 'new');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: 'open menu new' className: 'open menu new'
@ -9,7 +11,9 @@ describe("addClass", function() {
}); });
it("не добавляет класс, который уже есть", function() { it("не добавляет класс, который уже есть", function() {
var obj = { className: 'open menu' }; var obj = {
className: 'open menu'
};
addClass(obj, 'open'); addClass(obj, 'open');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: 'open menu' className: 'open menu'
@ -17,11 +21,13 @@ describe("addClass", function() {
}); });
it("не добавляет лишних пробелов, который уже есть", function() { it("не добавляет лишних пробелов, который уже есть", function() {
var obj = { className: '' }; var obj = {
className: ''
};
addClass(obj, 'open'); addClass(obj, 'open');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: 'open' className: 'open'
}); });
}); });
}); });

View file

@ -1,14 +1,14 @@
function aclean(arr) { function aclean(arr) {
var obj = {}; var obj = {};
for(var i=0; i<arr.length; i++) { for (var i = 0; i < arr.length; i++) {
var sorted = arr[i].toLowerCase().split("").sort().join(""); var sorted = arr[i].toLowerCase().split("").sort().join("");
obj[sorted] = arr[i]; obj[sorted] = arr[i];
} }
var result = []; var result = [];
for(var key in obj) { for (var key in obj) {
result.push(obj[key]); result.push(obj[key]);
} }

View file

@ -5,22 +5,22 @@ function intersection(arr1, arr2) {
} }
describe("aclean", function() { describe("aclean", function() {
it("содержит ровно по 1 слову из каждого набора анаграмм", function() { it("содержит ровно по 1 слову из каждого набора анаграмм", function() {
var arr = ["воз", "киборг", "корсет", "зов", "гробик", "костер", "сектор"]; var arr = ["воз", "киборг", "корсет", "зов", "гробик", "костер", "сектор"];
var result = aclean(arr); var result = aclean(arr);
assert.equal(result.length, 3); assert.equal(result.length, 3);
assert.equal(intersection(result, ["гробик", "киборг"]).length, 1); assert.equal(intersection(result, ["гробик", "киборг"]).length, 1);
assert.equal(intersection(result, ["воз", "зов"]).length, 1); assert.equal(intersection(result, ["воз", "зов"]).length, 1);
assert.equal(intersection(result, ["корсет", "сектор", "костер"]).length, 1); assert.equal(intersection(result, ["корсет", "сектор", "костер"]).length, 1);
}); });
it("не различает регистр символов", function() { it("не различает регистр символов", function() {
var arr = ["воз", "ЗОВ"]; var arr = ["воз", "ЗОВ"];
assert.equal( aclean(arr).length, 1 ); assert.equal(aclean(arr).length, 1);
}); });
}); });

View file

@ -1,10 +1,10 @@
function unique(arr) { function unique(arr) {
var obj = {}; var obj = {};
for(var i=0; i<arr.length; i++) { for (var i = 0; i < arr.length; i++) {
var str = arr[i]; var str = arr[i];
obj[str] = true; // запомнить строку в виде свойства объекта obj[str] = true; // запомнить строку в виде свойства объекта
} }
return Object.keys(obj); // или собрать ключи перебором для IE8- return Object.keys(obj); // или собрать ключи перебором для IE8-
} }

View file

@ -1,14 +1,15 @@
describe("unique", function() { describe("unique", function() {
it("убирает неуникальные элементы из массива", function() { it("убирает неуникальные элементы из массива", function() {
var strings = ["кришна", "кришна", "харе", "харе", var strings = ["кришна", "кришна", "харе", "харе",
"харе", "харе", "кришна", "кришна", "8-()"]; "харе", "харе", "кришна", "кришна", "8-()"
];
assert.deepEqual( unique(strings), ["кришна", "харе", "8-()"] ); assert.deepEqual(unique(strings), ["кришна", "харе", "8-()"]);
}); });
it("не изменяет исходный массив", function() { it("не изменяет исходный массив", function() {
var strings = ["кришна", "кришна", "харе", "харе"]; var strings = ["кришна", "кришна", "харе", "харе"];
unique(strings); unique(strings);
assert.deepEqual( strings, ["кришна", "кришна", "харе", "харе"] ); assert.deepEqual(strings, ["кришна", "кришна", "харе", "харе"]);
}); });
}); });

View file

@ -1,7 +1,7 @@
function camelize(str) { function camelize(str) {
var arr = str.split('-'); var arr = str.split('-');
for(var i=1; i<arr.length; i++) { for (var i = 1; i < arr.length; i++) {
// преобразовать: первый символ с большой буквы // преобразовать: первый символ с большой буквы
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1); arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
} }

View file

@ -1,21 +1,21 @@
describe("camelize", function() { describe("camelize", function() {
it("оставляет пустую строку \"как есть\"", function() { it("оставляет пустую строку \"как есть\"", function() {
assert.equal( camelize(""), ""); assert.equal(camelize(""), "");
}); });
describe("делает заглавным первый символ после дефиса", function() { describe("делает заглавным первый символ после дефиса", function() {
it("превращает background-color в backgroundColor", function() { it("превращает background-color в backgroundColor", function() {
assert.equal( camelize("background-color"), "backgroundColor"); assert.equal(camelize("background-color"), "backgroundColor");
}); });
it("превращает list-style-image в listStyleImage", function() { it("превращает list-style-image в listStyleImage", function() {
assert.equal( camelize("list-style-image"), "listStyleImage"); assert.equal(camelize("list-style-image"), "listStyleImage");
}); });
it("превращает -webkit-transition в WebkitTransition", function() { it("превращает -webkit-transition в WebkitTransition", function() {
assert.equal( camelize("-webkit-transition"), "WebkitTransition"); assert.equal(camelize("-webkit-transition"), "WebkitTransition");
}); });
}); });

View file

@ -1,7 +1,7 @@
function removeClass(obj, cls) { function removeClass(obj, cls) {
var classes = obj.className.split(' '); var classes = obj.className.split(' ');
for(i=0; i<classes.length; i++) { for (i = 0; i < classes.length; i++) {
if (classes[i] == cls) { if (classes[i] == cls) {
classes.splice(i, 1); // удалить класс classes.splice(i, 1); // удалить класс
i--; i--;

View file

@ -1,7 +1,9 @@
describe("removeClass", function() { describe("removeClass", function() {
it("ничего не делает, если класса нет", function() { it("ничего не делает, если класса нет", function() {
var obj = { className: 'open menu' }; var obj = {
className: 'open menu'
};
removeClass(obj, 'new'); removeClass(obj, 'new');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: 'open menu' className: 'open menu'
@ -9,7 +11,9 @@ describe("removeClass", function() {
}); });
it("не меняет пустое свойство", function() { it("не меняет пустое свойство", function() {
var obj = { className: '' }; var obj = {
className: ''
};
removeClass(obj, 'new'); removeClass(obj, 'new');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: "" className: ""
@ -17,7 +21,9 @@ describe("removeClass", function() {
}); });
it("удаляет класс, не оставляя лишних пробелов", function() { it("удаляет класс, не оставляя лишних пробелов", function() {
var obj = { className: 'open menu' }; var obj = {
className: 'open menu'
};
removeClass(obj, 'open'); removeClass(obj, 'open');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: "menu" className: "menu"
@ -25,11 +31,13 @@ describe("removeClass", function() {
}); });
it("если класс один и он удалён, то результат - пустая строка", function() { it("если класс один и он удалён, то результат - пустая строка", function() {
var obj = { className: "menu" }; var obj = {
className: "menu"
};
removeClass(obj, 'menu'); removeClass(obj, 'menu');
assert.deepEqual(obj, { assert.deepEqual(obj, {
className: "" className: ""
}); });
}); });
}); });

View file

@ -1,10 +1,10 @@
function filterRangeInPlace(arr, a, b) { function filterRangeInPlace(arr, a, b) {
for(var i = 0; i<arr.length; i++) { for (var i = 0; i < arr.length; i++) {
var val = arr[i]; var val = arr[i];
if (val < a || val > b) { if (val < a || val > b) {
arr.splice(i--, 1); arr.splice(i--, 1);
}
} }
}
} }

View file

@ -1,18 +1,18 @@
describe("getSums", function() { describe("getSums", function() {
it("частичные суммы [1,2,3,4,5] равны [1,3,6,10,15]", function() { it("частичные суммы [1,2,3,4,5] равны [1,3,6,10,15]", function() {
assert.deepEqual( getSums([1,2,3,4,5]), [1,3,6,10,15]); assert.deepEqual(getSums([1, 2, 3, 4, 5]), [1, 3, 6, 10, 15]);
}); });
it("частичные суммы [-2,-1,0,1] равны [-2,-3,-3,-2]", function() { it("частичные суммы [-2,-1,0,1] равны [-2,-3,-3,-2]", function() {
assert.deepEqual( getSums([-2,-1,0,1]), [-2,-3,-3,-2]); assert.deepEqual(getSums([-2, -1, 0, 1]), [-2, -3, -3, -2]);
}); });
it("частичные суммы [] равны []", function() { it("частичные суммы [] равны []", function() {
assert.deepEqual( getSums([]), [] ); assert.deepEqual(getSums([]), []);
}); });
it("частичные суммы [1] равны [1]", function() { it("частичные суммы [1] равны [1]", function() {
assert.deepEqual( getSums([1]), [1] ); assert.deepEqual(getSums([1]), [1]);
}); });
}); });

View file

@ -1,10 +1,10 @@
function makeBuffer() { function makeBuffer() {
var text = ''; var text = '';
return function(piece) { return function(piece) {
if (arguments.length == 0) { // вызов без аргументов if (arguments.length == 0) { // вызов без аргументов
return text; return text;
} }
text += piece; text += piece;
}; };
}; };

View file

@ -4,19 +4,18 @@ beforeEach(function() {
}); });
it("возвращает пустую строку по умолчанию", function() { it("возвращает пустую строку по умолчанию", function() {
assert.strictEqual( buffer(), ""); assert.strictEqual(buffer(), "");
}); });
it("добавляет аргументы в буффер", function() { it("добавляет аргументы в буффер", function() {
buffer('Замыкания'); buffer('Замыкания');
buffer(' Использовать'); buffer(' Использовать');
buffer(' Нужно!'); buffer(' Нужно!');
assert.equal( buffer(), 'Замыкания Использовать Нужно!'); assert.equal(buffer(), 'Замыкания Использовать Нужно!');
}); });
it("приводит всё к строке", function() { it("приводит всё к строке", function() {
buffer(null); buffer(null);
buffer(false); buffer(false);
assert.equal( buffer(), "nullfalse"); assert.equal(buffer(), "nullfalse");
}); });

View file

@ -1,11 +1,11 @@
function makeBuffer() { function makeBuffer() {
var text = ''; var text = '';
function buffer(piece) { function buffer(piece) {
if (arguments.length == 0) { // вызов без аргументов if (arguments.length == 0) { // вызов без аргументов
return text; return text;
} }
text += piece; text += piece;
}; };
buffer.clear = function() { buffer.clear = function() {

View file

@ -5,20 +5,20 @@ beforeEach(function() {
}); });
it("возвращает пустую строку по умолчанию", function() { it("возвращает пустую строку по умолчанию", function() {
assert.strictEqual( buffer(), ""); assert.strictEqual(buffer(), "");
}); });
it("добавляет аргументы в буффер", function() { it("добавляет аргументы в буффер", function() {
buffer('Замыкания'); buffer('Замыкания');
buffer(' Использовать'); buffer(' Использовать');
buffer(' Нужно!'); buffer(' Нужно!');
assert.equal( buffer(), 'Замыкания Использовать Нужно!'); assert.equal(buffer(), 'Замыкания Использовать Нужно!');
}); });
it("приводит всё к строке", function() { it("приводит всё к строке", function() {
buffer(null); buffer(null);
buffer(false); buffer(false);
assert.equal( buffer(), "nullfalse"); assert.equal(buffer(), "nullfalse");
}); });
it("очищает буфер вызовом clear", function() { it("очищает буфер вызовом clear", function() {
@ -26,5 +26,5 @@ it("очищает буфер вызовом clear", function() {
buffer.clear(); buffer.clear();
buffer("первый"); buffer("первый");
buffer("второй"); buffer("второй");
assert.equal( buffer(), "первыйвторой"); assert.equal(buffer(), "первыйвторой");
}); });

View file

@ -1,8 +1,8 @@
function filter(arr, func) { function filter(arr, func) {
var result = []; var result = [];
for(var i=0; i<arr.length; i++) { for (var i = 0; i < arr.length; i++) {
var val = arr[i]; var val = arr[i];
if (func(val)) { if (func(val)) {
result.push(val); result.push(val);
} }
@ -19,6 +19,6 @@ function inArray(arr) {
function inBetween(a, b) { function inBetween(a, b) {
return function(x) { return function(x) {
return x >=a && x <= b; return x >= a && x <= b;
}; };
} }

View file

@ -8,5 +8,4 @@ function inBetween(a, b) {
function inArray(arr) { function inArray(arr) {
// ...ваш код... // ...ваш код...
} }

View file

@ -10,10 +10,10 @@ describe("inArray", function() {
before(function() { before(function() {
checkInArr = inArray(arr); checkInArr = inArray(arr);
}); });
it("возвращает фильтр для значений в массиве", function() { it("возвращает фильтр для значений в массиве", function() {
assert.isTrue( checkInArr(5) ); assert.isTrue(checkInArr(5));
assert.isFalse( checkInArr(0) ); assert.isFalse(checkInArr(0));
}); });
}); });
@ -26,8 +26,8 @@ describe("inBetween", function() {
}); });
it("возвращает фильтрa для значений в промежутке", function() { it("возвращает фильтрa для значений в промежутке", function() {
assert.isTrue( checkBetween36(5) ); assert.isTrue(checkBetween36(5));
assert.isFalse( checkBetween36(0) ); assert.isFalse(checkBetween36(0));
}); });
}); });
@ -35,20 +35,24 @@ describe("inBetween", function() {
describe("filter", function() { describe("filter", function() {
it("фильтрует через func", function() { it("фильтрует через func", function() {
assert.deepEqual( filter(arr, function(a) { return a % 2 == 0; }), [2,4,6] ); assert.deepEqual(filter(arr, function(a) {
return a % 2 == 0;
}), [2, 4, 6]);
}); });
it("не модифицирует исходный массив", function() { it("не модифицирует исходный массив", function() {
filter(arr, function(a) { return a % 2 == 0; }); filter(arr, function(a) {
assert.deepEqual( arr, [1, 2, 3, 4, 5, 6, 7] ); return a % 2 == 0;
});
assert.deepEqual(arr, [1, 2, 3, 4, 5, 6, 7]);
}); });
it("поддерживает фильтр inBetween", function() { it("поддерживает фильтр inBetween", function() {
assert.deepEqual( filter(arr,inBetween(3,6)), [3,4,5,6]); assert.deepEqual(filter(arr, inBetween(3, 6)), [3, 4, 5, 6]);
}); });
it("поддерживает фильтр inArray", function() { it("поддерживает фильтр inArray", function() {
assert.deepEqual( filter(arr, inArray([1,2,3])), [1,2,3]); assert.deepEqual(filter(arr, inArray([1, 2, 3])), [1, 2, 3]);
}); });
}); });

View file

@ -2,18 +2,18 @@ function makeArmy() {
var shooters = []; var shooters = [];
for(var i=0; i<10; i++) { for (var i = 0; i < 10; i++) {
var shooter = (function(x) { var shooter = (function(x) {
return function() { return function() {
alert( x ); alert(x);
}; };
})(i); })(i);
shooters.push(shooter); shooters.push(shooter);
} }
return shooters; return shooters;
} }

View file

@ -2,7 +2,7 @@ function makeArmy() {
var shooters = []; var shooters = [];
for(var i=0; i<10; i++) { for (var i = 0; i < 10; i++) {
var shooter = function() { // функция-стрелок var shooter = function() { // функция-стрелок
alert(i); // выводит свой номер alert(i); // выводит свой номер
}; };
@ -10,4 +10,4 @@ function makeArmy() {
} }
return shooters; return shooters;
} }

View file

@ -7,4 +7,4 @@ function showMessage() {
} }
// выводим сообщение // выводим сообщение
showMessage(); showMessage();

View file

@ -1,5 +1,5 @@
(function() { (function() {
// глобальная переменная нашего скрипта // глобальная переменная нашего скрипта
var message = "Привет"; var message = "Привет";

View file

@ -11,5 +11,4 @@ var calculator = {
this.a = +prompt('a?', 0); this.a = +prompt('a?', 0);
this.b = +prompt('b?', 0); this.b = +prompt('b?', 0);
} }
} }

View file

@ -9,11 +9,11 @@ describe("calculator", function() {
}); });
it("при вводе 2 и 3 сумма равна 5", function() { it("при вводе 2 и 3 сумма равна 5", function() {
assert.equal( calculator.sum(), 5 ); assert.equal(calculator.sum(), 5);
}); });
it("при вводе 2 и 3 произведение равно 6", function() { it("при вводе 2 и 3 произведение равно 6", function() {
assert.equal( calculator.mul(), 6 ); assert.equal(calculator.mul(), 6);
}); });
}); });

View file

@ -1,7 +1,7 @@
function Calculator() { function Calculator() {
this.read = function() { this.read = function() {
this.a = +prompt('a?', 0); this.a = +prompt('a?', 0);
this.b = +prompt('b?', 0); this.b = +prompt('b?', 0);
}; };

View file

@ -11,11 +11,11 @@ describe("calculator", function() {
}); });
it("при вводе 2 и 3 сумма равна 5", function() { it("при вводе 2 и 3 сумма равна 5", function() {
assert.equal( calculator.sum(), 5 ); assert.equal(calculator.sum(), 5);
}); });
it("при вводе 2 и 3 произведение равно 6", function() { it("при вводе 2 и 3 произведение равно 6", function() {
assert.equal( calculator.mul(), 6 ); assert.equal(calculator.mul(), 6);
}); });
}); });

View file

@ -5,4 +5,4 @@ function Accumulator(startingValue) {
this.value += +prompt('Сколько добавлять будем?', 0); this.value += +prompt('Сколько добавлять будем?', 0);
}; };
} }

View file

@ -13,25 +13,25 @@ describe("Accumulator(1)", function() {
}); });
it("начальное значение 1", function() { it("начальное значение 1", function() {
assert.equal( accumulator.value, 1 ); assert.equal(accumulator.value, 1);
}); });
it("после ввода 0 значение 1", function() { it("после ввода 0 значение 1", function() {
prompt.returns("0"); prompt.returns("0");
accumulator.read(); accumulator.read();
assert.equal( accumulator.value, 1 ); assert.equal(accumulator.value, 1);
}); });
it("после ввода 1 значение 2", function() { it("после ввода 1 значение 2", function() {
prompt.returns("1"); prompt.returns("1");
accumulator.read(); accumulator.read();
assert.equal( accumulator.value, 2 ); assert.equal(accumulator.value, 2);
}); });
it("после ввода 2 значение 4", function() { it("после ввода 2 значение 4", function() {
prompt.returns("2"); prompt.returns("2");
accumulator.read(); accumulator.read();
assert.equal( accumulator.value, 4 ); assert.equal(accumulator.value, 4);
}); });
}); });

View file

@ -16,7 +16,7 @@ function Calculator() {
op = split[1], op = split[1],
b = +split[2] b = +split[2]
if(!methods[op] || isNaN(a) || isNaN(b)) { if (!methods[op] || isNaN(a) || isNaN(b)) {
return NaN; return NaN;
} }
@ -26,4 +26,4 @@ function Calculator() {
this.addMethod = function(name, func) { this.addMethod = function(name, func) {
methods[name] = func; methods[name] = func;
}; };
} }

View file

@ -4,23 +4,23 @@ before(function() {
}); });
it("calculate(12 + 34) = 46", function() { it("calculate(12 + 34) = 46", function() {
assert.equal( calculator.calculate("12 + 34"), 46 ); assert.equal(calculator.calculate("12 + 34"), 46);
}); });
it("calculate(34 - 12) = 22", function() { it("calculate(34 - 12) = 22", function() {
assert.equal( calculator.calculate("34 - 12"), 22 ); assert.equal(calculator.calculate("34 - 12"), 22);
}); });
it("добавили умножение: calculate(2 * 3) = 6", function() { it("добавили умножение: calculate(2 * 3) = 6", function() {
calculator.addMethod("*", function(a, b) { calculator.addMethod("*", function(a, b) {
return a * b; return a * b;
}); });
assert.equal( calculator.calculate("2 * 3"), 6 ); assert.equal(calculator.calculate("2 * 3"), 6);
}); });
it("добавили возведение в степень: calculate(2 ** 3) = 8", function() { it("добавили возведение в степень: calculate(2 ** 3) = 8", function() {
calculator.addMethod("**", function(a, b) { calculator.addMethod("**", function(a, b) {
return Math.pow(a, b); return Math.pow(a, b);
}); });
assert.equal( calculator.calculate("2 ** 3"), 8 ); assert.equal(calculator.calculate("2 ** 3"), 8);
}); });

View file

@ -1,4 +1,4 @@
function Article() { function Article() {
this.created = new Date; this.created = new Date;
Article.count++; // увеличиваем счетчик при каждом вызове Article.count++; // увеличиваем счетчик при каждом вызове
@ -8,4 +8,4 @@ Article.count = 0; // начальное значение
Article.showStats = function() { Article.showStats = function() {
alert('Всего: ' + this.count + ', Последняя: ' + this.last); alert('Всего: ' + this.count + ', Последняя: ' + this.last);
}; };

View file

@ -3,7 +3,7 @@ describe("Article.showStats", function() {
sinon.stub(window, "alert"); sinon.stub(window, "alert");
this.clock = sinon.useFakeTimers(); this.clock = sinon.useFakeTimers();
}); });
after(function() { after(function() {
window.alert.restore(); window.alert.restore();
this.clock.restore(); this.clock.restore();
@ -13,9 +13,9 @@ describe("Article.showStats", function() {
new Article(); new Article();
this.clock.tick(100); this.clock.tick(100);
new Article(); new Article();
Article.showStats(); Article.showStats();
assert( alert.calledWith('Всего: 2, Последняя: ' + new Date() ) ); assert(alert.calledWith('Всего: 2, Последняя: ' + new Date()));
}); });
it("и ещё одна статья...", function() { it("и ещё одна статья...", function() {
@ -23,6 +23,6 @@ describe("Article.showStats", function() {
new Article(); new Article();
Article.showStats(); Article.showStats();
assert( alert.calledWith('Всего: 3, Последняя: ' + new Date() ) ); assert(alert.calledWith('Всего: 3, Последняя: ' + new Date()));
}); });
}); });

View file

@ -1,3 +1,3 @@
function applyAll(func) { function applyAll(func) {
return func.apply(this, [].slice.call(arguments, 1) ); return func.apply(this, [].slice.call(arguments, 1));
} }

View file

@ -2,14 +2,14 @@ describe("applyAll", function() {
it("применяет функцию ко всем аргументам, начиная со 2го", function() { it("применяет функцию ко всем аргументам, начиная со 2го", function() {
var min = applyAll(Math.min, 1, 2, 3); var min = applyAll(Math.min, 1, 2, 3);
assert.equal( min, 1 ); assert.equal(min, 1);
}); });
it("при отсутствии аргументов просто вызывает функцию", function() { it("при отсутствии аргументов просто вызывает функцию", function() {
var spy = sinon.spy(); var spy = sinon.spy();
applyAll(spy); applyAll(spy);
assert( spy.calledOnce ); assert(spy.calledOnce);
assert.equal( spy.firstCall.args.length, 0 ); assert.equal(spy.firstCall.args.length, 0);
}); });
}); });

View file

@ -2,8 +2,8 @@ function makeLogging(f, log) {
function wrapper(a) { function wrapper(a) {
log.push(a); log.push(a);
return f.call(this, a); return f.call(this, a);
} }
return wrapper; return wrapper;
} }

View file

@ -4,45 +4,47 @@ describe("makeLogging", function() {
var log = []; var log = [];
work = makeLogging(work, log); work = makeLogging(work, log);
assert.deepEqual( log, []); assert.deepEqual(log, []);
work(1); work(1);
assert.deepEqual( log, [1]); assert.deepEqual(log, [1]);
work(2); work(2);
assert.deepEqual( log, [1, 2]); assert.deepEqual(log, [1, 2]);
}); });
it("передаёт вызов функции, возвращает её результат", function() { it("передаёт вызов функции, возвращает её результат", function() {
var log = []; var log = [];
function work(x) { function work(x) {
return x*2; return x * 2;
} }
work = sinon.spy(work); work = sinon.spy(work);
var spy = work; var spy = work;
work = makeLogging(work, log); work = makeLogging(work, log);
assert.equal( work(1), 2 ); assert.equal(work(1), 2);
assert(spy.calledWith(1)); assert(spy.calledWith(1));
}); });
it("сохраняет контекст вызова для методов объекта", function() { it("сохраняет контекст вызова для методов объекта", function() {
var log = []; var log = [];
var calculator = { var calculator = {
double: function(x) { return x*2; } double: function(x) {
return x * 2;
}
} }
calculator.double = sinon.spy(calculator.double); calculator.double = sinon.spy(calculator.double);
var spy = calculator.double; var spy = calculator.double;
calculator.double = makeLogging(calculator.double, log); calculator.double = makeLogging(calculator.double, log);
assert.equal( calculator.double(1), 2 ); assert.equal(calculator.double(1), 2);
assert(spy.calledWith(1)); assert(spy.calledWith(1));
assert(spy.calledOn(calculator)); assert(spy.calledOn(calculator));
}); });
}); });

View file

@ -1,15 +1,9 @@
function makeLogging(f, log) { function makeLogging(f, log) {
function wrapper() { function wrapper() {
log.push([].slice.call(arguments)); log.push([].slice.call(arguments));
return f.apply(this, arguments); return f.apply(this, arguments);
} }
return wrapper; return wrapper;
} }

View file

@ -1,22 +1,26 @@
describe("makeLogging", function() { describe("makeLogging", function() {
it("записывает вызовы в массив log", function() { it("записывает вызовы в массив log", function() {
var work = sinon.spy(); var work = sinon.spy();
var log = []; var log = [];
work = makeLogging(work, log); work = makeLogging(work, log);
assert.deepEqual( log, []); assert.deepEqual(log, []);
work(1, 2); work(1, 2);
assert.deepEqual( log, [[1, 2]]); assert.deepEqual(log, [
[1, 2]
]);
work(3, 4); work(3, 4);
assert.deepEqual( log, [[1, 2], [3,4]]); assert.deepEqual(log, [
[1, 2],
[3, 4]
]);
}); });
it("передаёт вызов функции, возвращает её результат", function() { it("передаёт вызов функции, возвращает её результат", function() {
var log = []; var log = [];
function sum(a, b) { function sum(a, b) {
return a + b; return a + b;
} }
@ -24,26 +28,28 @@ describe("makeLogging", function() {
sum = sinon.spy(sum); sum = sinon.spy(sum);
var spy = sum; var spy = sum;
sum = makeLogging(sum, log); sum = makeLogging(sum, log);
assert.equal( sum(1, 2), 3 ); assert.equal(sum(1, 2), 3);
assert(spy.calledWith(1, 2)); assert(spy.calledWith(1, 2));
}); });
it("сохраняет контекст вызова для методов объекта", function() { it("сохраняет контекст вызова для методов объекта", function() {
var log = []; var log = [];
var calculator = { var calculator = {
sum: function(a, b) { return a + b; } sum: function(a, b) {
return a + b;
}
} }
calculator.sum = sinon.spy(calculator.sum); calculator.sum = sinon.spy(calculator.sum);
var spy = calculator.sum; var spy = calculator.sum;
calculator.sum = makeLogging(calculator.sum, log); calculator.sum = makeLogging(calculator.sum, log);
assert.equal( calculator.sum(1, 2), 3 ); assert.equal(calculator.sum(1, 2), 3);
assert(spy.calledWith(1, 2)); assert(spy.calledWith(1, 2));
assert(spy.calledOn(calculator)); assert(spy.calledOn(calculator));
}); });
}); });

View file

@ -1,8 +1,8 @@
function makeCaching(f) { function makeCaching(f) {
var cache = {}; var cache = {};
return function(x) { return function(x) {
if (!(x in cache)) { if (!(x in cache)) {
cache[x] = f.call(this, x); cache[x] = f.call(this, x);
} }
return cache[x]; return cache[x];

View file

@ -1,8 +1,8 @@
describe("makeCaching", function() { describe("makeCaching", function() {
it("запоминает предыдущее значение функции с таким аргументом", function() { it("запоминает предыдущее значение функции с таким аргументом", function() {
function f(x) { function f(x) {
return Math.random()*x; return Math.random() * x;
} }
f = makeCaching(f); f = makeCaching(f);
@ -10,10 +10,10 @@ describe("makeCaching", function() {
var a = f(1); var a = f(1);
var b = f(1); var b = f(1);
assert.equal(a, b); assert.equal(a, b);
var anotherValue = f(2); var anotherValue = f(2);
// почти наверняка другое значение // почти наверняка другое значение
assert.notEqual( a, anotherValue ); assert.notEqual(a, anotherValue);
}); });
it("сохраняет контекст вызова", function() { it("сохраняет контекст вызова", function() {
@ -24,8 +24,8 @@ describe("makeCaching", function() {
var spy = obj.spy; var spy = obj.spy;
obj.spy = makeCaching(obj.spy); obj.spy = makeCaching(obj.spy);
obj.spy(123); obj.spy(123);
assert( spy.calledWith(123) ); assert(spy.calledWith(123));
assert( spy.calledOn(obj) ); assert(spy.calledOn(obj));
}); });
}); });

View file

@ -9,11 +9,12 @@ describe("delay", function() {
it("вызывает функцию через указанный таймаут", function() { it("вызывает функцию через указанный таймаут", function() {
var start = Date.now(); var start = Date.now();
function f(x) { function f(x) {
assert.equal(Date.now() - start, 1000); assert.equal(Date.now() - start, 1000);
} }
f = sinon.spy(f); f = sinon.spy(f);
var f1000 = delay(f, 1000); var f1000 = delay(f, 1000);
f1000("test"); f1000("test");
this.clock.tick(2000); this.clock.tick(2000);
@ -30,16 +31,16 @@ describe("delay", function() {
assert.equal(Date.now() - start, 1500); assert.equal(Date.now() - start, 1500);
} }
}; };
user.sayHi = sinon.spy(user.sayHi); user.sayHi = sinon.spy(user.sayHi);
var spy = user.sayHi; var spy = user.sayHi;
user.sayHi = delay(user.sayHi, 1500); user.sayHi = delay(user.sayHi, 1500);
user.sayHi("Привет", "Вася"); user.sayHi("Привет", "Вася");
this.clock.tick(2000); this.clock.tick(2000);
assert(spy.calledOnce, 'проверка calledOnce не сработала'); assert(spy.calledOnce, 'проверка calledOnce не сработала');
}); });
}); });

View file

@ -11,7 +11,9 @@ function debounce(f, ms) {
state = COOLDOWN; state = COOLDOWN;
setTimeout(function() { state = null }, ms); setTimeout(function() {
state = null
}, ms);
} }
} }

View file

@ -2,23 +2,32 @@ describe("debounce", function() {
before(function() { before(function() {
this.clock = sinon.useFakeTimers(); this.clock = sinon.useFakeTimers();
}); });
after(function() { after(function() {
this.clock.restore(); this.clock.restore();
}); });
it("вызывает функцию не чаще чем раз в ms миллисекунд", function() { it("вызывает функцию не чаще чем раз в ms миллисекунд", function() {
var log = ''; var log = '';
function f(a) { log += a; }
function f(a) {
log += a;
}
f = debounce(f, 1000); f = debounce(f, 1000);
f(1); // выполнится сразу же f(1); // выполнится сразу же
f(2); // игнор f(2); // игнор
setTimeout(function() { f(3) }, 100); // игнор (рановато) setTimeout(function() {
setTimeout(function() { f(4) }, 1100); // выполнится (таймаут прошёл) f(3)
setTimeout(function() { f(5) }, 1500); // игнор }, 100); // игнор (рановато)
setTimeout(function() {
f(4)
}, 1100); // выполнится (таймаут прошёл)
setTimeout(function() {
f(5)
}, 1500); // игнор
this.clock.tick(5000); this.clock.tick(5000);
assert.equal(log, "14"); assert.equal(log, "14");
@ -26,13 +35,13 @@ describe("debounce", function() {
it("сохраняет контекст вызова", function() { it("сохраняет контекст вызова", function() {
var obj = { var obj = {
f: function() { f: function() {
assert.equal(this, obj); assert.equal(this, obj);
} }
}; };
obj.f = debounce(obj.f, 1000); obj.f = debounce(obj.f, 1000);
obj.f("test"); obj.f("test");
}); });
}); });

View file

@ -1,29 +1,29 @@
function throttle(func, ms) { function throttle(func, ms) {
var isThrottled = false, var isThrottled = false,
savedArgs, savedArgs,
savedThis; savedThis;
function wrapper() { function wrapper() {
if (isThrottled) { if (isThrottled) {
savedArgs = arguments; savedArgs = arguments;
savedThis = this; savedThis = this;
return; return;
} }
func.apply(this, arguments); func.apply(this, arguments);
isThrottled = true; isThrottled = true;
setTimeout(function() { setTimeout(function() {
isThrottled = false; isThrottled = false;
if (savedArgs) { if (savedArgs) {
wrapper.apply(savedThis, savedArgs); wrapper.apply(savedThis, savedArgs);
savedArgs = savedThis = null; savedArgs = savedThis = null;
} }
}, ms); }, ms);
} }
return wrapper; return wrapper;
} }

View file

@ -1,7 +1,10 @@
describe("throttle(f, 1000)", function() { describe("throttle(f, 1000)", function() {
var f1000; var f1000;
var log = ""; var log = "";
function f(a) { log += a; }
function f(a) {
log += a;
}
before(function() { before(function() {
f1000 = throttle(f, 1000); f1000 = throttle(f, 1000);
@ -19,9 +22,9 @@ describe("throttle(f, 1000)", function() {
// через 1000 мс запланирован вызов с последним аргументом // через 1000 мс запланирован вызов с последним аргументом
assert.equal(log, "1"); // пока что сработал только первый вызов assert.equal(log, "1"); // пока что сработал только первый вызов
this.clock.tick(1000); // прошло 1000мс времени this.clock.tick(1000); // прошло 1000мс времени
assert.equal(log, "13"); // log==13, т.к. сработал вызов f1000(3) assert.equal(log, "13"); // log==13, т.к. сработал вызов f1000(3)
}); });
it("тормозит третье срабатывание до 1000мс после второго", function() { it("тормозит третье срабатывание до 1000мс после второго", function() {
@ -31,7 +34,7 @@ describe("throttle(f, 1000)", function() {
f1000(5); // (тормозим, с последнего вызова прошло 200мс - менее 1000мс) f1000(5); // (тормозим, с последнего вызова прошло 200мс - менее 1000мс)
this.clock.tick(700); this.clock.tick(700);
f1000(6); // (тормозим, с последнего вызова прошло 900мс - менее 1000мс) f1000(6); // (тормозим, с последнего вызова прошло 900мс - менее 1000мс)
this.clock.tick(100); // сработал вызов с 6 this.clock.tick(100); // сработал вызов с 6
assert.equal(log, "136"); assert.equal(log, "136");

View file

@ -1,4 +1,3 @@
function Clock(options) { function Clock(options) {
this._template = options.template; this._template = options.template;
} }
@ -30,4 +29,4 @@ Clock.prototype.start = function() {
this._timer = setInterval(function() { this._timer = setInterval(function() {
self._render(); self._render();
}, 1000); }, 1000);
}; };

View file

@ -1,4 +1,3 @@
function Clock(options) { function Clock(options) {
this._template = options.template; this._template = options.template;
} }
@ -30,4 +29,4 @@ Clock.prototype.start = function() {
this._timer = setInterval(function() { this._timer = setInterval(function() {
self._render(); self._render();
}, 1000); }, 1000);
}; };

View file

@ -29,4 +29,4 @@ function Clock(options) {
timer = setInterval(render, 1000); timer = setInterval(render, 1000);
} }
} }

Some files were not shown because too many files have changed in this diff Show more