-
Notifications
You must be signed in to change notification settings - Fork 12
/
String.js
149 lines (107 loc) · 4.83 KB
/
String.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
Specs for String.js
License: MIT-style license.
*/
describe('String.test', function(){
it('should return true if the test matches the string otherwise false', function(){
expect('i like teh cookies'.test('cookies')).toBeTruthy();
expect('i like cookies'.test('ke coo')).toBeTruthy();
expect('I LIKE COOKIES'.test('cookie', 'i')).toBeTruthy();
expect('i like cookies'.test('cookiez')).toBeFalsy();
});
it('should return true if the regular expression test matches the string otherwise false', function(){
expect('i like cookies'.test(/like/)).toBeTruthy();
expect('i like cookies'.test(/^l/)).toBeFalsy();
});
});
describe('String.contains', function(){
it('should return true if the string contains a string otherwise false', function(){
expect('i like cookies'.contains('cookies')).toBeTruthy();
expect('i,like,cookies'.contains('cookies')).toBeTruthy();
expect('mootools'.contains('inefficient javascript')).toBeFalsy();
});
it('should return true if the string constains the string and separator otherwise false', function(){
expect('i like cookies'.contains('cookies', ' ')).toBeTruthy();
expect('i like cookies'.contains('cookies', ',')).toBeFalsy();
expect('i,like,cookies'.contains('cookies', ' ')).toBeFalsy();
expect('i,like,cookies'.contains('cookies', ',')).toBeTruthy();
});
});
describe('String.trim', function(){
it('should trim left and right whitespace from the string', function(){
expect(' i like cookies '.trim()).toEqual('i like cookies');
expect(' i \tlike cookies '.trim()).toEqual('i \tlike cookies');
});
});
describe('String.clean', function(){
it('should clean all extraneous whitespace from the string', function(){
expect(' i like cookies '.clean()).toEqual("i like cookies");
expect(' i\nlike \n cookies \n\t '.clean()).toEqual("i like cookies");
});
});
describe('String.camelCase', function(){
it('should convert a hyphenated string into a camel cased string', function(){
expect('i-like-cookies'.camelCase()).toEqual('iLikeCookies');
expect('I-Like-Cookies'.camelCase()).toEqual('ILikeCookies');
});
});
describe('String.hyphenate', function(){
it('should convert a camel cased string into a hyphenated string', function(){
expect('iLikeCookies'.hyphenate()).toEqual('i-like-cookies');
expect('ILikeCookies'.hyphenate()).toEqual('-i-like-cookies');
});
});
describe('String.capitalize', function(){
it('should capitalize each word', function(){
expect('i like cookies'.capitalize()).toEqual('I Like Cookies');
expect('I Like cOOKIES'.capitalize()).toEqual('I Like COOKIES');
});
});
describe('String.escapeRegExp', function(){
it('should escape special regex characters', function(){
expect('.*'.escapeRegExp()).toEqual('\\\.\\\*');
});
});
describe('String.substitute', function(){
it('should substitute values from objects', function(){
expect('This is {color}.'.substitute({'color': 'blue'})).toEqual('This is blue.');
expect('This is {color} and {size}.'.substitute({'color': 'blue', 'size': 'small'})).toEqual('This is blue and small.');
});
it('should substitute values from arrays', function(){
expect('This is {0}.'.substitute(['blue'])).toEqual('This is blue.');
expect('This is {0} and {1}.'.substitute(['blue', 'small'])).toEqual('This is blue and small.');
});
it('should remove undefined values', function(){
expect('Checking {0}, {1}, {2}, {3} and {4}.'.substitute([1, 0, undefined, null])).toEqual('Checking 1, 0, , and .');
expect('This is {not-set}.'.substitute({})).toEqual('This is .');
});
it('should ignore escaped placeholders', function(){
expect('Ignore \\{this} but not {that}.'.substitute({'that': 'the others'})).toEqual('Ignore {this} but not the others.');
});
it('should substitute with a custom regex', function(){
var php = (/\$([\w-]+)/g);
expect('I feel so $language.'.substitute({'language': 'PHP'}, php)).toEqual('I feel so PHP.');
var ror = (/#\{([^}]+)\}/g);
expect('I feel so #{language}.'.substitute({'language': 'RoR'}, ror)).toEqual('I feel so RoR.');
});
it('should substitute without goofing up nested curly braces', function(){
expect("fred {is {not} very} cool".substitute({ 'is {not':'BROKEN' })).not.toEqual("fred BROKEN very} cool");
expect('this {should {break} mo} betta'.substitute({ 'break':'work' })).toEqual('this {should work mo} betta');
});
});
describe('String.toInt', function(){
it('should convert the string into an integer', function(){
expect('10'.toInt()).toEqual(10);
expect('10px'.toInt()).toEqual(10);
expect('10.10em'.toInt()).toEqual(10);
});
it('should convert the string into an integer with a specific base', function(){
expect('10'.toInt(5)).toEqual(5);
});
});
describe('String.toFloat', function(){
it('should convert the string into a float', function(){
expect('10.11'.toFloat()).toEqual(10.11);
expect('10.55px'.toFloat()).toEqual(10.55);
});
});