Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions example/__tests__/nitro.harness.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ function createTestRunner(
}
}

const testObjectCpp =
NitroModules.createHybridObject<TestObjectCpp>('TestObjectCpp')
const testObjectCpp = NitroModules.createHybridObject<TestObjectCpp>(
'NitroTestTestObjectCpp'
)
const testObjectSwiftKotlin =
NitroModules.createHybridObject<TestObjectSwiftKotlin>(
'TestObjectSwiftKotlin'
'NitroTestTestObjectSwiftKotlin'
)

describe('TestObject (C++)', createTestRunner(testObjectCpp))
Expand Down
2 changes: 1 addition & 1 deletion example/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
buildscript {
ext {
buildToolsVersion = "36.0.0"
minSdkVersion = 24
minSdkVersion = 26
compileSdkVersion = 36
targetSdkVersion = 36
ndkVersion = "27.1.12297006"
Expand Down
2 changes: 1 addition & 1 deletion example/ios/NitroExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -649,4 +649,4 @@
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}
}
104 changes: 49 additions & 55 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1537,8 +1537,6 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- react-native-segmented-control (2.5.7):
- React-Core
- React-NativeModulesApple (0.83.0):
- hermes-engine
- React-callinvoker
Expand Down Expand Up @@ -2016,7 +2014,6 @@ DEPENDENCIES:
- React-Mapbuffer (from `../../node_modules/react-native/ReactCommon`)
- React-microtasksnativemodule (from `../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
- react-native-safe-area-context (from `../../node_modules/react-native-safe-area-context`)
- "react-native-segmented-control (from `../../node_modules/@react-native-segmented-control/segmented-control`)"
- React-NativeModulesApple (from `../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-networking (from `../../node_modules/react-native/ReactCommon/react/networking`)
- React-oscompat (from `../../node_modules/react-native/ReactCommon/oscompat`)
Expand Down Expand Up @@ -2140,8 +2137,6 @@ EXTERNAL SOURCES:
:path: "../../node_modules/react-native/ReactCommon/react/nativemodule/microtasks"
react-native-safe-area-context:
:path: "../../node_modules/react-native-safe-area-context"
react-native-segmented-control:
:path: "../../node_modules/@react-native-segmented-control/segmented-control"
React-NativeModulesApple:
:path: "../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
React-networking:
Expand Down Expand Up @@ -2217,10 +2212,10 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
FBLazyVector: 7c1d69992204c5ec452eeefa4a24b0ff311709c8
hermes-engine: 16e781d7fca74c8bb3ca59b99527d9633ee9ee36
NitroModules: c77fa052dc1a365461cbdd36b74611e88f5ac460
NitroTest: 29653fcf3c8031b8dcf515102c33cae362bd13cb
NitroTestExternal: 8575f8fb69b9b9e35b2c4866959fda8be4ad3a96
hermes-engine: 4df240db09b8f56297ca8e63c2a793d538964397
NitroModules: 1d1788c587eef7726097dc63fbf7a1a078e0d698
NitroTest: 7d77bbd40141295df18f926075a06881c961db19
NitroTestExternal: e6b04f06a57120036eb502c35eac321eb71f0aa0
RCTDeprecation: dbbb85eae640e3b43cc16462d0476b00ca5959ae
RCTRequired: 7047b18af29a76069818fd3fa0f4df423483abab
RCTSwiftUI: 5928f7ca7e9e2f1a82d85d4c79ea3065137ad81c
Expand All @@ -2229,73 +2224,72 @@ SPEC CHECKSUMS:
React: f6f8fc5c01e77349cdfaf49102bcb928ac31d8ed
React-callinvoker: 3e62a849bda1522c6422309c02f5dc3210bc5359
React-Core: 0b765bc7c2b83dff178c2b03ed8a0390df26f18c
React-Core-prebuilt: 88810feb58457484bff17e9e91a15453407d745a
React-Core-prebuilt: 37f17c7949e91eea47a1b8878c231d9c898f46d5
React-CoreModules: 55b932564ba696301cb683a86385be6a6f137e57
React-cxxreact: 5bfb95256fde56cc0f9ce425f38cfaa085e71ad2
React-debug: f9dda2791d3ebe2078bc6102641edab77917efb7
React-defaultsnativemodule: 5eaa2ee83604301aa7cc3105e0233e2b01bb5193
React-domnativemodule: 2657e4c584804cba76af46ba721a98028316c8ad
React-Fabric: ba81e0c49a35d914a8eaba7cd04fe1a6989b52c6
React-FabricComponents: c3501f8ab7c84d71b44fa54c89973b0518a4213a
React-FabricImage: ebb79551d37c01c9f10c33cb9295fb3d87e3c252
React-featureflags: b76aac763fa62dc13bbe1c2738ba0b34c1d5dc16
React-featureflagsnativemodule: fbf8c0d91e5b2fd4e85aff56c1cba88f2ba66667
React-graphics: a25fddc60b9d952693209cfb3dd9a556a160479d
React-debug: 56ebe96bf1e762430834d37a057e15c3a671a9fa
React-defaultsnativemodule: f8bd206ea5f0c6d482ba8bfcc750e40e04e87c91
React-domnativemodule: 8068a6cb27450a1b0c45d12b5b69a2b23725870e
React-Fabric: e8404268658687963f0f0fee07ab21afd37a23a6
React-FabricComponents: be8978b64999e45a17b18aa1ba51f630398d1a16
React-FabricImage: 9a35db16fd7d352e162e241a17efe868bd997f91
React-featureflags: 78080ad913ada3f7b2939141a9b2c3c1f2925e1d
React-featureflagsnativemodule: 236ec5a52a6771d27e7a026126d77de74a2cad4d
React-graphics: 5ddbe07b01fc9cf69bc4f084e84642f0dc592d72
React-hermes: 99530187adfc1a61013c59ab4b1bbccf97401eca
React-idlecallbacksnativemodule: dbf0b339acba04a51ae4e3ed115bb3f079dcea6e
React-ImageManager: d9f4d473c4118b65ceb9e2596eaa69efc6027a0e
React-intersectionobservernativemodule: 4c538efb01719c6d5f85566716e394cd9419d491
React-jserrorhandler: 2e48ec8f8185694e7e5a00d9b56e58b590ad962b
React-idlecallbacksnativemodule: 23163f848f58fc3ed2a357835e4bb49f1e808d20
React-ImageManager: d3da1a8ead9a64c657098508bccad92d8b117063
React-intersectionobservernativemodule: 45d71622e5c9169ee88f43878a3fcad7a0bb3926
React-jserrorhandler: f9e5405b0f1ec09aad48286b8ed93647f068426e
React-jsi: 1fa4798a7b2ad40a2e79d86d0ed2f16a0d66f3aa
React-jsiexecutor: c4832a641fd43beb451bc782dd08f85daaa143d6
React-jsinspector: 6c2123456e5cbd2e18e890fc7c4c20904ab5e115
React-jsinspectorcdp: 178b8ce658f64e1b13f0a69ecac3812e30dbe560
React-jsinspectornetwork: 31076e7a183121c8b8e4098d43a18a21cb1f807b
React-jsinspectortracing: b5809b947d0f1b3fa5029428c98072982fa7abab
React-jsitooling: ec0ad10664b6a943121f5b5b009927453b19b953
React-jsitracing: 65bd1ce61ba8fc3bbf90fe005d417472275a6cd4
React-jsinspector: 1b49f3aac4f060e489c1452c09afe3cec5314582
React-jsinspectorcdp: c65a4dfbdcc3413d37b903f5dc5818e750b9b1f8
React-jsinspectornetwork: 5a0105e934a2562668d4e19cc56067f0bb686964
React-jsinspectortracing: f653776f668b71754cca526a54d207b1a862934e
React-jsitooling: 03241575600b358ceefca044dda34f072ef17dde
React-jsitracing: 002f73ec7b5d10ccf2e5b037d17034cbf43e4739
React-logger: 64d31a75111596bd023ae653c0eabf32be3c9302
React-Mapbuffer: 7055b634a07b9f9e84ee5660ef52cf42658174b7
React-microtasksnativemodule: 0154a544879e6afeadef9525b0cb17cacf4a93bd
react-native-safe-area-context: 53f796cb6c814661bbe99fbdfd0585d07b996cdd
react-native-segmented-control: 44d14c6899ee12de3384517f4fa1cf4a66ae105c
React-Mapbuffer: c0e92c53d210fae402d8ec4946d6b8fdaceabc4d
React-microtasksnativemodule: a9943695086f7483725984466195a87d4f8b9fc6
react-native-safe-area-context: 3f031fa5a6c36a3731f6fa2202bfa8f411850c6b
React-NativeModulesApple: 943be0fedffc361db7c2ea7b1e54b8d53c6ab178
React-networking: da2682b36bf57ed5428ef3f06824d8b30f617202
React-networking: 236b09b7ba6468163fdfcc4209c04f0081198ba6
React-oscompat: f3eb52b3be9b08bf8ca8ba0c616fd9905f4c7391
React-perflogger: 72d6cde25962a72b6d82545ec08c931b972a4d05
React-performancecdpmetrics: 962d5ca8fa55505823205175a831cda0623b2ab9
React-performancetimeline: 517eb467150b4979379391548b71ce53cd4466f3
React-performancecdpmetrics: a940913a23567c04da5f65bb0cea1698e6f208f5
React-performancetimeline: 940c2dbffc74294d55dad59c85405e50e6dd7a0e
React-RCTActionSheet: a8bff6e75c7a18f653297fb14571043ae79431f6
React-RCTAnimation: ab5556952f003338d4d86ee9eda2c26aba3cce95
React-RCTAppDelegate: 75f34302bb80c076d97a19642400d5d2d940023f
React-RCTBlob: c4fb179f4d1076cc63a5918c41d766533b0f2147
React-RCTFabric: 50214f12555bcc510b2b1c4dcea803add50a6a78
React-RCTFBReactNativeSpec: 7ee95f43e325c85bec0856d9ec9541e682fd705e
React-RCTFabric: e97003ae212ac44f29ec153680eff51be082c44e
React-RCTFBReactNativeSpec: 4b75ddab18859a28cc51305a6bf07b29a0cc6934
React-RCTImage: 61cd308df71c9966b3bb847df1bc1415eed07121
React-RCTLinking: 6d5ce1137762668fcf1f298e17485bd04129e6d3
React-RCTNetwork: 404dc3ab815ec5f4eb69770b333980adf36a3fa4
React-RCTRuntime: 0d6c40687e504ed2c08ceb020c06cbbfabedd3b7
React-RCTRuntime: c4a4baeb77a6b8962418b5e8922358e36e1fa569
React-RCTSettings: b8b43aa0b6f0fafcd828c8888fb10e82ad0f5145
React-RCTText: a583a49fc866aa200e492969a2378256bde7e2bb
React-RCTVibration: 3337cff4d1efae05e289cfcf90a70d24d361b1c3
React-rendererconsistency: ff227146777b3733c2f4c601ec68267955447e27
React-renderercss: 811e6190dfd7813a7227b55fedecda40ae300d14
React-rendererdebug: 19340e07e6963e63827ec8261cf38e3fd1577981
React-RuntimeApple: 8fb9a4caa272c0543564906b84c333e1a455b0a1
React-RuntimeCore: b7bedbf160e2221982c8231ecf6d89237a3e76a1
React-runtimeexecutor: dacc8c00d03929a760e98ad40b45cc4ba4c7db15
React-RuntimeHermes: bf7a82a690ecd2436837c8d19070590b83f4b84d
React-runtimescheduler: d890bf0a8b417bcadbb3e6cdd1b5cd03ef5e724e
React-timing: dcef343f98d0548d06b5af7ba9c9a55fd251967f
React-utils: 4297fe617437d27671a924bfcaed667201bd99fe
React-webperformancenativemodule: 0e31939496e1df9e80703b786b7513132e76b3b0
React-rendererconsistency: 2de26e789015165288de3a3f85ff4e004599b1eb
React-renderercss: d52732c1fadd1e3125da72b8688e5c119a17431a
React-rendererdebug: c8c3aea57ef3a8e95ec87c80b36b1d8d2cd945b1
React-RuntimeApple: 76e8f12679c49fb2622bf35963306ec8688febcf
React-RuntimeCore: 09b6f2c5dd2ff5c11ca8422efabf6d6af3b35c99
React-runtimeexecutor: 65accbd7eb5c7ce8564d81da5d400517d30251d2
React-RuntimeHermes: ca3c65f70a40054af4ed1db465d6efa12d568e79
React-runtimescheduler: 8b52165fdec4cba1a332ba1ee81db28d344703b8
React-timing: f517ce908fc72a690715f608b3e09a2aa2d18e2b
React-utils: 8bd08b450c648ab1b13af550c35347a4378e023b
React-webperformancenativemodule: 9cfb5cb64a0f9a56291f4ae5f3aaaa4bfb7fbbcb
ReactAppDependencyProvider: 23e2bca1661f8781e55fcc05a151fc1df97bc1fb
ReactCodegen: c049d7e966ed24be56d8e21cb1b8880316975e76
ReactCodegen: 37ba52e4d686f08b6f12a9ce4f2777b218085a5d
ReactCommon: 89ccc6cb100ca5a0303b46483037ef8f3e06e2e0
ReactNativeDependencies: 1a7e3c3ffa57533d8118dd9bc01790ffa9e02a3b
RNScreens: dd61bc3a3e6f6901ad833efa411917d44827cf51
Yoga: 21f482cbc18b56cdc477cd3a0c5b8c2c83ac27ce
ReactNativeDependencies: a482285e53605a6a6f4d3c4221906a65051d584b
RNScreens: e91463674394a1969b4688eb5db419d7045fce2d
Yoga: 9173d03d8af1d56e8d0ef56c6433c4322013ea1f

PODFILE CHECKSUM: cc2ab22c5169410d8739c73db2747f1617e7eaf0
PODFILE CHECKSUM: a2fa71198dd9754133de56bffe8682b8c5066b04

COCOAPODS: 1.15.2
117 changes: 92 additions & 25 deletions example/src/getTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import {
type OptionalWrapper,
WeirdNumbersEnum,
CustomString,
Base,
// HybridBase,
type Base,
HybridPlatformObject,
HybridChild,
} from 'react-native-nitro-test'
Expand All @@ -24,7 +25,12 @@ import {
getHybridObjectConstructor,
NitroModules,
} from 'react-native-nitro-modules'
import { HybridSomeExternalObject } from 'react-native-nitro-test-external'
import {
HybridSomeExternalObject,
type Base as ExternalBase,
HybridBlaBla,
HybridBase as ExternalHybridBase,
} from 'react-native-nitro-test-external'

type TestResult =
| {
Expand All @@ -51,6 +57,9 @@ export interface GetTestsOptions {
backend?: AssertionBackend
}

const TEST_MODULE_NAME = 'NitroTest'
const TEST_EXTERNAL_MODULE_NAME = 'NitroTestExternal'

const TEST_PERSON: Person = {
age: 24,
name: 'Marc',
Expand Down Expand Up @@ -139,7 +148,7 @@ const DATE_PLUS_1H = (() => {
return new Date(current + oneHourInMilliseconds)
})()

const BASE = NitroModules.createHybridObject<Base>('Base')
const BASE = NitroModules.createHybridObject<Base>(`${TEST_MODULE_NAME}Base`)

let lotsOfCallbacks: ((num: number) => void)[] = []

Expand Down Expand Up @@ -1993,15 +2002,19 @@ export function getTests(
.toContain('childValue')
.toContain('baseValue')
),
createTest('createBase() has name "Base"', () =>
it(() => testObject.createBase().name)
.didNotThrow()
.equals('Base')
createTest(
`${TEST_MODULE_NAME} createBase() has name "${TEST_MODULE_NAME}Base"`,
() =>
it(() => testObject.createBase().name)
.didNotThrow()
.equals(`${TEST_MODULE_NAME}Base`)
),
createTest('createChild() has name "Child"', () =>
it(() => testObject.createChild().name)
.didNotThrow()
.equals('Child')
createTest(
`${TEST_MODULE_NAME} createChild() has name "${TEST_MODULE_NAME}Child"`,
() =>
it(() => testObject.createChild().name)
.didNotThrow()
.equals(`${TEST_MODULE_NAME}Child`)
),
createTest('createChild() has overridden toString()', () =>
it(() => testObject.createChild().toString())
Expand All @@ -2013,10 +2026,12 @@ export function getTests(
.didNotThrow()
.equals('HybridChild custom toString() :)')
),
createTest('createBaseActualChild() has name "Child"', () =>
it(() => testObject.createBaseActualChild().name)
.didNotThrow()
.equals('Child')
createTest(
`${TEST_MODULE_NAME} createBaseActualChild() has name "${TEST_MODULE_NAME}Child"`,
() =>
it(() => testObject.createBaseActualChild().name)
.didNotThrow()
.equals(`${TEST_MODULE_NAME}Child`)
),
createTest('createBaseActualChild() works', () =>
it(() => testObject.createBaseActualChild())
Expand Down Expand Up @@ -2149,8 +2164,9 @@ export function getTests(
),
createTest('new T() works', () =>
it(() => {
const HybridTestObjectCpp =
getHybridObjectConstructor<TestObjectCpp>('TestObjectCpp')
const HybridTestObjectCpp = getHybridObjectConstructor<TestObjectCpp>(
`${TEST_MODULE_NAME}TestObjectCpp`
)
const instance = new HybridTestObjectCpp()
return instance
})
Expand All @@ -2159,8 +2175,9 @@ export function getTests(
),
createTest('new T() instanceof works', () =>
it(() => {
const HybridTestObjectCpp =
getHybridObjectConstructor<TestObjectCpp>('TestObjectCpp')
const HybridTestObjectCpp = getHybridObjectConstructor<TestObjectCpp>(
`${TEST_MODULE_NAME}TestObjectCpp`
)
const instance = new HybridTestObjectCpp()
return instance instanceof HybridTestObjectCpp
})
Expand All @@ -2169,17 +2186,19 @@ export function getTests(
),
createTest('{} instanceof works', () =>
it(() => {
const HybridTestObjectCpp =
getHybridObjectConstructor<TestObjectCpp>('TestObjectCpp')
const HybridTestObjectCpp = getHybridObjectConstructor<TestObjectCpp>(
`${TEST_MODULE_NAME}TestObjectCpp`
)
return {} instanceof HybridTestObjectCpp
})
.didNotThrow()
.equals(false)
),
createTest('new T() =/= new T()', () =>
it(() => {
const HybridTestObjectCpp =
getHybridObjectConstructor<TestObjectCpp>('TestObjectCpp')
const HybridTestObjectCpp = getHybridObjectConstructor<TestObjectCpp>(
`${TEST_MODULE_NAME}TestObjectCpp`
)
const a = new HybridTestObjectCpp()
const b = new HybridTestObjectCpp()
return a === b
Expand All @@ -2189,8 +2208,9 @@ export function getTests(
),
createTest('new T() a == a', () =>
it(() => {
const HybridTestObjectCpp =
getHybridObjectConstructor<TestObjectCpp>('TestObjectCpp')
const HybridTestObjectCpp = getHybridObjectConstructor<TestObjectCpp>(
`${TEST_MODULE_NAME}TestObjectCpp`
)
const a = new HybridTestObjectCpp()
// eslint-disable-next-line no-self-compare
return a === a
Expand Down Expand Up @@ -2295,5 +2315,52 @@ export function getTests(
.didNotThrow()
.equals(true)
),
createTest('Create ExternalBase while Base exists', () =>
it(() => {
return NitroModules.createHybridObject<ExternalBase>(
`${TEST_EXTERNAL_MODULE_NAME}Base`
)
})
.didNotThrow()
.didReturn('object')
.toContain('abc')
),
createTest('ExternalBase is not an instance of Base', () =>
it(() => {
const BaseConstructor = getHybridObjectConstructor<Base>(
`${TEST_MODULE_NAME}Base`
)
const ExternalBaseConstructor =
getHybridObjectConstructor<ExternalBase>(
`${TEST_EXTERNAL_MODULE_NAME}Base`
)
const externalInstance = new ExternalBaseConstructor()
return externalInstance instanceof BaseConstructor
})
.didNotThrow()
.equals(false)
),
createTest('ExternalBase =/= Base name', () =>
it(() => {
return ExternalHybridBase.name === BASE.name
})
.didNotThrow()
.equals(false)
),
createTest('ExternalBlaBla.base =/= BASE .toString()', () =>
it(() => {
return HybridBlaBla.base?.toString() === BASE.toString()
})
.didNotThrow()
.equals(false)
),
createTest('External Base HybridObject name contains library prefix', () =>
it(() => {
return ExternalHybridBase.name
})
.didNotThrow()
.didReturn('string')
.toStringContain(TEST_EXTERNAL_MODULE_NAME)
),
]
}
Loading