@@ -2,8 +2,9 @@ import { Yok } from "../../lib/common/yok";
22import { assert } from "chai" ;
33import { ProjectDataService } from "../../lib/services/project-data-service" ;
44import { 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' ;
66import { DevicePlatformsConstants } from "../../lib/common/mobile/device-platforms-constants" ;
7+ import { basename } from "path" ;
78
89const CLIENT_NAME_KEY_IN_PROJECT_FILE = "nativescript" ;
910
@@ -53,19 +54,38 @@ const createTestInjector = (readTextData?: string): IInjector => {
5354
5455 readText : ( filename : string , encoding ?: IReadFileOptions | string ) : string => {
5556 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 [ ] => [ ]
5767 } ) ;
5868
5969 testInjector . register ( "logger" , LoggerStub ) ;
6070
6171 testInjector . register ( "projectDataService" , ProjectDataService ) ;
6272
63- testInjector . register ( "androidResourcesMigrationService" , { } ) ;
73+ testInjector . register ( "androidResourcesMigrationService" , {
74+ hasMigrated : ( appResourcesDir : string ) : boolean => true
75+ } ) ;
6476
6577 testInjector . register ( "devicePlatformsConstants" , DevicePlatformsConstants ) ;
6678
6779 testInjector . register ( "injector" , testInjector ) ;
6880
81+ testInjector . register ( "errors" , { } ) ;
82+
83+ testInjector . register ( "projectHelper" , {
84+ sanitizeName : ( appName : string ) : string => appName
85+ } ) ;
86+
87+ testInjector . register ( "options" , { } ) ;
88+
6989 return testInjector ;
7090} ;
7191
@@ -244,4 +264,39 @@ describe("projectDataService", () => {
244264 assert . deepEqual ( dataPassedToWriteJson , { dependencies : { } } ) ;
245265 } ) ;
246266 } ) ;
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+ } ) ;
247302} ) ;
0 commit comments