@@ -5,7 +5,8 @@ function testGenerate() {
55 literal : {
66 tokens : [ [ 'text' , '/homepage' ] ] ,
77 defaults : { } ,
8- requirements : { }
8+ requirements : { } ,
9+ hosttokens : [ ]
910 }
1011 } ) ;
1112
@@ -17,7 +18,8 @@ function testGenerateWithParams() {
1718 blog_post : {
1819 tokens : [ [ 'variable' , '/' , '[^/]+?' , 'slug' ] , [ 'text' , '/blog-post' ] ] ,
1920 defaults : { } ,
20- requirements : { }
21+ requirements : { } ,
22+ hosttokens : [ ]
2123 }
2224 } ) ;
2325
@@ -29,7 +31,8 @@ function testGenerateUsesBaseUrl() {
2931 homepage : {
3032 tokens : [ [ 'text' , '/bar' ] ] ,
3133 defaults : { } ,
32- requirements : { }
34+ requirements : { } ,
35+ hosttokens : [ ]
3336 }
3437 } ) ;
3538
@@ -41,7 +44,8 @@ function testGenerateUsesSchemeRequirements() {
4144 homepage : {
4245 tokens : [ [ 'text' , '/bar' ] ] ,
4346 defaults : { } ,
44- requirements : { "_scheme" : "https" }
47+ requirements : { "_scheme" : "https" } ,
48+ hosttokens : [ ]
4549 }
4650 } ) ;
4751
@@ -54,7 +58,7 @@ function testGenerateUsesHost() {
5458 tokens : [ [ 'text' , '/bar' ] ] ,
5559 defaults : { } ,
5660 requirements : { } ,
57- host : ' otherhost'
61+ hosttokens : [ [ 'text' , ' otherhost'] ]
5862 }
5963 } ) ;
6064
@@ -67,7 +71,7 @@ function testGenerateUsesHostWhenTheSameSchemeRequirementGiven() {
6771 tokens : [ [ 'text' , '/bar' ] ] ,
6872 defaults : { } ,
6973 requirements : { "_scheme" : "http" } ,
70- host : ' otherhost'
74+ hosttokens : [ [ 'text' , ' otherhost'] ]
7175 }
7276 } ) ;
7377
@@ -80,19 +84,68 @@ function testGenerateUsesHostWhenAnotherSchemeRequirementGiven() {
8084 tokens : [ [ 'text' , '/bar' ] ] ,
8185 defaults : { } ,
8286 requirements : { "_scheme" : "https" } ,
83- host : ' otherhost'
87+ hosttokens : [ [ 'text' , ' otherhost'] ]
8488 }
8589 } ) ;
8690
8791 assertEquals ( 'https://otherhost/foo/bar' , router . generate ( 'homepage' ) ) ;
8892}
8993
94+ function testGenerateSupportsHostPlaceholders ( ) {
95+ var router = new fos . Router ( { base_url : '/foo' , host : "localhost" , scheme : "http" } , {
96+ homepage : {
97+ tokens : [ [ 'text' , '/bar' ] ] ,
98+ defaults : { } ,
99+ requirements : { } ,
100+ hosttokens : [
101+ [ 'text' , '.localhost' ] ,
102+ [ 'variable' , '' , '' , 'subdomain' ]
103+ ]
104+ }
105+ } ) ;
106+
107+ assertEquals ( 'http://api.localhost/foo/bar' , router . generate ( 'homepage' , { subdomain : 'api' } ) ) ;
108+ }
109+
110+ function testGenerateSupportsHostPlaceholdersDefaults ( ) {
111+ var router = new fos . Router ( { base_url : '/foo' , host : "localhost" , scheme : "http" } , {
112+ homepage : {
113+ tokens : [ [ 'text' , '/bar' ] ] ,
114+ defaults : { subdomain : 'api' } ,
115+ requirements : { } ,
116+ hosttokens : [
117+ [ 'text' , '.localhost' ] ,
118+ [ 'variable' , '' , '' , 'subdomain' ]
119+ ]
120+ }
121+ } ) ;
122+
123+ assertEquals ( 'http://api.localhost/foo/bar' , router . generate ( 'homepage' ) ) ;
124+ }
125+
126+ function testGenerateGeneratesRelativePathWhenTheSameHostGiven ( ) {
127+ var router = new fos . Router ( { base_url : '/foo' , host : "api.localhost" , scheme : "http" } , {
128+ homepage : {
129+ tokens : [ [ 'text' , '/bar' ] ] ,
130+ defaults : { } ,
131+ requirements : { } ,
132+ hosttokens : [
133+ [ 'text' , '.localhost' ] ,
134+ [ 'variable' , '' , '' , 'subdomain' ]
135+ ]
136+ }
137+ } ) ;
138+
139+ assertEquals ( '/foo/bar' , router . generate ( 'homepage' , { subdomain : 'api' } ) ) ;
140+ }
141+
90142function testGenerateUsesAbsoluteUrl ( ) {
91143 var router = new fos . Router ( { base_url : '/foo' , host : "localhost" , scheme : "http" } , {
92144 homepage : {
93145 tokens : [ [ 'text' , '/bar' ] ] ,
94146 defaults : { } ,
95- requirements : { }
147+ requirements : { } ,
148+ hosttokens : [ ]
96149 }
97150 } ) ;
98151
@@ -104,7 +157,8 @@ function testGenerateUsesAbsoluteUrlWhenSchemeRequirementGiven() {
104157 homepage : {
105158 tokens : [ [ 'text' , '/bar' ] ] ,
106159 defaults : { } ,
107- requirements : { "_scheme" : "http" }
160+ requirements : { "_scheme" : "http" } ,
161+ hosttokens : [ ]
108162 }
109163 } ) ;
110164
@@ -116,7 +170,8 @@ function testGenerateWithOptionalTrailingParam() {
116170 posts : {
117171 tokens : [ [ 'variable' , '.' , '' , '_format' ] , [ 'text' , '/posts' ] ] ,
118172 defaults : { } ,
119- requirements : { }
173+ requirements : { } ,
174+ hosttokens : [ ]
120175 }
121176 } ) ;
122177
@@ -129,7 +184,8 @@ function testGenerateQueryStringWithoutDefaults() {
129184 posts : {
130185 tokens : [ [ 'variable' , '/' , '[1-9]+[0-9]*' , 'page' ] , [ 'text' , '/blog-posts' ] ] ,
131186 defaults : { 'page' : 1 } ,
132- requirements : { }
187+ requirements : { } ,
188+ hosttokens : [ ]
133189 }
134190 } ) ;
135191
@@ -141,7 +197,8 @@ function testAllowSlashes() {
141197 posts : {
142198 tokens : [ [ 'variable' , '/' , '.+' , 'id' ] , [ 'text' , '/blog-post' ] ] ,
143199 defaults : { } ,
144- requirements : { }
200+ requirements : { } ,
201+ hosttokens : [ ]
145202 }
146203 } ) ;
147204
@@ -153,7 +210,8 @@ function testGenerateWithExtraParams() {
153210 foo : {
154211 tokens : [ [ 'variable' , '/' , '' , 'bar' ] ] ,
155212 defaults : { } ,
156- requirements : { }
213+ requirements : { } ,
214+ hosttokens : [ ]
157215 }
158216 } ) ;
159217
@@ -168,7 +226,8 @@ function testGenerateWithExtraParamsDeep() {
168226 foo : {
169227 tokens : [ [ 'variable' , '/' , '' , 'bar' ] ] ,
170228 defaults : { } ,
171- requirements : { }
229+ requirements : { } ,
230+ hosttokens : [ ]
172231 }
173232 } ) ;
174233
@@ -226,17 +285,20 @@ function testGeti18n() {
226285 en__RG__homepage : {
227286 tokens : [ [ 'text' , '/bar' ] ] ,
228287 defaults : { } ,
229- requirements : { }
288+ requirements : { } ,
289+ hosttokens : [ ]
230290 } ,
231291 es__RG__homepage : {
232292 tokens : [ [ 'text' , '/es/bar' ] ] ,
233293 defaults : { } ,
234- requirements : { }
294+ requirements : { } ,
295+ hosttokens : [ ]
235296 } ,
236297 _admin : {
237298 tokens : [ [ 'text' , '/admin' ] ] ,
238299 defaults : { } ,
239- requirements : { }
300+ requirements : { } ,
301+ hosttokens : [ ]
240302 }
241303 } ) ;
242304
@@ -277,7 +339,8 @@ function testGenerateWithNullValue() {
277339 [ 'text' , '/blog-post' ]
278340 ] ,
279341 defaults : { } ,
280- requirements : { }
342+ requirements : { } ,
343+ hosttokens : [ ]
281344 }
282345 } ) ;
283346
0 commit comments