@@ -235,3 +235,242 @@ fn strip_extension(path: &str) -> String {
235
235
new_path. push_str ( stem) ;
236
236
new_path
237
237
}
238
+
239
+ #[ cfg( test) ]
240
+ mod tests {
241
+ use super :: * ;
242
+
243
+ #[ test]
244
+ fn test_generate_typescript_empty_data ( ) {
245
+ let data = BTreeMap :: new ( ) ;
246
+ let options = GeneratorOptions {
247
+ output_name : "assets" . to_string ( ) ,
248
+ style : CodegenStyle :: Flat ,
249
+ strip_extension : false ,
250
+ } ;
251
+ let generator = Generator :: new ( data, options) ;
252
+ let output = generator. generate_typescript ( ) ;
253
+ let expected_output = "declare const assets: {\n };\n export = assets;\n " ;
254
+ assert_eq ! ( output, expected_output) ;
255
+ }
256
+
257
+ #[ test]
258
+ fn test_generate_luau_empty_data ( ) {
259
+ let data = BTreeMap :: new ( ) ;
260
+ let options = GeneratorOptions {
261
+ output_name : "assets" . to_string ( ) ,
262
+ style : CodegenStyle :: Flat ,
263
+ strip_extension : false ,
264
+ } ;
265
+ let generator = Generator :: new ( data, options) ;
266
+ let output = generator. generate_luau ( ) ;
267
+ let expected_output = "return {\n }" ;
268
+ assert_eq ! ( output, expected_output) ;
269
+ }
270
+
271
+ #[ test]
272
+ fn test_generate_typescript_single_item ( ) {
273
+ let mut data = BTreeMap :: new ( ) ;
274
+ data. insert ( "foo.png" . to_string ( ) , "path/to/foo.png" . to_string ( ) ) ;
275
+
276
+ let options = GeneratorOptions {
277
+ output_name : "assets" . to_string ( ) ,
278
+ style : CodegenStyle :: Flat ,
279
+ strip_extension : false ,
280
+ } ;
281
+
282
+ let generator = Generator :: new ( data, options) ;
283
+ let output = generator. generate_typescript ( ) ;
284
+
285
+ let expected_output =
286
+ "declare const assets: {\n \t \" foo.png\" : \" path/to/foo.png\" \n };\n export = assets;\n " ;
287
+ assert_eq ! ( output, expected_output) ;
288
+ }
289
+
290
+ #[ test]
291
+ fn test_generate_luau_single_item ( ) {
292
+ let mut data = BTreeMap :: new ( ) ;
293
+ data. insert ( "foo.png" . to_string ( ) , "path/to/foo.png" . to_string ( ) ) ;
294
+
295
+ let options = GeneratorOptions {
296
+ output_name : "assets" . to_string ( ) ,
297
+ style : CodegenStyle :: Flat ,
298
+ strip_extension : false ,
299
+ } ;
300
+
301
+ let generator = Generator :: new ( data, options) ;
302
+ let output = generator. generate_luau ( ) ;
303
+
304
+ let expected_output = "return {\n \t [\" foo.png\" ] = \" path/to/foo.png\" \n }" ;
305
+ assert_eq ! ( output, expected_output) ;
306
+ }
307
+
308
+ #[ test]
309
+ fn test_generate_typescript_multiple_items_flat ( ) {
310
+ let mut data = BTreeMap :: new ( ) ;
311
+ data. insert ( "foo.png" . to_string ( ) , "path/to/foo.png" . to_string ( ) ) ;
312
+ data. insert ( "bar.jpg" . to_string ( ) , "path/to/bar.jpg" . to_string ( ) ) ;
313
+
314
+ let options = GeneratorOptions {
315
+ output_name : "assets" . to_string ( ) ,
316
+ style : CodegenStyle :: Flat ,
317
+ strip_extension : false ,
318
+ } ;
319
+
320
+ let generator = Generator :: new ( data, options) ;
321
+ let output = generator. generate_typescript ( ) ;
322
+
323
+ let expected_output = "declare const assets: {\n \t \" bar.jpg\" : \" path/to/bar.jpg\" ,\n \t \" foo.png\" : \" path/to/foo.png\" \n };\n export = assets;\n " ;
324
+ assert_eq ! ( output, expected_output) ;
325
+ }
326
+
327
+ #[ test]
328
+ fn test_generate_luau_multiple_items_flat ( ) {
329
+ let mut data = BTreeMap :: new ( ) ;
330
+ data. insert ( "foo.png" . to_string ( ) , "path/to/foo.png" . to_string ( ) ) ;
331
+ data. insert ( "bar.jpg" . to_string ( ) , "path/to/bar.jpg" . to_string ( ) ) ;
332
+
333
+ let options = GeneratorOptions {
334
+ output_name : "assets" . to_string ( ) ,
335
+ style : CodegenStyle :: Flat ,
336
+ strip_extension : false ,
337
+ } ;
338
+
339
+ let generator = Generator :: new ( data, options) ;
340
+ let output = generator. generate_luau ( ) ;
341
+
342
+ let expected_output = "return {\n \t [\" bar.jpg\" ] = \" path/to/bar.jpg\" ,\n \t [\" foo.png\" ] = \" path/to/foo.png\" \n }" ;
343
+ assert_eq ! ( output, expected_output) ;
344
+ }
345
+
346
+ #[ test]
347
+ fn test_generate_typescript_nested ( ) {
348
+ let mut data = BTreeMap :: new ( ) ;
349
+ data. insert (
350
+ "images/foo.png" . to_string ( ) ,
351
+ "path/to/images/foo.png" . to_string ( ) ,
352
+ ) ;
353
+ data. insert (
354
+ "images/bar.jpg" . to_string ( ) ,
355
+ "path/to/images/bar.jpg" . to_string ( ) ,
356
+ ) ;
357
+ data. insert (
358
+ "sounds/baz.wav" . to_string ( ) ,
359
+ "path/to/sounds/baz.wav" . to_string ( ) ,
360
+ ) ;
361
+
362
+ let options = GeneratorOptions {
363
+ output_name : "assets" . to_string ( ) ,
364
+ style : CodegenStyle :: Nested ,
365
+ strip_extension : false ,
366
+ } ;
367
+
368
+ let generator = Generator :: new ( data, options) ;
369
+ let output = generator. generate_typescript ( ) ;
370
+
371
+ let expected_output = "declare const assets: {\n \t images: {\n \t \t \" bar.jpg\" : \" path/to/images/bar.jpg\" ,\n \t \t \" foo.png\" : \" path/to/images/foo.png\" \n \t },\n \t sounds: {\n \t \t \" baz.wav\" : \" path/to/sounds/baz.wav\" \n \t }\n };\n export = assets;\n " ;
372
+ assert_eq ! ( output, expected_output) ;
373
+ }
374
+
375
+ #[ test]
376
+ fn test_generate_luau_nested ( ) {
377
+ let mut data = BTreeMap :: new ( ) ;
378
+ data. insert (
379
+ "images/foo.png" . to_string ( ) ,
380
+ "path/to/images/foo.png" . to_string ( ) ,
381
+ ) ;
382
+ data. insert (
383
+ "images/bar.jpg" . to_string ( ) ,
384
+ "path/to/images/bar.jpg" . to_string ( ) ,
385
+ ) ;
386
+ data. insert (
387
+ "sounds/baz.wav" . to_string ( ) ,
388
+ "path/to/sounds/baz.wav" . to_string ( ) ,
389
+ ) ;
390
+
391
+ let options = GeneratorOptions {
392
+ output_name : "assets" . to_string ( ) ,
393
+ style : CodegenStyle :: Nested ,
394
+ strip_extension : false ,
395
+ } ;
396
+
397
+ let generator = Generator :: new ( data, options) ;
398
+ let output = generator. generate_luau ( ) ;
399
+
400
+ let expected_output = "return {\n \t images = {\n \t \t [\" bar.jpg\" ] = \" path/to/images/bar.jpg\" ,\n \t \t [\" foo.png\" ] = \" path/to/images/foo.png\" \n \t },\n \t sounds = {\n \t \t [\" baz.wav\" ] = \" path/to/sounds/baz.wav\" \n \t }\n }" ;
401
+ assert_eq ! ( output, expected_output) ;
402
+ }
403
+
404
+ #[ test]
405
+ fn test_generate_typescript_strip_extension ( ) {
406
+ let mut data = BTreeMap :: new ( ) ;
407
+ data. insert ( "foo.png" . to_string ( ) , "path/to/foo.png" . to_string ( ) ) ;
408
+
409
+ let options = GeneratorOptions {
410
+ output_name : "assets" . to_string ( ) ,
411
+ style : CodegenStyle :: Flat ,
412
+ strip_extension : true ,
413
+ } ;
414
+
415
+ let generator = Generator :: new ( data, options) ;
416
+ let output = generator. generate_typescript ( ) ;
417
+
418
+ let expected_output =
419
+ "declare const assets: {\n \t foo: \" path/to/foo.png\" \n };\n export = assets;\n " ;
420
+ assert_eq ! ( output, expected_output) ;
421
+ }
422
+
423
+ #[ test]
424
+ fn test_generate_luau_strip_extension ( ) {
425
+ let mut data = BTreeMap :: new ( ) ;
426
+ data. insert ( "foo.png" . to_string ( ) , "path/to/foo.png" . to_string ( ) ) ;
427
+
428
+ let options = GeneratorOptions {
429
+ output_name : "assets" . to_string ( ) ,
430
+ style : CodegenStyle :: Flat ,
431
+ strip_extension : true ,
432
+ } ;
433
+
434
+ let generator = Generator :: new ( data, options) ;
435
+ let output = generator. generate_luau ( ) ;
436
+
437
+ let expected_output = "return {\n \t foo = \" path/to/foo.png\" \n }" ;
438
+ assert_eq ! ( output, expected_output) ;
439
+ }
440
+
441
+ #[ test]
442
+ fn test_generate_typescript_invalid_identifiers ( ) {
443
+ let mut data = BTreeMap :: new ( ) ;
444
+ data. insert ( "foo-bar" . to_string ( ) , "path/to/foo-bar.png" . to_string ( ) ) ;
445
+
446
+ let options = GeneratorOptions {
447
+ output_name : "assets" . to_string ( ) ,
448
+ style : CodegenStyle :: Flat ,
449
+ strip_extension : false ,
450
+ } ;
451
+
452
+ let generator = Generator :: new ( data, options) ;
453
+ let output = generator. generate_typescript ( ) ;
454
+
455
+ let expected_output = "declare const assets: {\n \t \" foo-bar\" : \" path/to/foo-bar.png\" \n };\n export = assets;\n " ;
456
+ assert_eq ! ( output, expected_output) ;
457
+ }
458
+
459
+ #[ test]
460
+ fn test_generate_luau_invalid_identifiers ( ) {
461
+ let mut data = BTreeMap :: new ( ) ;
462
+ data. insert ( "foo-bar" . to_string ( ) , "path/to/foo-bar.png" . to_string ( ) ) ;
463
+
464
+ let options = GeneratorOptions {
465
+ output_name : "assets" . to_string ( ) ,
466
+ style : CodegenStyle :: Flat ,
467
+ strip_extension : false ,
468
+ } ;
469
+
470
+ let generator = Generator :: new ( data, options) ;
471
+ let output = generator. generate_luau ( ) ;
472
+
473
+ let expected_output = "return {\n \t [\" foo-bar\" ] = \" path/to/foo-bar.png\" \n }" ;
474
+ assert_eq ! ( output, expected_output) ;
475
+ }
476
+ }
0 commit comments