@react-native-harness/platform-android 1.1.0-rc.2 → 1.1.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +9 -2
  2. package/dist/__tests__/adb.test.js +283 -10
  3. package/dist/__tests__/avd-config.test.d.ts +2 -0
  4. package/dist/__tests__/avd-config.test.d.ts.map +1 -0
  5. package/dist/__tests__/avd-config.test.js +174 -0
  6. package/dist/__tests__/ci-action.test.d.ts +2 -0
  7. package/dist/__tests__/ci-action.test.d.ts.map +1 -0
  8. package/dist/__tests__/ci-action.test.js +46 -0
  9. package/dist/__tests__/emulator-startup.test.d.ts +2 -0
  10. package/dist/__tests__/emulator-startup.test.d.ts.map +1 -0
  11. package/dist/__tests__/emulator-startup.test.js +19 -0
  12. package/dist/__tests__/environment.test.d.ts +2 -0
  13. package/dist/__tests__/environment.test.d.ts.map +1 -0
  14. package/dist/__tests__/environment.test.js +51 -0
  15. package/dist/__tests__/instance.test.d.ts +2 -0
  16. package/dist/__tests__/instance.test.d.ts.map +1 -0
  17. package/dist/__tests__/instance.test.js +423 -0
  18. package/dist/adb.d.ts +23 -0
  19. package/dist/adb.d.ts.map +1 -1
  20. package/dist/adb.js +265 -16
  21. package/dist/app-monitor.d.ts.map +1 -1
  22. package/dist/app-monitor.js +27 -7
  23. package/dist/assertions.d.ts +5 -0
  24. package/dist/assertions.d.ts.map +1 -0
  25. package/dist/assertions.js +6 -0
  26. package/dist/avd-config.d.ts +41 -0
  27. package/dist/avd-config.d.ts.map +1 -0
  28. package/dist/avd-config.js +173 -0
  29. package/dist/config.d.ts +77 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +5 -0
  32. package/dist/emulator-startup.d.ts +3 -0
  33. package/dist/emulator-startup.d.ts.map +1 -0
  34. package/dist/emulator-startup.js +17 -0
  35. package/dist/emulator.d.ts +6 -0
  36. package/dist/emulator.d.ts.map +1 -0
  37. package/dist/emulator.js +27 -0
  38. package/dist/environment.d.ts +28 -0
  39. package/dist/environment.d.ts.map +1 -0
  40. package/dist/environment.js +295 -0
  41. package/dist/errors.d.ts +7 -0
  42. package/dist/errors.d.ts.map +1 -0
  43. package/dist/errors.js +14 -0
  44. package/dist/factory.d.ts.map +1 -1
  45. package/dist/factory.js +3 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +3 -0
  49. package/dist/instance.d.ts +6 -0
  50. package/dist/instance.d.ts.map +1 -0
  51. package/dist/instance.js +234 -0
  52. package/dist/reader.d.ts +6 -0
  53. package/dist/reader.d.ts.map +1 -0
  54. package/dist/reader.js +57 -0
  55. package/dist/runner.d.ts +2 -2
  56. package/dist/runner.d.ts.map +1 -1
  57. package/dist/runner.js +12 -52
  58. package/dist/targets.d.ts +1 -1
  59. package/dist/targets.d.ts.map +1 -1
  60. package/dist/targets.js +2 -0
  61. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  62. package/dist/types.d.ts +381 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +107 -0
  65. package/package.json +4 -4
  66. package/src/__tests__/adb.test.ts +419 -15
  67. package/src/__tests__/avd-config.test.ts +206 -0
  68. package/src/__tests__/ci-action.test.ts +81 -0
  69. package/src/__tests__/emulator-startup.test.ts +32 -0
  70. package/src/__tests__/environment.test.ts +87 -0
  71. package/src/__tests__/instance.test.ts +610 -0
  72. package/src/adb.ts +423 -16
  73. package/src/app-monitor.ts +56 -18
  74. package/src/avd-config.ts +290 -0
  75. package/src/config.ts +8 -0
  76. package/src/emulator-startup.ts +28 -0
  77. package/src/environment.ts +510 -0
  78. package/src/errors.ts +19 -0
  79. package/src/factory.ts +4 -0
  80. package/src/index.ts +7 -1
  81. package/src/instance.ts +380 -0
  82. package/src/runner.ts +23 -69
  83. package/src/targets.ts +11 -8
