Skip to content

Commit 707a77c

Browse files
committed
Merge pull request #18 from mamod/error_callback
Error callback
2 parents 5942778 + 50b83d6 commit 707a77c

File tree

10 files changed

+793
-1
lines changed

10 files changed

+793
-1
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
before_script : cd tests
2+
script: phantomjs phantom.js

jquery-loadTemplate/jquery.loadTemplate-1.2.2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
done++;
9696
if (done === todo) {
9797
if (errored && settings && typeof settings.error === "function") {
98-
settings.error();
98+
settings.error.call($that);
9999
}
100100
if (settings && typeof settings.complete === "function") {
101101
settings.complete();

tests/files/callback.js

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
(function(){
2+
var data = [
3+
{
4+
"name" : "test1",
5+
"id" : 1
6+
},
7+
{
8+
"name" : "test2",
9+
"id" : 2
10+
},
11+
{
12+
"name" : "test3",
13+
"id" : 3
14+
},
15+
{
16+
"name" : "test4",
17+
"id" : 4
18+
},
19+
{
20+
"name" : "test5",
21+
"id" : 5
22+
}
23+
];
24+
25+
function callback(assert){
26+
var beforeInsertCounter = 0,
27+
afterInsertCounter = 0,
28+
successCounter = 0,
29+
errorCounter = 0,
30+
completeCounter = 0;
31+
32+
var sequence = [];
33+
var elemSequence = [];
34+
return {
35+
name: "Number of Call Callbacks",
36+
setup: function(){
37+
$("#render").loadTemplate("#template", data, {
38+
beforeInsert : function(elem){
39+
sequence.push('before');
40+
41+
if ($('#render').children().length === beforeInsertCounter) {
42+
elemSequence.push(true);
43+
}
44+
45+
++beforeInsertCounter;
46+
47+
48+
},
49+
afterInsert : function(elem){
50+
sequence.push('after');
51+
52+
if ($('#render').children().length === afterInsertCounter) {
53+
elemSequence.push(true);
54+
}
55+
56+
++afterInsertCounter;
57+
58+
},
59+
complete : function(){
60+
sequence.push('complete');
61+
++completeCounter;
62+
},
63+
success : function(){
64+
sequence.push('success');
65+
++successCounter;
66+
},
67+
error : function(){
68+
sequence.push('error');
69+
++errorCounter;
70+
}
71+
});
72+
},
73+
test: function () {
74+
75+
//make sure every callback is being called as expected
76+
77+
//before Insert & after Insert counter == 5
78+
//if we have an array of elements before & after inserts will be
79+
//called before and after inserting each element
80+
assert("Before Insert Counter 5 = " + beforeInsertCounter, 5 === beforeInsertCounter);
81+
assert("After Insert Counter 5 = " + afterInsertCounter, 5 === afterInsertCounter);
82+
83+
//no error expected
84+
assert("Error Counter 0 = " + errorCounter, 0 === errorCounter);
85+
86+
//those should be called once
87+
assert("Success Counter 1 = " + successCounter, 1 === successCounter);
88+
assert("Complete Counter 1 = " + completeCounter, 1 === completeCounter);
89+
90+
//sequence by now should be
91+
var expected = 'before,after,before,after,before,after,before,after,before,after,complete,success';
92+
var got = sequence.toString();
93+
assert("Sequence " + got + " = " + expected, expected == got );
94+
95+
assert("Element Sequence Call 10 == " + elemSequence.length, elemSequence.length === 10);
96+
97+
}
98+
};
99+
}
100+
101+
addTests(callback);
102+
103+
})();

tests/files/error.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
(function(){
2+
var data = [
3+
{
4+
"name" : "test1",
5+
"id" : 1
6+
},
7+
{
8+
"name" : "test2",
9+
"id" : 2
10+
},
11+
{
12+
"name" : "test3",
13+
"id" : 3
14+
},
15+
{
16+
"name" : "test4",
17+
"id" : 4
18+
},
19+
{
20+
"name" : "test5",
21+
"id" : 5
22+
}
23+
];
24+
25+
function errorsHandle(assert,async){
26+
var successCounter = 0,
27+
errorCounter = 0,
28+
completeCounter = 0,
29+
sequence = [];
30+
31+
return {
32+
name: "Custom Error Callback",
33+
setup: function(){
34+
$("#render").loadTemplate('test.html', data, {
35+
complete : function(){
36+
sequence.push('complete');
37+
++completeCounter;
38+
},
39+
success : function(){
40+
sequence.push('success');
41+
++successCounter;
42+
},
43+
error : function(){
44+
sequence.push('error');
45+
++errorCounter;
46+
}
47+
});
48+
},
49+
test: function () {
50+
51+
//give it some time to check URL
52+
setTimeout(async(function () { // async testing
53+
54+
//success callback will not be fired
55+
assert("Success Counter 0 = " + successCounter, 0 === successCounter);
56+
57+
//error should be fired
58+
assert("Error Counter 1 = " + errorCounter, 1 === errorCounter);
59+
60+
//complete should be called even with errors
61+
assert("Complete Counter 1 = " + completeCounter, 1 === completeCounter);
62+
63+
//sequence by now should be
64+
var expected = 'error,complete';
65+
var got = sequence.toString();
66+
assert("Sequence " + expected + " = " + got, expected == got );
67+
68+
}), 1000);
69+
}
70+
};
71+
}
72+
73+
function deafultError(assert,async){
74+
var successCounter = 0,
75+
errorCounter = 0,
76+
completeCounter = 0,
77+
sequence = [];
78+
79+
return {
80+
name: "Default Error Callback",
81+
setup: function(){
82+
$("#render").loadTemplate('doesnotexists/test.html', data);
83+
},
84+
test: function () {
85+
//give it some time to check URL
86+
setTimeout(async(function () { //asnc testing
87+
var got = $('#render').text();
88+
var expected = "There was an error loading the template.";
89+
assert("Error Message " + expected + " = " + got, got == expected);
90+
}), 1000);
91+
}
92+
};
93+
}
94+
95+
addTests(errorsHandle,deafultError);
96+
97+
})();

tests/files/formatters.js

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
(function(){
2+
3+
var data = [
4+
{
5+
"name" : "test1",
6+
"id" : 1
7+
},
8+
{
9+
"name" : "test2",
10+
"id" : 2
11+
},
12+
{
13+
"name" : "test3",
14+
"id" : 3
15+
}
16+
];
17+
18+
//data formatters
19+
//single data formatter
20+
$.addTemplateFormatter("singleFormatter",
21+
function(value, template) {
22+
$(this).addClass('red');
23+
return value.toUpperCase();
24+
}
25+
);
26+
27+
$.addTemplateFormatter("singleFormatter2",
28+
function(value, template) {
29+
return 99;
30+
}
31+
);
32+
33+
//multiple data formatters
34+
$.addTemplateFormatter({
35+
UpperCaseFormatter : function(value, template) {
36+
$(this).addClass('red');
37+
return value.toUpperCase();
38+
},
39+
idFormatter : function(value, template) {
40+
if (value === 2){
41+
$(this).addClass('yellow');
42+
}
43+
return 'xx';
44+
},
45+
SameCaseFormatter : function(value, template) {
46+
if(template == "upper") {
47+
return value.toUpperCase();
48+
} else {
49+
return value.toLowerCase();
50+
}
51+
}
52+
});
53+
54+
/**
55+
* general Formatter test
56+
*/
57+
function general(assert){
58+
return {
59+
name: "Templates Formatter",
60+
setup: function(){
61+
$("#render").loadTemplate("#template2", data);
62+
},
63+
test: function () {
64+
$('#render div.name').each(function(i){
65+
var val = $(this).text();
66+
67+
//all names must be in uppercases
68+
var match = data[i].name.toUpperCase();
69+
assert("match " + val + " !== " + match, val === match);
70+
71+
//upperCaseFormatter manipulate element by adding a red class
72+
//check if we got that correctly
73+
var red = $(this).hasClass('red');
74+
assert("has class red", red);
75+
76+
//id also has been overriden to 'xx'
77+
var id = $(this).next().text();
78+
assert("xx id", "xx" === id);
79+
});
80+
}
81+
};
82+
}
83+
84+
/**
85+
* This test make sure that all added formatters will be available
86+
* even if we mix by adding single function formatter or multiple key
87+
* value style
88+
*/
89+
function singleFormatter (assert){
90+
return {
91+
name: "Single Formatter",
92+
setup: function(){
93+
$("#render").loadTemplate("#template3", data);
94+
},
95+
test: function () {
96+
$('#render div.name').each(function(i){
97+
var val = $(this).text();
98+
99+
var match = data[i].name.toUpperCase();
100+
assert("match " + val + " !== " + match, val === match);
101+
102+
//upperCaseFormatter manipulate element by adding a red class
103+
//check if we got that correctly
104+
var red = $(this).hasClass('red');
105+
assert("has class red", red);
106+
107+
//id also has been overriden to 'xx'
108+
var id = $(this).next().text();
109+
assert("id xx !== " + id, "xx" === id);
110+
111+
//hidden value manipulated by singleFormatter2
112+
//using data-format-target to target value attr
113+
var hidVal = $(this).nextAll('.hidden').val();
114+
assert( "Hidden Value " + hidVal +" !== 99", hidVal == 99);
115+
116+
});
117+
}
118+
};
119+
}
120+
121+
//TODO
122+
function SameCaseFormatter (assert){
123+
124+
}
125+
126+
addTests(general,singleFormatter);
127+
128+
})();

0 commit comments

Comments
 (0)