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 */;
}
}
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 @@ -2025,15 +2034,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 @@ -2045,10 +2058,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 @@ -2181,8 +2196,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 @@ -2191,8 +2207,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 @@ -2201,17 +2218,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 @@ -2221,8 +2240,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 @@ -2327,5 +2347,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)
),
]
}
2 changes: 1 addition & 1 deletion example/src/screens/EvalScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const PRE_CODE = `
const NitroModules = globalThis.NitroModulesProxy;
`.trim()
const DEFAULT_CODE = `
const testObject = NitroModules.createHybridObject('TestObjectCpp')
const testObject = NitroModules.createHybridObject('NitroTestTestObjectCpp')

JSON.stringify(testObject)
`.trim()
Expand Down
18 changes: 18 additions & 0 deletions example/src/screens/ViewScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
RecyclableTestView,
TestView,
} from 'react-native-nitro-test'
import { TestView as ExternalTestView } from 'react-native-nitro-test-external'
import { useIsFocused } from '@react-navigation/native'

const VIEWS_X = 15
Expand Down Expand Up @@ -43,6 +44,23 @@ export function ViewScreenImpl() {
}}
/>
)
} else if (i % 3 === 1) {
return (
<ExternalTestView
key={i}
hybridRef={callback((ref) => {
console.log(`Ref initialized!`)
ref.testMethod()
})}
style={styles.view}
isCyan={i % 2 === 0}
testCallback={callback(() => console.log(`Callback called!`))}
hasBeenCalled={false}
onTouchEnd={() => {
console.log(`Touched View #${i}!`)
}}
/>
)
} else {
return (
<RecyclableTestView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { getAllKnownTypes } from '../../syntax/createType.js'
import {
createFileMetadataString,
isNotDuplicate,
sortIosIncludesWithOwnFirst,
} from '../../syntax/helpers.js'
import type { SourceFile } from '../../syntax/SourceFile.js'
import { getReferencedTypes } from '../../syntax/getReferencedTypes.js'
Expand Down Expand Up @@ -90,7 +91,7 @@ ${forwardDeclarationsHeader.sort().join('\n')}
${forwardDeclaredSwiftTypes.sort().join('\n')}

// Include C++ defined types
${includesHeader.sort().join('\n')}
${sortIosIncludesWithOwnFirst(includesHeader).join('\n')}

/**
* Contains specialized versions of C++ templated types so they can be accessed from Swift,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { getHybridObjectName } from '../../syntax/getHybridObjectName.js'
import {
createFileMetadataString,
isNotDuplicate,
sortIosIncludesWithOwnFirst,
} from '../../syntax/helpers.js'
import type { SourceFile } from '../../syntax/SourceFile.js'
import { getTypeAs } from '../../syntax/types/getTypeAs.js'
Expand Down Expand Up @@ -53,7 +54,7 @@ ${createFileMetadataString(filename, '///')}
${forwardDeclarations.sort().join('\n')}

// Include C++ defined types
${includes.sort().join('\n')}
${sortIosIncludesWithOwnFirst(includes).join('\n')}

// C++ helpers for Swift
#include "${moduleName}-Swift-Cxx-Bridge.hpp"
Expand Down
Loading