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