larynx
Version:
Collection of Handlebars helpers
239 lines (213 loc) • 12.7 kB
JavaScript
var Log = require("log");
var log = new Log(process.env.loglevel || "error");
var Handlebars = require("handlebars");
require("../larynx").registerHelpers(Handlebars);
function template(tmpl, data) {
var urtemplate = Handlebars.compile(tmpl);
var output = urtemplate(data || {});
log.info(output);
return output;
}
var now = new Date();
var year = now.getFullYear();
describe("Moment helper - dates", function() {
// 1300000000000 -> 2011-03-13T07:06:40+00:00
it("should handle full dates", function () {
expect(template('{{moment "1300000000000" utc=true}}')).toBe("2011-03-13T07:06:40+00:00");
expect(template('{{moment date=1300000000000 utc=true}}')).toBe("2011-03-13T07:06:40+00:00");
});
it("should format dates", function () {
expect(template('{{moment 1300000000000 "YY, MMM dd" utc=true}}')).toBe("11, Mar Su");
expect(template('{{moment date="1300000000000" format="DD/MM/YYYY" utc=true}}')).toBe("13/03/2011");
expect(template('{{moment "1300000000" unix=true utc=true}}')).toBe("2011-03-13T07:06:40+00:00");
});
it("should accept formatted input", function () {
expect(template('{{moment "15/2072/03" input="DD-YYYY-MM" utc=true}}')).toBe("2072-03-15T00:00:00+00:00");
});
it("should handle timezones", function () {
expect(template('{{moment "2013-02-04T10:35:24-08:00" utc=true}}')).toBe("2013-02-04T18:35:24+00:00");
var d = new Date("2013-02-04T10:35:24-08:00");
expect(template('{{moment "2013-02-04T10:35:24-08:00" "todate" local=true}}')).toBe(d.toString());
});
});
describe("Moment helper - date parts", function() {
// 1300000093272 -> 2011-03-13T07:08:13+00:00
it("should handle milliseconds", function () {
expect(template('{{moment "1300000093272" "milliseconds"}}')).toBe("272");
expect(template('{{moment "1300000093272" format="millisecond"}}')).toBe("272");
});
it("should handle seconds", function () {
expect(template('{{moment "1300000093272" "seconds"}}')).toBe("13");
expect(template('{{moment "1300000093272" format="second"}}')).toBe("13");
});
it("should handle minute", function () {
expect(template('{{moment "1300000093272" "minute"}}')).toBe("8");
expect(template('{{moment "1300000093272" format="minutes"}}')).toBe("8");
});
it("should handle hours", function () {
expect(template('{{moment "1300000093272" "hour" utc=true}}')).toBe("7");
expect(template('{{moment "1300000093272" format="hours" utc=true}}')).toBe("7");
});
it("should handle date parts", function () {
expect(template('{{moment "1300000093272" "date" utc=true}}')).toBe("13");
expect(template('{{moment "1300000093272" "dates" utc=true}}')).toBe("13");
expect(template('{{moment "1300000093272" format="dates" utc=true}}')).toBe("13");
});
it("should handle week day numbers", function () {
expect(template('{{moment "1300000093272" "day" utc=true}}')).toBe("0");
expect(template('{{moment "1300000093272" "days" utc=true}}')).toBe("0");
expect(template('{{moment "1300000093272" format="days" utc=true}}')).toBe("0");
});
it("should handle week day strings", function () {
expect(template('{{moment "1300000093272" "weekday" utc=true}}')).toBe("Sunday");
expect(template('{{moment "1300000093272" format="weekday" utc=true}}')).toBe("Sunday");
expect(template('{{moment "1300000093272" "weekday" type="s" utc=true}}')).toBe("Sun");
expect(template('{{moment "1300000093272" "weekday" type="xs" utc=true}}')).toBe("Su");
expect(template('{{moment "1300000093272" "weekday" type="number" utc=true}}')).toBe("0");
});
it("should handle ISO week days", function () {
expect(template('{{moment "1300000093272" "isoWeekday" utc=true}}')).toBe("7");
expect(template('{{moment "1300000093272" "isoweekday" utc=true}}')).toBe("7");
expect(template('{{moment "1300000093272" format="isoweekday" utc=true}}')).toBe("7");
});
it("should handle day of the year", function () {
expect(template('{{moment "1300000093272" "dayOfYear" utc=true}}')).toBe("72");
expect(template('{{moment "1300000093272" "dayofyear" utc=true}}')).toBe("72");
expect(template('{{moment "1300000093272" format="dayofyear" utc=true}}')).toBe("72");
});
it("should handle week parts", function () {
expect(template('{{moment "1300000093272" "week" utc=true}}')).toBe("12");
expect(template('{{moment "1300000093272" "weeks" utc=true}}')).toBe("12");
expect(template('{{moment "1300000093272" format="weeks" utc=true}}')).toBe("12");
});
it("should handle ISO week parts", function () {
expect(template('{{moment "1300000093272" "isoWeek" utc=true}}')).toBe("10");
expect(template('{{moment "1300000093272" "isoweek" utc=true}}')).toBe("10");
expect(template('{{moment "1300000093272" "isoweeks" utc=true}}')).toBe("10");
expect(template('{{moment "1300000093272" format="isoweeks" utc=true}}')).toBe("10");
});
it("should handle month numbers", function () {
expect(template('{{moment "1300000093272" "month" utc=true}}')).toBe("2");
expect(template('{{moment "1300000093272" "months" utc=true}}')).toBe("2");
expect(template('{{moment "1300000093272" format="months" utc=true}}')).toBe("2");
});
it("should handle year parts", function () {
expect(template('{{moment "1300000093272" "year" utc=true}}')).toBe("2011");
expect(template('{{moment "1300000093272" "years" utc=true}}')).toBe("2011");
expect(template('{{moment "1300000093272" format="years" utc=true}}')).toBe("2011");
});
it("should handle week years", function () {
expect(template('{{moment "1300000093272" "weekYear" utc=true}}')).toBe("2011");
expect(template('{{moment "1300000093272" "weekyear" utc=true}}')).toBe("2011");
expect(template('{{moment "1300000093272" format="weekyear" utc=true}}')).toBe("2011");
});
it("should handle ISO week years", function () {
expect(template('{{moment "1300000093272" "isoWeekYear" utc=true}}')).toBe("2011");
expect(template('{{moment "1300000093272" "isoweekyear" utc=true}}')).toBe("2011");
expect(template('{{moment "1300000093272" format="isoweekyear" utc=true}}')).toBe("2011");
});
});
describe("Moment helper - manipulation", function() {
it("should be able to add", function () {
expect(template('{{moment "1300000000000" add="days" amount="7" utc=true}}')).toBe("2011-03-20T07:06:40+00:00");
expect(template('{{moment "1300000000000" add="365" addparam="d" utc=true}}')).toBe("2012-03-12T07:06:40+00:00");
});
it("should be able to subtract", function () {
expect(template('{{moment "1300000000000" subtract="days" amount="7" utc=true}}')).toBe("2011-03-06T07:06:40+00:00");
expect(template('{{moment "1300000000000" subtract="365" subtractparam="d" utc=true}}')).toBe("2010-03-13T07:06:40+00:00");
});
it("should be able to get endpoints of year", function () {
expect(template('{{moment startof="year" utc=true}}')).toBe(year+"-01-01T00:00:00+00:00");
expect(template('{{moment 1300000000000 startof="year" utc=true}}')).toBe("2011-01-01T00:00:00+00:00");
expect(template('{{moment startof="year" format="DD/MM/YYYY" utc=true}}')).toBe("01/01/"+year);
expect(template('{{moment endof="year" utc=true}}')).toBe(year + "-12-31T23:59:59+00:00");
expect(template('{{moment 1300000000000 endof="year" utc=true}}')).toBe("2011-12-31T23:59:59+00:00");
});
it("should be able to determine whether a date has passed a threshold", function () {
expect(template('{{moment "1300000000000" max="1250000000000" utc=true}}')).toBe("2009-08-11T14:13:20+00:00");
expect(template('{{moment "1300000000000" min="1350000000000" utc=true}}')).toBe("2012-10-12T00:00:00+00:00");
});
});
xdescribe("Moment helper - zones", function() {
xit("should handle zone stuff", function () {
/*
expect(template('{{moment "1300000000000" "utcOffset"}}')).toBe("");
expect(template('{{moment "1300000000000" fn="zone"}}')).toBe("");
expect(template('{{moment "1300000000000" "zoneName"}}')).toBe("");
expect(template('{{moment "1300000000000" fn="zonename"}}')).toBe("");
expect(template('{{moment "1300000000000" "zoneAbbr"}}')).toBe("");
expect(template('{{moment "1300000000000" fn="zoneabbr"}}')).toBe("");
*/
});
});
describe("Moment helper - values", function() {
it("should return values", function () {
expect(template('{{moment "1300000000000" "str" utc=true}}')).toBe("Sun Mar 13 2011 07:06:40 GMT+0000");
expect(template('{{moment "1300000000000" "val"}}')).toBe("1300000000000");
expect(template('{{moment "1300000000000" "unix"}}')).toBe("1300000000");
});
});
describe("Moment helper - from", function() {
it("should output difference from current time", function () {
var ago = year - 2011;
expect(template('{{moment "1300000000000" "fromNow" utc=true}}')).toBe(ago+" years ago");
expect(template('{{moment "1300000000000" "fromnow" true utc=true}}')).toBe(ago+" years");
expect(template('{{moment "1300000000000" fn="fromnow" suffix=false utc=true}}')).toBe(ago+" years");
expect(template('{{moment "1300000000000" "fromnow" suffix=true utc=true}}')).toBe(ago+" years ago");
});
it("should output difference from specified time", function () {
var ago = year - 2011;
expect(template('{{moment "1300000000000" from=1200000000000 utc=true}}')).toBe("in 3 years");
expect(template('{{moment "1300000000000" "from" 1500000000000 utc=true}}')).toBe("6 years ago");
expect(template('{{moment "1300000000000" "from" 1500000000000 true utc=true}}')).toBe("6 years");
expect(template('{{moment "1300000000000" "from" 1500000000000 suffix=false utc=true}}')).toBe("6 years");
expect(template('{{moment "1300000000000" "from" 1500000000000 nosuffix=true utc=true}}')).toBe("6 years");
});
});
describe("Moment helper - calendar", function() {
it("should return calendar values", function () {
expect(template('{{moment "1300000000000" "calendar" utc=true}}')).toBe("03/13/2011");
function getHour (h) {
h = h % 12;
h = h || 12;
return h;
}
function getMeridian (h) {
return h > 11 ? "PM" : "AM";
}
var hvalue = now.getHours();
var mvalue = now.getMinutes();
if (mvalue < 10) {
mvalue = "0" + mvalue;
}
var future = 6;
var past = 2;
var futurecalendar = (hvalue >= 24 - future) ? "Tomorrow" : "Today";
var futurehour = (hvalue + future) % 24;
var futuremeridian = getMeridian(futurehour);
futurehour = getHour(futurehour);
var pastday = (now.getDay() + 7 - past) % 7;
var pasthour = getHour(hvalue);
var pastmeridian = getMeridian(hvalue);
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
expect(template('{{moment date "calendar" add="hours" amount=future}}', {date: now, future: future})).toBe(futurecalendar + " at " + futurehour + ":" + mvalue + " " + futuremeridian);
expect(template('{{moment date "calendar" subtract="days" amount=past}}', {date: now, past: past})).toBe("Last " + days[pastday] + " at " + pasthour + ":" + mvalue + " " + pastmeridian);
});
});
describe("Moment helper - diff", function() {
it("should output the diff between 2 dates", function () {
expect(template('{{moment "1300000000000" diff=1200000000000}}')).toBe("100000000000");
expect(template('{{moment "1300000000000" "diff" 1299000000000 "days" false}}')).toBe("11");
expect(template('{{moment "1300000000000" "diff" 1299000001000 "days" true}}')).toBe("11.5740625");
});
});
describe("Moment helper - misc", function() {
it("should provide util methods", function () {
expect(template('{{moment "1300000000000" "daysinmonth"}}')).toBe("31");
var d = new Date(1300000000000);
expect(template('{{moment "1300000000000" "todate" utc=true}}')).toBe(d.toString());
expect(template('{{moment "1300000000000" "array" utc=true}}')).toBe("2011,2,13,7,6,40,0");
expect(template('{{moment "1300000000000" "isostring"}}')).toBe("2011-03-13T07:06:40.000Z");
});
});
log.info("Tests described");