Skip to content

Commit d672714

Browse files
committed
test(CLI): add unit tests for MainApplication.kt modification
1 parent 7819cec commit d672714

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

cli/commands/initCommand/initAndroid.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,11 @@ async function applyMainApplication() {
3838
async function findMainApplication() {
3939
const searchPath = path.join(process.cwd(), 'android', 'app', 'src', 'main', 'java');
4040
const files = fs.readdirSync(searchPath, { recursive: true });
41-
// Support only .kt files
42-
const mainApplicationFile = files.find(file => file.endsWith('MainApplication.kt'));
41+
const mainApplicationFile = files.find(file => file.endsWith('MainApplication.java') || file.endsWith('MainApplication.kt'));
4342
return mainApplicationFile ? path.join(searchPath, mainApplicationFile) : null;
4443
}
4544

4645
module.exports = {
4746
initAndroid: initAndroid,
48-
modifyMainApplicationKt,
47+
modifyMainApplicationKt: modifyMainApplicationKt,
4948
};
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
const { modifyMainApplicationKt } = require('../initAndroid');
3+
4+
// https://github.com/react-native-community/template/blob/0.80.2/template/android/app/src/main/java/com/helloworld/MainApplication.kt
5+
const ktTemplate = `
6+
package com.helloworld
7+
8+
import android.app.Application
9+
import com.facebook.react.PackageList
10+
import com.facebook.react.ReactApplication
11+
import com.facebook.react.ReactHost
12+
import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative
13+
import com.facebook.react.ReactNativeHost
14+
import com.facebook.react.ReactPackage
15+
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
16+
import com.facebook.react.defaults.DefaultReactNativeHost
17+
18+
class MainApplication : Application(), ReactApplication {
19+
20+
override val reactNativeHost: ReactNativeHost =
21+
object : DefaultReactNativeHost(this) {
22+
override fun getPackages(): List<ReactPackage> =
23+
PackageList(this).packages.apply {
24+
// Packages that cannot be autolinked yet can be added manually here, for example:
25+
// add(MyReactNativePackage())
26+
}
27+
28+
override fun getJSMainModuleName(): String = "index"
29+
30+
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
31+
32+
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
33+
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
34+
}
35+
36+
override val reactHost: ReactHost
37+
get() = getDefaultReactHost(applicationContext, reactNativeHost)
38+
39+
override fun onCreate() {
40+
super.onCreate()
41+
loadReactNative(this)
42+
}
43+
}
44+
`;
45+
46+
describe('Android init command - pure functions', () => {
47+
it('should correctly modify Kotlin MainApplication content', () => {
48+
const modifiedContent = modifyMainApplicationKt(ktTemplate);
49+
expect(modifiedContent).toContain('import com.microsoft.codepush.react.CodePush');
50+
expect(modifiedContent).toContain('override fun getJSBundleFile(): String = CodePush.getJSBundleFile()');
51+
});
52+
});

cli/commands/initCommand/test/initCommandTest.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const { modifyObjectiveCAppDelegate, modifySwiftAppDelegate } = require('../initIos');
22

3+
// https://github.com/react-native-community/template/blob/0.80.2/template/ios/HelloWorld/AppDelegate.swift
34
const swiftTemplate = `
45
import UIKit
56
import React
@@ -46,6 +47,7 @@ class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
4647
}
4748
`;
4849

50+
// https://github.com/react-native-community/template/blob/0.76.9/template/ios/HelloWorld/AppDelegate.mm
4951
const objcTemplate = `
5052
#import "AppDelegate.h"
5153
@@ -93,4 +95,4 @@ describe('iOS init command - pure functions', () => {
9395
expect(modifiedContent).toContain('[CodePush bundleURL]');
9496
expect(modifiedContent).not.toContain('[[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];');
9597
});
96-
});
98+
});

0 commit comments

Comments
 (0)