jquery-jpostal-ja
Version:
A jQuery plug-in that automatically enters a japanese zip code into the address field when you enter it.
395 lines (327 loc) • 14.6 kB
JavaScript
/*jslint browser: true, devel: true */
/*global YUI, $, Jpostal*/
YUI({logInclude: {TestRunner: true}}).use("test", "console", "test-console", "phantomjs",
function (Y) {
"use strict";
var areSameArray,
areSameObject,
areSame,
Mock,
array_unique,
newJpostal;
areSameArray = function (expected, actual) {
Y.Assert.areSame(expected.length, actual.length);
expected.forEach(function (value, i) {
areSame(value, actual[i]);
});
};
array_unique = function (arr) {
var map = {},
i = 0,
n = 0,
result = [];
n = arr.length;
for (i = 0; i < n; i += 1) {
map[arr[i]] = 1;
}
result = Object.keys(map);
return result;
};
areSameObject = function (expected, actual) {
var keys = [];
keys = keys.concat(Object.keys(expected), Object.keys(actual));
keys = array_unique(keys);
keys.forEach(function (key) {
if (!expected.hasOwnProperty(key) && !actual.hasOwnProperty(key)) {
return;
}
areSame(expected[key], actual[key]);
});
};
areSame = function (expected, actual) {
if (typeof expected !== "object") {
Y.Assert.areSame(expected, actual);
} else {
if (expected.length === undefined) {
areSameObject(expected, actual);
} else {
areSameArray(expected, actual);
}
}
};
newJpostal = function (database) {
return new Jpostal.Jpostal(database);
};
Mock = function () {
this.wasCalled = false;
};
Mock.prototype.mock = function () {
this.wasCalled = true;
};
Y.Test.Runner.add(new Y.Test.Case({
name: "Jspotal.Jspotal",
"Jspotal: opject": function () {
areSame("function", typeof Jpostal.Jpostal);
var jpos = newJpostal();
areSame("object", typeof jpos);
areSame("function", typeof jpos.displayAddress);
areSame("function", typeof jpos.isSelectTagForPrefecture);
areSame("function", typeof jpos.setSelectTagForPrefecture);
areSame("function", typeof jpos.formatAddress);
areSame("function", typeof jpos.getScriptSrc);
areSame("function", typeof jpos.init);
areSame("function", typeof jpos.main);
areSame("function", typeof jpos.callback);
areSame("function", typeof jpos.scanPostcode);
},
"displayAddress: positive": function () {
var jpos;
// setup
jpos = newJpostal();
jpos.options = {
postcode : [
'#postcode1',
'#postcode2'
],
address : {
'#address1' : '%3',
'#address2' : '%4',
'#address3' : '%5',
'#address4' : '%6',
'#address5' : '%7',
'#address1_kana' : '%8',
'#address2_kana' : '%9',
'#address3_kana' : '%10'
}
};
// do
jpos.postcode = "1000001";
jpos.address = ["_1000001", "東京都", "千代田区", "千代田", "xxx", "yyy", "トウキョウト", "チヨダク", "チヨダ"];
jpos.displayAddress();
// verify
areSame("東京都", document.getElementById("address1").value);
areSame("千代田区", document.getElementById("address2").value);
areSame("千代田", document.getElementById("address3").value);
areSame("xxx", document.getElementById("address4").value);
areSame("yyy", document.getElementById("address5").value);
areSame("トウキョウト", document.getElementById("address1_kana").value);
areSame("チヨダク", document.getElementById("address2_kana").value);
areSame("チヨダ", document.getElementById("address3_kana").value);
},
"isSelectTagForPrefecture: positive": function () {
var jpos;
jpos = newJpostal();
areSame(true, jpos.isSelectTagForPrefecture("#address1", "%3"));
areSame(false, jpos.isSelectTagForPrefecture("#address1", "%4"));
areSame(false, jpos.isSelectTagForPrefecture("#address2", "%3"));
},
"setSelectTagForPrefecture: positive": function () {
var jpos;
jpos = newJpostal();
jpos.setSelectTagForPrefecture("#address1", "東京都");
areSame("東京都", document.getElementById("address1").value);
jpos.setSelectTagForPrefecture("#address1_b", "東京都");
areSame("13", document.getElementById("address1_b").value);
},
"formatAddress: positive": function () {
var jpos,
address;
jpos = newJpostal();
address = ["_1000001", "東京都", "千代田区", "千代田", "xxx", "yyy", "トウキョウト", "チヨダク", "チヨダ"];
areSame("東京都", jpos.formatAddress("%3", address));
areSame("千代田区", jpos.formatAddress("%4", address));
areSame("千代田", jpos.formatAddress("%5", address));
areSame("xxx", jpos.formatAddress("%6", address));
areSame("yyy", jpos.formatAddress("%7", address));
areSame("トウキョウト", jpos.formatAddress("%8", address));
areSame("チヨダク", jpos.formatAddress("%9", address));
areSame("チヨダ", jpos.formatAddress("%10", address));
},
"getScriptSrc: positive": function () {
var jpos,
actual;
jpos = newJpostal();
actual = jpos.getScriptSrc();
areSame(true, 0 <= actual.indexOf("jquery.jpostal.js"));
},
"init: positive": function () {
var jpos;
jpos = newJpostal(Jpostal.Database.getInstance());
[
{
options: {
postcode: "#postcode1",
address: {
"#address1": "%3",
"#address2": "%4",
"#address3": "%5"
}
},
expected: {
postcode: [
"#postcode1"
],
address: {
"#address1": "%3",
"#address2": "%4",
"#address3": "%5"
},
trigger: {}
}
}
].forEach(function (data) {
jpos.init(data.options);
areSame(data.expected, jpos.options);
});
},
"main: in cache": function () {
var jpos,
jposDb,
ajax,
mockAjax;
// setup
jposDb = Jpostal.Database.getInstance();
jposDb.address = [
["_1000001", "東京都", "千代田区", "千代田", "xxx", "yyy", "トウキョウト", "チヨダク", "チヨダ"]
];
jposDb.map = {
"_100": {state: "complete", time: 0},
"_1000001" : {state: "complete", time: 0}
};
jpos = newJpostal(jposDb);
jpos.init({
postcode: "#postcode1",
address: {
"#address1": "%3",
"#address2": "%4",
"#address3": "%5"
}
});
// mock setup
ajax = jposDb.ajax;
mockAjax = new Mock();
jposDb.ajax = function () {
mockAjax.mock();
};
// do
document.getElementById("postcode1").value = "1000001";
jpos.main();
// verify
areSame(false, mockAjax.wasCalled);
areSame("東京都", document.getElementById("address1").value);
areSame("千代田区", document.getElementById("address2").value);
areSame("千代田", document.getElementById("address3").value);
// teardown
jposDb.ajax = ajax;
},
"main: no cache": function () {
var jpos,
jposDb,
ajax,
mockAjax;
// setup
jposDb = Jpostal.Database.getInstance();
jposDb.address = [];
jposDb.map = [];
jpos = newJpostal(jposDb);
jpos.init({
postcode: "#postcode1",
address: {
"#address1": "%3",
"#address2": "%4",
"#address3": "%5"
}
});
// mock setup
ajax = jposDb.ajax;
mockAjax = new Mock();
jposDb.ajax = function () {
mockAjax.mock();
};
// do
document.getElementById("postcode1").value = "1000001";
jpos.main();
// verify
areSame(true, mockAjax.wasCalled);
// teardown
jposDb.ajax = ajax;
},
"callback: positive": function () {
var jpos,
jposDb;
jposDb = Jpostal.Database.getInstance();
jposDb.address = [
["_1000001", "東京都", "千代田区", "千代田", "xxx", "yyy", "トウキョウト", "チヨダク", "チヨダ"]
];
jpos = newJpostal(jposDb);
jpos.init({
postcode: "#postcode1",
address: {
"#address1": "%3",
"#address2": "%4",
"#address3": "%5"
}
});
jpos.postcode = "1000001";
jpos.callback();
areSame(["_1000001", "東京都", "千代田区", "千代田", "xxx", "yyy", "トウキョウト", "チヨダク", "チヨダ"], jpos.address);
areSame("東京都", document.getElementById("address1").value);
areSame("千代田区", document.getElementById("address2").value);
areSame("千代田", document.getElementById("address3").value);
},
"scanPostcode: one field": function () {
var jpos;
jpos = newJpostal();
jpos.options.postcode = [
"#postcode1"
];
[
{postcode1: "", expected: ""},
{postcode1: "1", expected: ""},
{postcode1: "12", expected: ""},
{postcode1: "123", expected: "123"},
{postcode1: "123-", expected: "123"},
{postcode1: "123-4", expected: "123"},
{postcode1: "123-45", expected: "123"},
{postcode1: "123-456", expected: "123"},
{postcode1: "123-4567", expected: "1234567"},
{postcode1: "1234", expected: "123"},
{postcode1: "12345", expected: "123"},
{postcode1: "123456", expected: "123"},
{postcode1: "1234567", expected: "1234567"}
].forEach(function (data) {
// do
document.getElementById("postcode1").value = data.postcode1;
jpos.scanPostcode();
// verify
areSame(data.expected, jpos.postcode);
});
},
"scanPostcode: two fields": function () {
var jpos = newJpostal();
jpos.options.postcode = [
"#postcode1",
"#postcode2"
];
[
{postcode1: "", postcode2: "", expected: ""},
{postcode1: "1", postcode2: "", expected: ""},
{postcode1: "12", postcode2: "", expected: ""},
{postcode1: "123", postcode2: "", expected: "123"},
{postcode1: "123", postcode2: "4", expected: "123"},
{postcode1: "123", postcode2: "45", expected: "123"},
{postcode1: "123", postcode2: "456", expected: "123"},
{postcode1: "123", postcode2: "4567", expected: "1234567"}
].forEach(function (data) {
// do
document.getElementById("postcode1").value = data.postcode1;
document.getElementById("postcode2").value = data.postcode2;
jpos.scanPostcode();
// verify
areSame(data.expected, jpos.postcode);
});
}
}));
(new Y.Test.Console({newestOnTop: false})).render("#log");
Y.Test.Runner.run();
});