@@ -2,8 +2,9 @@ import { Yok } from "../../lib/common/yok";
2
2
import { assert } from "chai" ;
3
3
import { ProjectDataService } from "../../lib/services/project-data-service" ;
4
4
import { LoggerStub } from "../stubs" ;
5
- import { NATIVESCRIPT_PROPS_INTERNAL_DELIMITER } from '../../lib/constants' ;
5
+ import { NATIVESCRIPT_PROPS_INTERNAL_DELIMITER , PACKAGE_JSON_FILE_NAME , AssetConstants } from '../../lib/constants' ;
6
6
import { DevicePlatformsConstants } from "../../lib/common/mobile/device-platforms-constants" ;
7
+ import { basename } from "path" ;
7
8
8
9
const CLIENT_NAME_KEY_IN_PROJECT_FILE = "nativescript" ;
9
10
@@ -53,19 +54,38 @@ const createTestInjector = (readTextData?: string): IInjector => {
53
54
54
55
readText : ( filename : string , encoding ?: IReadFileOptions | string ) : string => {
55
56
return readTextData ;
56
- }
57
+ } ,
58
+
59
+ exists : ( filePath : string ) : boolean => basename ( filePath ) === PACKAGE_JSON_FILE_NAME ,
60
+
61
+ readJson : ( filePath : string ) : any => null ,
62
+
63
+ enumerateFilesInDirectorySync : ( directoryPath : string ,
64
+ filterCallback ?: ( _file : string , _stat : IFsStats ) => boolean ,
65
+ opts ?: { enumerateDirectories ?: boolean , includeEmptyDirectories ?: boolean } ,
66
+ foundFiles ?: string [ ] ) : string [ ] => [ ]
57
67
} ) ;
58
68
59
69
testInjector . register ( "logger" , LoggerStub ) ;
60
70
61
71
testInjector . register ( "projectDataService" , ProjectDataService ) ;
62
72
63
- testInjector . register ( "androidResourcesMigrationService" , { } ) ;
73
+ testInjector . register ( "androidResourcesMigrationService" , {
74
+ hasMigrated : ( appResourcesDir : string ) : boolean => true
75
+ } ) ;
64
76
65
77
testInjector . register ( "devicePlatformsConstants" , DevicePlatformsConstants ) ;
66
78
67
79
testInjector . register ( "injector" , testInjector ) ;
68
80
81
+ testInjector . register ( "errors" , { } ) ;
82
+
83
+ testInjector . register ( "projectHelper" , {
84
+ sanitizeName : ( appName : string ) : string => appName
85
+ } ) ;
86
+
87
+ testInjector . register ( "options" , { } ) ;
88
+
69
89
return testInjector ;
70
90
} ;
71
91
@@ -244,4 +264,39 @@ describe("projectDataService", () => {
244
264
assert . deepEqual ( dataPassedToWriteJson , { dependencies : { } } ) ;
245
265
} ) ;
246
266
} ) ;
267
+
268
+ describe ( "getAssetsStructure" , ( ) => {
269
+ it ( "does not fail when App_Resources/Android and App_Resources/iOS do not exist" , async ( ) => {
270
+ const defaultEmptyData : any = { } ;
271
+ defaultEmptyData [ CLIENT_NAME_KEY_IN_PROJECT_FILE ] = { } ;
272
+ const testInjector = createTestInjector ( JSON . stringify ( defaultEmptyData ) ) ;
273
+ const fs = testInjector . resolve < IFileSystem > ( "fs" ) ;
274
+ fs . readJson = ( filePath : string ) : any => {
275
+ if ( basename ( filePath ) === AssetConstants . imageDefinitionsFileName ) {
276
+ return { android : { } , ios : { } } ;
277
+ }
278
+
279
+ throw new Error ( `Unable to read file ${ filePath } ` ) ;
280
+ } ;
281
+
282
+ const projectDataService = testInjector . resolve < IProjectDataService > ( "projectDataService" ) ;
283
+ const assetStructure = await projectDataService . getAssetsStructure ( { projectDir : "." } ) ;
284
+ const emptyAssetStructure : IAssetGroup = {
285
+ icons : {
286
+ images : [ ]
287
+ } ,
288
+ splashBackgrounds : {
289
+ images : [ ]
290
+ } ,
291
+ splashCenterImages : {
292
+ images : [ ]
293
+ } ,
294
+ splashImages : {
295
+ images : [ ]
296
+ }
297
+ } ;
298
+
299
+ assert . deepEqual ( assetStructure , { ios : emptyAssetStructure , android : _ . merge ( _ . cloneDeep ( emptyAssetStructure ) , { splashImages : null } ) } ) ;
300
+ } ) ;
301
+ } ) ;
247
302
} ) ;
0 commit comments