@@ -0,0 +1,81 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { describe, expect, it } from 'vitest';
4
+
5
+ const workspaceRoot = path.resolve(import.meta.dirname, '../../../..');
6
+
7
+ describe('Android GitHub action config', () => {
8
+ it('does not duplicate Android SDK verification in the action YAML', async () => {
9
+ const [rootAction, packageAction] = await Promise.all([
10
+ readFile(path.join(workspaceRoot, 'action.yml'), 'utf8'),
11
+ readFile(
12
+ path.join(workspaceRoot, 'packages/github-action/src/action.yml'),
13
+ 'utf8'
14
+ ),
15
+ ]);
16
+
17
+ for (const actionYaml of [rootAction, packageAction]) {
18
+ expect(actionYaml).not.toContain('Verify Android SDK packages');
19
+ expect(actionYaml).toContain(
20
+ "steps.avd-cache.outputs.cache-hit != 'true'"
21
+ );
22
+ }
23
+ });
24
+
25
+ it('removes the third-party emulator runner and maps cacheAvd to HARNESS_AVD_CACHING', async () => {
26
+ const [rootAction, packageAction] = await Promise.all([
27
+ readFile(path.join(workspaceRoot, 'action.yml'), 'utf8'),
28
+ readFile(
29
+ path.join(workspaceRoot, 'packages/github-action/src/action.yml'),
30
+ 'utf8'
31
+ ),
32
+ ]);
33
+
34
+ for (const actionYaml of [rootAction, packageAction]) {
35
+ expect(actionYaml).not.toContain(
36
+ 'reactivecircus/android-emulator-runner'
37
+ );
38
+ expect(actionYaml).toContain(
39
+ 'HARNESS_AVD_CACHING: ${{ inputs.cacheAvd }}'
40
+ );
41
+ expect(actionYaml).toContain(
42
+ 'fromJson(steps.load-config.outputs.config).action.avdCachingEnabled'
43
+ );
44
+ }
45
+ });
46
+
47
+ it('saves the AVD cache after the Harness run step', async () => {
48
+ const [rootAction, packageAction] = await Promise.all([
49
+ readFile(path.join(workspaceRoot, 'action.yml'), 'utf8'),
50
+ readFile(
51
+ path.join(workspaceRoot, 'packages/github-action/src/action.yml'),
52
+ 'utf8'
53
+ ),
54
+ ]);
55
+
56
+ for (const actionYaml of [rootAction, packageAction]) {
57
+ expect(actionYaml.indexOf('- name: Run E2E tests')).toBeLessThan(
58
+ actionYaml.indexOf('- name: Save AVD cache')
59
+ );
60
+ }
61
+ });
62
+
63
+ it('uses a cache key that includes the emulator name', async () => {
64
+ const [rootAction, packageAction] = await Promise.all([
65
+ readFile(path.join(workspaceRoot, 'action.yml'), 'utf8'),
66
+ readFile(
67
+ path.join(workspaceRoot, 'packages/github-action/src/action.yml'),
68
+ 'utf8'
69
+ ),
70
+ ]);
71
+
72
+ for (const actionYaml of [rootAction, packageAction]) {
73
+ expect(actionYaml).toContain(
74
+ "AVD_NAME='${{ fromJson(steps.load-config.outputs.config).config.device.name }}'"
75
+ );
76
+ expect(actionYaml).toContain(
77
+ 'CACHE_KEY="avd-$AVD_NAME-$ARCH-$AVD_CONFIG_HASH"'
78
+ );
79
+ }
80
+ });
81
+ });
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getEmulatorStartupArgs } from '../emulator-startup.js';
3
+
4
+ describe('emulator startup modes', () => {
5
+ it('builds default boot args', () => {
6
+ expect(getEmulatorStartupArgs('Pixel_8_API_35', 'default-boot')).toEqual(
7
+ expect.arrayContaining([
8
+ '@Pixel_8_API_35',
9
+ '-no-snapshot-load',
10
+ '-no-snapshot-save',
11
+ ])
12
+ );
13
+ });
14
+
15
+ it('builds clean snapshot generation args', () => {
16
+ expect(
17
+ getEmulatorStartupArgs('Pixel_8_API_35', 'clean-snapshot-generation')
18
+ ).toEqual(expect.arrayContaining(['@Pixel_8_API_35', '-no-snapshot-load']));
19
+ expect(
20
+ getEmulatorStartupArgs('Pixel_8_API_35', 'clean-snapshot-generation')
21
+ ).not.toContain('-no-snapshot-save');
22
+ });
23
+
24
+ it('builds snapshot reuse args', () => {
25
+ expect(getEmulatorStartupArgs('Pixel_8_API_35', 'snapshot-reuse')).toEqual(
26
+ expect.arrayContaining(['@Pixel_8_API_35', '-no-snapshot-save'])
27
+ );
28
+ expect(
29
+ getEmulatorStartupArgs('Pixel_8_API_35', 'snapshot-reuse')
30
+ ).not.toContain('-no-snapshot-load');
31
+ });
32
+ });
@@ -0,0 +1,87 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import {
3
+ getAndroidSdkRoot,
4
+ getAndroidSystemImagePackage,
5
+ getDefaultUnixAndroidSdkRoot,
6
+ getHostAndroidSystemImageArch,
7
+ getRequiredAndroidSdkPackages,
8
+ } from '../environment.js';
9
+
10
+ describe('Android environment', () => {
11
+ beforeEach(() => {
12
+ vi.restoreAllMocks();
13
+ vi.unstubAllEnvs();
14
+ });
15
+
16
+ it('uses the default Unix SDK root when env vars are missing', () => {
17
+ expect(
18
+ getDefaultUnixAndroidSdkRoot({
19
+ platform: 'darwin',
20
+ homeDirectory: '/Users/tester',
21
+ })
22
+ ).toBe('/Users/tester/Library/Android/sdk');
23
+
24
+ expect(
25
+ getAndroidSdkRoot(
26
+ {},
27
+ {
28
+ platform: 'linux',
29
+ homeDirectory: '/home/tester',
30
+ }
31
+ )
32
+ ).toBe('/home/tester/Android/Sdk');
33
+ });
34
+
35
+ it('prefers ANDROID_HOME and ANDROID_SDK_ROOT over default paths', () => {
36
+ expect(
37
+ getAndroidSdkRoot(
38
+ {
39
+ ANDROID_HOME: '/env/android-home',
40
+ ANDROID_SDK_ROOT: '/env/android-sdk-root',
41
+ },
42
+ {
43
+ platform: 'darwin',
44
+ homeDirectory: '/Users/tester',
45
+ }
46
+ )
47
+ ).toBe('/env/android-home');
48
+
49
+ expect(
50
+ getAndroidSdkRoot(
51
+ {
52
+ ANDROID_SDK_ROOT: '/env/android-sdk-root',
53
+ },
54
+ {
55
+ platform: 'linux',
56
+ homeDirectory: '/home/tester',
57
+ }
58
+ )
59
+ ).toBe('/env/android-sdk-root');
60
+ });
61
+
62
+ it('selects Android packages using the host architecture', () => {
63
+ expect(getHostAndroidSystemImageArch('x64')).toBe('x86_64');
64
+ expect(getHostAndroidSystemImageArch('arm64')).toBe('arm64-v8a');
65
+ expect(getAndroidSystemImagePackage(35, 'x86_64')).toBe(
66
+ 'system-images;android-35;default;x86_64'
67
+ );
68
+ expect(getAndroidSystemImagePackage(35, 'arm64-v8a')).toBe(
69
+ 'system-images;android-35;default;arm64-v8a'
70
+ );
71
+ });
72
+
73
+ it('derives emulator package requirements from runner config fields', () => {
74
+ expect(
75
+ getRequiredAndroidSdkPackages({
76
+ apiLevel: 34,
77
+ includeEmulator: true,
78
+ architecture: 'x86_64',
79
+ })
80
+ ).toEqual([
81
+ 'platform-tools',
82
+ 'emulator',
83
+ 'platforms;android-34',
84
+ 'system-images;android-34;default;x86_64',
85
+ ]);
86
+ });
87
+ });