1082815dcSEvan Baconimport * as fs from 'fs'; 2082815dcSEvan Baconimport { vol } from 'memfs'; 3082815dcSEvan Baconimport * as path from 'path'; 4082815dcSEvan Bacon 5*ed3bd27bSEvan Baconimport rnFixture from '../../plugins/__tests__/fixtures/react-native-project'; 6082815dcSEvan Baconimport { compileModsAsync } from '../../plugins/mod-compiler'; 7082815dcSEvan Baconimport { 8082815dcSEvan Bacon ensureSwiftBridgingHeaderSetup, 9082815dcSEvan Bacon getDesignatedSwiftBridgingHeaderFileReference, 10082815dcSEvan Bacon withNoopSwiftFile, 11082815dcSEvan Bacon} from '../Swift'; 12082815dcSEvan Baconimport { getPbxproj } from '../utils/Xcodeproj'; 13082815dcSEvan Bacon 14082815dcSEvan Baconjest.mock('fs'); 15082815dcSEvan Bacon 16082815dcSEvan Bacondescribe(ensureSwiftBridgingHeaderSetup, () => { 17*ed3bd27bSEvan Bacon afterEach(() => { 18082815dcSEvan Bacon vol.reset(); 19082815dcSEvan Bacon }); 20082815dcSEvan Bacon 21082815dcSEvan Bacon it(`creates a bridging header when none are designated`, () => { 22*ed3bd27bSEvan Bacon const projectRoot = '/'; 23*ed3bd27bSEvan Bacon vol.fromJSON(rnFixture, projectRoot); 24082815dcSEvan Bacon const project = getPbxproj(projectRoot); 25082815dcSEvan Bacon // perform action 26082815dcSEvan Bacon ensureSwiftBridgingHeaderSetup({ projectRoot, project }); 27082815dcSEvan Bacon 28082815dcSEvan Bacon expect(getDesignatedSwiftBridgingHeaderFileReference({ project })).toBe( 29*ed3bd27bSEvan Bacon 'HelloWorld/HelloWorld-Bridging-Header.h' 30082815dcSEvan Bacon ); 31082815dcSEvan Bacon 32082815dcSEvan Bacon expect( 33*ed3bd27bSEvan Bacon vol.existsSync(path.join(projectRoot, 'ios/HelloWorld/HelloWorld-Bridging-Header.h')) 34082815dcSEvan Bacon ).toBe(true); 35082815dcSEvan Bacon }); 36082815dcSEvan Bacon 37082815dcSEvan Bacon it(`skips creating a bridging header when using swift`, () => { 38*ed3bd27bSEvan Bacon const projectRoot = '/'; 39*ed3bd27bSEvan Bacon vol.fromJSON( 40*ed3bd27bSEvan Bacon { 41*ed3bd27bSEvan Bacon 'ios/HelloWorld.xcodeproj/project.pbxproj': 42*ed3bd27bSEvan Bacon rnFixture['ios/HelloWorld.xcodeproj/project.pbxproj'], 43*ed3bd27bSEvan Bacon 'ios/HelloWorld/AppDelegate.swift': '', 44*ed3bd27bSEvan Bacon }, 45*ed3bd27bSEvan Bacon projectRoot 46*ed3bd27bSEvan Bacon ); 47*ed3bd27bSEvan Bacon const project = getPbxproj(projectRoot); 48082815dcSEvan Bacon // perform action 49*ed3bd27bSEvan Bacon ensureSwiftBridgingHeaderSetup({ projectRoot, project }); 50082815dcSEvan Bacon 51082815dcSEvan Bacon // Won't link a bridging header 52082815dcSEvan Bacon expect(getDesignatedSwiftBridgingHeaderFileReference({ project })).toBe(null); 53082815dcSEvan Bacon 54082815dcSEvan Bacon expect( 55*ed3bd27bSEvan Bacon vol.existsSync(path.join(projectRoot, 'ios/HelloWorld/HelloWorld-Bridging-Header.h')) 56082815dcSEvan Bacon ).toBe(false); 57082815dcSEvan Bacon }); 58082815dcSEvan Bacon}); 59082815dcSEvan Bacon 60082815dcSEvan Bacondescribe(withNoopSwiftFile, () => { 61*ed3bd27bSEvan Bacon afterEach(() => { 62082815dcSEvan Bacon vol.reset(); 63082815dcSEvan Bacon }); 64082815dcSEvan Bacon 65082815dcSEvan Bacon it(`creates a noop swift file`, async () => { 66*ed3bd27bSEvan Bacon const projectRoot = '/alpha'; 67*ed3bd27bSEvan Bacon vol.fromJSON(rnFixture, projectRoot); 68082815dcSEvan Bacon const config = withNoopSwiftFile({ 69082815dcSEvan Bacon name: 'testproject', 70082815dcSEvan Bacon slug: 'testproject', 71082815dcSEvan Bacon }); 72082815dcSEvan Bacon 73082815dcSEvan Bacon await compileModsAsync(config, { projectRoot: '/alpha', platforms: ['ios'] }); 74*ed3bd27bSEvan Bacon expect(fs.existsSync('/alpha/ios/HelloWorld/noop-file.swift')).toBeTruthy(); 75082815dcSEvan Bacon }); 76082815dcSEvan Bacon}); 77