@itwin/core-backend 5.9.0-dev.3 → 5.9.0-dev.5
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.
- package/lib/cjs/BriefcaseManager.js +3 -3
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +37 -7
- package/lib/cjs/Category.d.ts.map +1 -1
- package/lib/cjs/Category.js +33 -42
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +5 -2
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.d.ts +29 -0
- package/lib/cjs/ChannelControl.d.ts.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +32 -3
- package/lib/cjs/CodeSpecs.d.ts.map +1 -1
- package/lib/cjs/CodeSpecs.js +48 -20
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +18 -3
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +10 -21
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts +262 -0
- package/lib/cjs/EditTxn.d.ts.map +1 -0
- package/lib/cjs/EditTxn.js +548 -0
- package/lib/cjs/EditTxn.js.map +1 -0
- package/lib/cjs/Element.d.ts +74 -5
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +63 -75
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +10 -0
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +21 -12
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +56 -3
- package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
- package/lib/cjs/ElementTreeWalker.js +53 -40
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/ExternalSource.d.ts +11 -2
- package/lib/cjs/ExternalSource.d.ts.map +1 -1
- package/lib/cjs/ExternalSource.js +10 -8
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +66 -22
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +174 -288
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +22 -0
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +9 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IpcHost.js +2 -2
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +47 -7
- package/lib/cjs/LineStyle.d.ts.map +1 -1
- package/lib/cjs/LineStyle.js +38 -33
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/Material.d.ts +8 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +6 -12
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +59 -20
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +38 -80
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +72 -7
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +39 -21
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/SchemaSync.js +4 -4
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +9 -0
- package/lib/cjs/SheetIndex.d.ts.map +1 -1
- package/lib/cjs/SheetIndex.js +38 -35
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/StashManager.js +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.d.ts +6 -0
- package/lib/cjs/Texture.d.ts.map +1 -1
- package/lib/cjs/Texture.js +6 -14
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +5 -5
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +23 -7
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +21 -1
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +27 -66
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +1 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +1 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
- package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js +8 -13
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +11 -4
- package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
- package/lib/cjs/domains/GenericElements.js +13 -24
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
- package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +5 -3
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +4 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +5 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts +3 -2
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +7 -6
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/BriefcaseManager.js +3 -3
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/Category.d.ts +37 -7
- package/lib/esm/Category.d.ts.map +1 -1
- package/lib/esm/Category.js +33 -42
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +5 -2
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.d.ts +29 -0
- package/lib/esm/ChannelControl.d.ts.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +32 -3
- package/lib/esm/CodeSpecs.d.ts.map +1 -1
- package/lib/esm/CodeSpecs.js +49 -21
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +18 -3
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +10 -21
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/EditTxn.d.ts +262 -0
- package/lib/esm/EditTxn.d.ts.map +1 -0
- package/lib/esm/EditTxn.js +543 -0
- package/lib/esm/EditTxn.js.map +1 -0
- package/lib/esm/Element.d.ts +74 -5
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +64 -76
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +10 -0
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +22 -13
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +56 -3
- package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
- package/lib/esm/ElementTreeWalker.js +53 -40
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/ExternalSource.d.ts +11 -2
- package/lib/esm/ExternalSource.d.ts.map +1 -1
- package/lib/esm/ExternalSource.js +10 -8
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +66 -22
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +176 -290
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +22 -0
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +9 -0
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IpcHost.js +3 -3
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +47 -7
- package/lib/esm/LineStyle.d.ts.map +1 -1
- package/lib/esm/LineStyle.js +38 -33
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/Material.d.ts +8 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +6 -12
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +59 -20
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +39 -81
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/Relationship.d.ts +72 -7
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +40 -22
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/SchemaSync.js +5 -5
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SheetIndex.d.ts +9 -0
- package/lib/esm/SheetIndex.d.ts.map +1 -1
- package/lib/esm/SheetIndex.js +38 -35
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/StashManager.js +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.d.ts +6 -0
- package/lib/esm/Texture.d.ts.map +1 -1
- package/lib/esm/Texture.js +6 -14
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +5 -5
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +23 -7
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +21 -1
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +27 -66
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +6 -5
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/core-backend.d.ts +1 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +1 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts +6 -2
- package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/esm/domains/FunctionalElements.js +8 -13
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/GenericElements.d.ts +11 -4
- package/lib/esm/domains/GenericElements.d.ts.map +1 -1
- package/lib/esm/domains/GenericElements.js +13 -24
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
- package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +6 -4
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +4 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +4 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts +3 -2
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +7 -6
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.d.ts +20 -19
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +111 -96
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js +56 -2
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +23 -23
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +466 -449
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js +2 -2
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js +27 -18
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js +11 -7
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.d.ts +8 -0
- package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
- package/lib/esm/test/TestEditTxn.js +34 -0
- package/lib/esm/test/TestEditTxn.js.map +1 -0
- package/lib/esm/test/TestUtils.d.ts +1 -0
- package/lib/esm/test/TestUtils.d.ts.map +1 -1
- package/lib/esm/test/TestUtils.js +8 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +82 -90
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +5 -3
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js +63 -3
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +3 -2
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +2 -2
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +0 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +17 -14
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +68 -60
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +37 -38
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js +2 -2
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js +40 -38
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +10 -9
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js +2 -2
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +164 -125
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +313 -247
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +322 -247
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js +31 -31
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +419 -344
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.d.ts +1 -0
- package/lib/esm/test/index.d.ts.map +1 -1
- package/lib/esm/test/index.js +1 -0
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +23 -22
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js +114 -94
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +2 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +207 -192
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
- package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +114 -85
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js +4 -3
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
- package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/EditTxn.test.js +219 -0
- package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
- package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +26 -20
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js +31 -25
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
- package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +184 -142
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
- package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js +21 -19
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +7 -4
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js +7 -6
- package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js +5 -4
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js +5 -3
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js +35 -31
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +700 -653
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +25 -23
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassRegistry.test.js","sourceRoot":"","sources":["../../../../src/test/schema/ClassRegistry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as sinon from \"sinon\";\nimport * as path from \"path\";\nimport {\n BisCodeSpec, Code, ConcreteEntityTypes, DefinitionElementProps, ECJsNames, ElementAspectProps, ElementProps, EntityReferenceSet, ModelProps,\n PropertyMetaData,\n RelatedElement, RelatedElementProps, RelationshipProps, SchemaState,\n} from \"@itwin/core-common\";\nimport {\n DefinitionElement, DefinitionModel, ElementRefersToElements, Entity, EntityReferences, IModelDb, IModelJsFs, Model, RepositoryLink,\n Schema, SnapshotDb, SpatialViewDefinition, StandaloneDb, UrlLink, ViewDefinition3d,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { Element } from \"../../Element\";\nimport { Schemas } from \"../../Schema\";\nimport { ClassRegistry } from \"../../ClassRegistry\";\nimport { OpenMode } from \"@itwin/core-bentley\";\nimport { EntityClass, NavigationProperty, PrimitiveProperty, SchemaItemKey, SchemaKey } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Class Registry\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"ClassRegistryTest.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n assert.exists(imodel);\n });\n\n after(() => {\n imodel?.close();\n });\n\n it(\"should verify the Entity metadata of known element subclasses\", async () => {\n const code1 = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1.dgn\" });\n const el = imodel.elements.getElement(code1);\n assert.exists(el);\n if (el) {\n const metaData = await el.getMetaData();\n assert.exists(metaData);\n\n assert.equal(metaData.fullName, el.classFullName.replace(\":\", \".\"));\n // I happen to know that this is a BisCore:RepositoryLink\n assert.equal(metaData.fullName, RepositoryLink.classFullName.replace(\":\", \".\"));\n // Check the metadata on the class itself\n assert.isDefined(metaData.baseClass);\n assert.equal(metaData.baseClass?.fullName, UrlLink.classFullName.replace(\":\", \".\"));\n assert.isTrue(metaData.customAttributes?.has(\"BisCore.ClassHasHandler\"));\n // Check the metadata on the one property that RepositoryLink defines, RepositoryGuid\n const repositoryGuidProperty = await metaData.getProperty(\"repositoryGuid\") as PrimitiveProperty;\n assert.isDefined(repositoryGuidProperty);\n assert.equal(repositoryGuidProperty.extendedTypeName, \"BeGuid\");\n assert.isTrue(repositoryGuidProperty.customAttributes?.has(\"CoreCustomAttributes.HiddenProperty\"));\n }\n const el2 = imodel.elements.getElement(\"0x34\");\n assert.exists(el2);\n if (el2) {\n const metaData = await el2.getMetaData();\n assert.exists(metaData);\n\n assert.equal(metaData.fullName, el2.classFullName.replace(\":\", \".\"));\n // I happen to know that this is a BisCore.SpatialViewDefinition\n assert.equal(metaData.fullName, SpatialViewDefinition.classFullName.replace(\":\", \".\"));\n assert.isDefined(metaData.baseClass);\n assert.equal(metaData.baseClass?.fullName, ViewDefinition3d.classFullName.replace(\":\", \".\"));\n const modelSelectorProperty = await metaData.getProperty(\"modelSelector\") as NavigationProperty;\n assert.isDefined(modelSelectorProperty);\n assert.equal(modelSelectorProperty.relationshipClass.fullName, \"BisCore.SpatialViewDefinitionUsesModelSelector\");\n }\n });\n\n it(\"should verify Entity metadata with both base class and mixin properties\", async () => {\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"TestDomain\", \"TestDomainClass\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n assert.equal(testDomainClass?.baseClass?.fullName, DefinitionElement.classFullName.replace(\":\", \".\"));\n\n assert.isDefined(testDomainClass?.mixins);\n assert.equal(testDomainClass?.mixins.length, 1);\n assert.equal(testDomainClass?.mixins[0].fullName, \"TestDomain.IMixin\");\n\n // Verify that the forEach method which is called when constructing an entity\n // is picking up all expected properties.\n const testData: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n IModelDb.forEachMetaData(imodel, \"TestDomain:TestDomainClass\", true, (propName: string, _property: PropertyMetaData) => {\n testData.push(ECJsNames.toJsName(propName));\n }, false);\n\n const expectedString = testData.find((testString: string) => {\n return testString === \"testMixinProperty\";\n });\n\n assert.isDefined(expectedString);\n });\n});\n\ndescribe(\"Class Registry - getRootMetaData\", () => {\n let imodel: StandaloneDb;\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GetRootMetaData.bim\");\n IModelJsFs.copySync(seedFileName, testFileName);\n\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\n\n imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n assert.exists(imodel);\n await imodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.03\" alias=\"CoreCA\"/>\n\n <ECEntityClass typeName=\"TestBase\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestDerived\">\n <BaseClass>TestBase</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForAspectsBase\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForAspectsDerived\">\n <BaseClass>ITestMixinForAspectsBase</BaseClass>\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForElements\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:Element</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestMixedInAndDerived\">\n <BaseClass>TestBase</BaseClass>\n <BaseClass>ITestMixinForElements</BaseClass>\n </ECEntityClass>\n\n </ECSchema>\n `,\n ]); // will throw an exception if import fails\n });\n\n after(() => {\n imodel?.close();\n });\n\n it(\"should get the root metadata\", async () => {\n for (const [testClass, expectedRoot] of [\n [\"TestSchema1.TestBase\", \"BisCore:Element\"],\n [\"TestSchema1.TestDerived\", \"BisCore:Element\"],\n [\"TestSchema1.ITestMixinForAspectsBase\", \"BisCore:ElementAspect\"],\n [\"TestSchema1.ITestMixinForAspectsDerived\", \"BisCore:ElementAspect\"],\n [\"TestSchema1.ITestMixinForElements\", \"BisCore:Element\"],\n [\"TestSchema1.TestMixedInAndDerived\", \"BisCore:Element\"],\n ] as const) {\n const rootMetaData = ClassRegistry.getRootEntity(imodel, testClass);\n expect(rootMetaData.replace(\".\", \":\")).to.equal(expectedRoot);\n }\n });\n});\n\ndescribe(\"Class Registry - generated classes\", () => {\n let imodel: SnapshotDb;\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"TestGeneratedClasses.ecschema.xml\");\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GeneratedClasses.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n assert.exists(imodel);\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n });\n\n after(() => {\n imodel?.close();\n });\n\n interface TestModelWithNavPropProps extends ModelProps {\n elemNavProp: RelatedElementProps;\n aspectNavProp: RelatedElementProps;\n relNavProp: RelatedElementProps;\n }\n\n interface TestEntityProps extends DefinitionElementProps {\n prop: string;\n }\n\n interface LinkTableRelWithNavPropProps extends RelationshipProps {\n elemNavProp: RelatedElementProps;\n modelNavProp: RelatedElementProps;\n aspectNavProp: RelatedElementProps;\n }\n\n interface TestElementWithNavPropProps extends DefinitionElementProps {\n navProp: RelatedElementProps;\n }\n\n interface DerivedWithNavPropProps extends TestElementWithNavPropProps {\n derivedNavProp: RelatedElementProps;\n }\n\n interface TestAspectWithNavProp extends ElementAspectProps {\n navProp: RelatedElement;\n }\n\n class TestGeneratedClasses extends Schema {\n public static override get schemaName(): string { return \"TestGeneratedClasses\"; }\n public static get classes() {\n return [TestModelWithNavProp, TestElementWithNavProp, LinkTableRelWithNavProp, DerivedWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n for (const class_ of this.classes) {\n ClassRegistry.register(class_, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n class TestElementWithNavProp extends DefinitionElement {\n public static override get className() { return \"TestElementWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public navProp: RelatedElement;\n public constructor(props: TestElementWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.navProp = new RelatedElement(props.navProp);\n }\n }\n\n class TestModelWithNavProp extends DefinitionModel {\n public static override get className() { return \"TestModelWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public elemNavProp: RelatedElement;\n public aspectNavProp: RelatedElement;\n public relNavProp: RelatedElement;\n public constructor(props: TestModelWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.elemNavProp = new RelatedElement(props.elemNavProp);\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\n this.relNavProp = new RelatedElement(props.relNavProp);\n }\n }\n\n class LinkTableRelWithNavProp extends ElementRefersToElements {\n public static override get className() { return \"LinkTableRelWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public elemNavProp: RelatedElement;\n public aspectNavProp: RelatedElement;\n public modelNavProp: RelatedElement;\n public constructor(props: LinkTableRelWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.elemNavProp = new RelatedElement(props.elemNavProp);\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\n this.modelNavProp = new RelatedElement(props.modelNavProp);\n }\n }\n\n class DerivedWithNavProp extends TestElementWithNavProp {\n public static override get className() { return \"DerivedWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public derivedNavProp: RelatedElement;\n public constructor(props: DerivedWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.derivedNavProp = new RelatedElement(props.derivedNavProp);\n }\n }\n\n class Derived2 extends DerivedWithNavProp {\n public static override get className() { return \"Derived2\"; }\n }\n class Derived3 extends Derived2 {\n public static override get className() { return \"Derived3\"; }\n }\n class Derived4 extends Derived3 {\n public static override get className() { return \"Derived4\"; }\n }\n class Derived5 extends Derived4 {\n public static override get className() { return \"Derived5\"; }\n }\n class Derived6 extends Derived5 {\n public static override get className() { return \"Derived6\"; }\n }\n\n class NonGeneratedElement extends DefinitionElement {\n public static override get className() { return \"NonGeneratedElement\"; }\n }\n\n it(\"Should provide correct schemas and full-names on generated classes\", async () => {\n await imodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"CustomA\" alias=\"custA\" version=\"1.0.0\"\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\n <ECEntityClass typeName=\"NonGeneratedElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"GeneratedElement\">\n <BaseClass>NonGeneratedElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ElementC\">\n <BaseClass>GeneratedElement</BaseClass>\n </ECEntityClass>\n </ECSchema>\n `,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"CustomB\" alias=\"custB\" version=\"1.0.0\"\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\n <ECSchemaReference name=\"CustomA\" version=\"01.00\" alias=\"custA\"/>\n <ECEntityClass typeName=\"DummyElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ErrorElement\">\n <BaseClass>custA:ElementC</BaseClass>\n </ECEntityClass>\n </ECSchema>\n `,\n ]);\n\n class CustomASchema extends Schema {\n public static override get schemaName(): string { return \"CustomA\"; }\n public static get classes(): typeof Entity[] {\n return [NonGeneratedElement];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n for (const ecClass of this.classes) {\n ClassRegistry.register(ecClass, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n CustomASchema.registerSchema();\n\n class DummyElement extends DefinitionElement {\n public static override get className() { return \"DummyElement\"; }\n }\n\n class CustomBSchema extends Schema {\n public static override get schemaName(): string { return \"CustomB\"; }\n public static get classes() {\n return [DummyElement];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n for (const ecClass of this.classes) {\n ClassRegistry.register(ecClass, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n CustomBSchema.registerSchema();\n\n const nonGeneratedElement = imodel.getJsClass(\"CustomA:NonGeneratedElement\");\n assert.equal(nonGeneratedElement.classFullName, \"CustomA:NonGeneratedElement\");\n const generatedElement = imodel.getJsClass(\"CustomA:GeneratedElement\");\n assert.equal(generatedElement.classFullName, \"CustomA:GeneratedElement\");\n const elementC = imodel.getJsClass(\"CustomA:ElementC\");\n assert.equal(elementC.classFullName, \"CustomA:ElementC\");\n const dummyElement = imodel.getJsClass(\"CustomB:DummyElement\");\n assert.equal(dummyElement.classFullName, \"CustomB:DummyElement\");\n\n //This is the class that had the wrong schema\n const errorElement = imodel.getJsClass(\"CustomB:ErrorElement\");\n assert.equal(errorElement.classFullName, \"CustomB:ErrorElement\");\n assert.isTrue(errorElement.schemaItemKey.matches(new SchemaItemKey(\"ErrorElement\", new SchemaKey(\"CustomB\", 1, 0, 0))));\n assert.equal(errorElement.className, \"ErrorElement\");\n assert.equal(errorElement.schema.schemaName, \"CustomB\");\n\n // Create an instance of ErrorElement\n const errorElementInstance = Entity.instantiate(errorElement, { classFullName: errorElement.classFullName }, imodel);\n assert.exists(errorElementInstance);\n assert.instanceOf(errorElementInstance, errorElement);\n assert.instanceOf(errorElementInstance, Entity);\n assert.equal(errorElementInstance.className, \"ErrorElement\");\n assert.equal(errorElementInstance.schemaName, \"CustomB\");\n const metadata = await errorElementInstance.getMetaData();\n assert.exists(metadata);\n assert.equal(metadata.fullName, \"CustomB.ErrorElement\");\n });\n\n // if a single inherited class is not generated, the entire hierarchy is considered not-generated\n it(\"should only generate automatic collectReferenceIds implementations for generated classes\", async () => {\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\n constructor(props: TestElementWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const testEntityId = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\n navProp: {\n id: testEntityId,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n } as TestElementWithNavPropProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n assert.isDefined(GeneratedTestElementWithNavProp.prototype[\"collectReferenceIds\"]);\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\n ]);\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\n assert.isTrue(GeneratedTestAspectWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\n });\n\n it(\"should not override collectReferenceIds for BisCore schema classes\", async () => {\n // AnnotationFrameStyle is an example of an unregistered bis class without an implementation of collectReferenceIds\n assert.isTrue(imodel.getJsClass(\"BisCore:AnnotationFrameStyle\").prototype.hasOwnProperty(\"collectReferenceIds\"));\n });\n\n it(\"should get references from its bis superclass\", async () => {\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\n constructor(props: ElementProps) {\n super(props, imodel);\n }\n }\n\n const testEntityId = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\n navProp: new RelatedElement({\n id: testEntityId,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n }),\n model: IModelDb.dictionaryId,\n code: new Code({\n scope: IModelDb.rootSubjectId,\n spec: imodel.codeSpecs.getByName(BisCodeSpec.spatialCategory).id,\n value: \"\",\n }),\n parent: new RelatedElement({\n // since we don't actually insert this element in this test, using an arbitrary id string\n id: \"0x0000ffff\",\n relClassName: \"BisCore:ElementOwnsChildElements\",\n }),\n } as TestElementWithNavPropProps);\n\n // super class here is Element so we should get the code.scope, model and parent as references\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n\n const modelTestEntityIds = new Array(2).fill(undefined).map((_, index) => imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: `model-value-${index}`,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\n\n const aspectWithNavPropId = imodel.elements.insertAspect({\n classFullName: GeneratedTestAspectWithNavProp.classFullName,\n navProp: { id: modelTestEntityIds[0], relClassName: \"TestGeneratedClasses:NonElemRel\" },\n element: { id: modelTestEntityIds[1] },\n } as TestAspectWithNavProp);\n\n class GeneratedTestModelWithNavProp extends imodel.getJsClass<typeof Model>(\"TestGeneratedClasses:TestModelWithNavProp\") {\n constructor(props: TestModelWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const modelWithNavProp = new GeneratedTestModelWithNavProp({\n classFullName: GeneratedTestModelWithNavProp.classFullName,\n modeledElement: { id: modelTestEntityIds[0] },\n parentModel: IModelDb.dictionaryId,\n elemNavProp: { id: modelTestEntityIds[1], relClassName: \"TestGeneratedClasses:ModelToElemNavRel\" },\n aspectNavProp: { id: aspectWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToAspectNavRel\" },\n // removed due to a bug\n // relNavProp: { id: relWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToRelNavRel\" },\n } as TestModelWithNavPropProps);\n\n const modelWithNavPropId = modelWithNavProp.insert();\n\n expect(\n [...modelWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(modelTestEntityIds[1], ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(IModelDb.dictionaryId, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(modelTestEntityIds[0], ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\n // ignoring this one, because there seems to be a bug when specifying a relationship instance as a nav prop\n // EntityReferences.fromEntityType(relWithNavPropId, ConcreteEntityTypes.Relationship),\n ].filter((x) => x !== undefined));\n\n const relTestEntityIds = new Array(3).fill(undefined).map((_, index) => imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: `rel-value-${index}`,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedLinkTableRelWithNavProp = imodel.getJsClass<typeof LinkTableRelWithNavProp>(\"TestGeneratedClasses:LinkTableRelWithNavProp\");\n\n const relWithNavProp = new GeneratedLinkTableRelWithNavProp({\n classFullName: GeneratedLinkTableRelWithNavProp.classFullName,\n sourceId: relTestEntityIds[0],\n targetId: relTestEntityIds[1],\n elemNavProp: {\n id: relTestEntityIds[2],\n relClassName: \"TestGeneratedClasses:LinkTableRelToElemNavRel\",\n },\n modelNavProp: {\n id: modelWithNavPropId,\n relClassName: \"TestGeneratedClasses:LinkTableRelToModelNavRel\",\n },\n aspectNavProp: {\n id: aspectWithNavPropId,\n relClassName: \"TestGeneratedClasses:LinkTableRelToAspectNavRel\",\n },\n }, imodel);\n\n const _relWithNavPropId = relWithNavProp.insert();\n\n expect(\n [...relWithNavProp.getReferenceIds()],\n ).to.have.members([\n ...relTestEntityIds.map((id) => EntityReferences.fromEntityType(id, ConcreteEntityTypes.Element)),\n EntityReferences.fromEntityType(modelWithNavPropId, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\n ]);\n });\n\n it(\"should not override custom registered schema class implementations of collectReferenceIds\", async () => {\n const testImplReferenceId = \"TEST-INVALID-ID\";\n class MyTestElementWithNavProp extends TestElementWithNavProp {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(testImplReferenceId);\n }\n }\n class MyTestGeneratedClasses extends TestGeneratedClasses {\n public static override get classes() {\n return [MyTestElementWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\n }\n }\n imodel.jsClassMap.clear();\n MyTestGeneratedClasses.registerSchema();\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof MyTestElementWithNavProp>(TestElementWithNavProp.classFullName);\n\n const testElementWithNavPropCollectReferencesSpy = sinon.spy(ActualTestElementWithNavProp.prototype, \"collectReferenceIds\");\n\n class ActualDerivedWithNavProp extends imodel.getJsClass<typeof Element>(DerivedWithNavProp.classFullName) {\n constructor(props: DerivedWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const testEntity1Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-1\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const testEntity2Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-2\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const elemWithNavProp = new ActualTestElementWithNavProp({\n classFullName: TestElementWithNavProp.classFullName,\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n } as TestElementWithNavPropProps, imodel);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n assert.isDefined(ActualTestElementWithNavProp.prototype.collectReferenceIds);\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\n testElementWithNavPropCollectReferencesSpy.resetHistory();\n\n const derivedElemWithNavProp = new ActualDerivedWithNavProp({\n classFullName: DerivedWithNavProp.classFullName,\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n derivedNavProp: {\n id: testEntity2Id,\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\n },\n } as DerivedWithNavPropProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n assert.isDefined(ActualDerivedWithNavProp.prototype[\"collectReferenceIds\"]);\n // This demonstrates that if a non-generated class has a registered non-biscore base, it will not get a generated impl,\n expect(\n [...derivedElemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n // explicitly check we called the super function\n // (we already know its implementation was called, because testImplReferenceId is in the derived call's result)\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\n\n sinon.restore();\n MyTestGeneratedClasses.unregisterSchema();\n });\n\n it(\"should work along a complex chain of overrides\", async () => {\n class MyDerived2 extends Derived2 {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(\"derived-2\");\n }\n }\n class MyDerived4 extends Derived4 {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(\"derived-4\");\n }\n }\n class MyTestGeneratedClasses extends TestGeneratedClasses {\n public static override get classes() {\n // leaving Derived3,5,6 generated\n return [MyDerived2, MyDerived4];\n }\n }\n imodel.jsClassMap.clear();\n MyTestGeneratedClasses.registerSchema();\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\");\n const ActualDerivedWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:DerivedWithNavProp\");\n const ActualDerived2 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived2\");\n const ActualDerived3 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived3\");\n const ActualDerived4 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived4\");\n const ActualDerived5 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived5\");\n const ActualDerived6 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived6\");\n\n expect(ActualTestElementWithNavProp.isGeneratedClass).to.be.true;\n expect(ActualDerivedWithNavProp.isGeneratedClass).to.be.true;\n expect(ActualDerived2.isGeneratedClass).to.be.false;\n expect(ActualDerived3.isGeneratedClass).to.be.true;\n expect(ActualDerived4.isGeneratedClass).to.be.false;\n expect(ActualDerived5.isGeneratedClass).to.be.true;\n expect(ActualDerived6.isGeneratedClass).to.be.true;\n\n assert.isTrue(ActualTestElementWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\")); // should have automatic impl\n assert.isTrue(ActualDerivedWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\n assert.isTrue(ActualDerived2.prototype.hasOwnProperty(\"collectReferenceIds\")); // non-generated; manually implements so has method\n assert.isFalse(ActualDerived3.prototype.hasOwnProperty(\"collectReferenceIds\")); // base is non-generated so it shouldn't get the automatic impl\n assert.isTrue(ActualDerived4.prototype.hasOwnProperty(\"collectReferenceIds\")); // manually implements so it should have the method\n assert.isFalse(ActualDerived5.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\n assert.isFalse(ActualDerived6.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\n\n const testEntity1Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:Derived6\",\n prop: \"sample-value-1\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const testEntity2Id = imodel.elements.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-2\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps);\n\n const derived6Id = imodel.elements.insertElement({\n classFullName: Derived6.classFullName,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n derivedNavProp: {\n id: testEntity2Id,\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\n },\n } as DerivedWithNavPropProps);\n\n const derived6 = imodel.elements.getElement(derived6Id);\n\n /** it is not possible to make a spy of an already existing spy, so lazy try making one\n * this is necessary since due to prototypes, some \"methods\" we listen to are actually the same\n */\n function spyCollectReferenceIds(cls: typeof Element): sinon.SinonSpy {\n if ((cls.prototype as any).collectReferenceIds.isSinonProxy) {\n return (cls.prototype as any).collectReferenceIds;\n }\n return sinon.spy(cls.prototype, \"collectReferenceIds\" as any);\n }\n\n const elementMethodSpy = spyCollectReferenceIds(Element);\n const testElementWithNavPropSpy = spyCollectReferenceIds(ActualTestElementWithNavProp);\n const derivedWithNavPropSpy = spyCollectReferenceIds(ActualDerivedWithNavProp);\n const derived2Spy = spyCollectReferenceIds(ActualDerived2);\n const derived3Spy = spyCollectReferenceIds(ActualDerived3);\n const derived4Spy = spyCollectReferenceIds(ActualDerived4);\n const derived5Spy = spyCollectReferenceIds(ActualDerived5);\n const derived6Spy = spyCollectReferenceIds(ActualDerived6);\n\n // This demonstrates that if a generated class (Derived6) has a non-generated ancestor, it will not get a generated impl\n // instead it will just call the closest non-generated ancestor (Derived4)\n expect([...derived6.getReferenceIds()]).to.have.members(\n [\n EntityReferences.fromEntityType(derived6.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(derived6.code.scope, ConcreteEntityTypes.Element),\n derived6.parent?.id && EntityReferences.fromEntityType(derived6.parent.id, ConcreteEntityTypes.Element),\n // \"TestGeneratedClasses:Derived4\" is MyDerived4 above, which extends the Derived4 class, which extends up\n // without any custom ancestor implementing collectReferenceIds, so Element.collectReferenceIds is called as the\n // super, and no navigation properties or other custom implementations are called so we only get \"derived-4\"\n EntityReferences.fromEntityType(\"derived-4\", ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined),\n );\n\n expect(elementMethodSpy.called).to.be.true; // this is the `super.collectReferenceIds` call in MyDerived4\n expect(testElementWithNavPropSpy.called).to.be.false;\n expect(derivedWithNavPropSpy.called).to.be.false;\n\n // these are the same (tested below)\n expect(derived2Spy.called).to.be.false;\n expect(derived3Spy.called).to.be.false;\n\n // these are all the same (tested below)\n expect(derived4Spy.called).to.be.true;\n expect(derived5Spy.called).to.be.true;\n expect(derived6Spy.called).to.be.true;\n\n expect(\n new Set(\n [\n Element,\n ActualTestElementWithNavProp,\n ActualDerivedWithNavProp,\n Derived2,\n Derived3, // same as above (so will be removed from set)\n Derived4,\n Derived5, // save as above (so will be removed from set)\n Derived6, // save as above (so will be removed from set)\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\n ),\n ).to.deep.equal(\n new Set(\n [\n Element,\n ActualTestElementWithNavProp,\n ActualDerivedWithNavProp,\n Derived2,\n Derived4,\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\n ),\n );\n\n MyTestGeneratedClasses.unregisterSchema();\n sinon.restore();\n });\n});\n\nclass Base {\n public static staticProperty: string = \"base\";\n public static get sqlName(): string { return `s.${this.staticProperty}`; }\n}\n\nclass Derived extends Base {\n}\n\ndescribe(\"Static Properties\", () => {\n it(\"should be inherited, and the subclass should get its own copy\", async () => {\n assert.equal(Base.staticProperty, \"base\");\n assert.equal(Derived.staticProperty, \"base\"); // Derived inherits Base's staticProperty (via its prototype)\n Derived.staticProperty = \"derived\"; // Derived now gets its own copy of staticProperty\n assert.equal(Base.staticProperty, \"base\"); // Base's staticProperty remains as it was\n assert.equal(Derived.staticProperty, \"derived\"); // Derived's staticProperty is now different\n assert.equal(Base.sqlName, \"s.base\");\n const d = new Derived();\n assert.equal((d.constructor as any).staticProperty, \"derived\"); // Instances of Derived see Derived.staticProperty\n const b = new Base();\n assert.equal((b.constructor as any).staticProperty, \"base\"); // Instances of Base see Base.staticProperty\n });\n\n});\n\ndescribe(\"Global state of ClassRegistry\", () => {\n let imodel1: SnapshotDb;\n let imodel2: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName1 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState1.bim\");\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState2.bim\");\n imodel1 = IModelTestUtils.createSnapshotFromSeed(testFileName1, seedFileName);\n imodel2 = IModelTestUtils.createSnapshotFromSeed(testFileName2, seedFileName);\n assert.exists(imodel1);\n assert.exists(imodel2);\n });\n\n after(() => {\n imodel1?.close();\n imodel2?.close();\n });\n\n it(\"registering a class in different imodels should not affect each other\", async () => {\n await imodel1.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"foo\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"RelatedTestClass\" relationshipName=\"MyRelationship\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"MyRelationship\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"TestClass\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"TestClass\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>\n `,\n ]);\n await imodel2.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"bar\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>\n `,\n ]);\n\n const testClass1 = imodel1.getJsClass(\"TestSchema:TestClass\");\n assert.isFalse(testClass1.hasOwnProperty(\"testPropertyGuard\"));\n (testClass1 as any).testPropertyGuard = true;\n assert.isTrue(testClass1.hasOwnProperty(\"testPropertyGuard\"));\n\n const testClass2 = imodel2.getJsClass(\"TestSchema:TestClass\");\n assert.isFalse(testClass2.hasOwnProperty(\"testPropertyGuard\"));\n });\n\n\n});\n// TODO: add tests on the new model/aspect prefixes\n"]}
|
|
1
|
+
{"version":3,"file":"ClassRegistry.test.js","sourceRoot":"","sources":["../../../../src/test/schema/ClassRegistry.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as sinon from \"sinon\";\nimport * as path from \"path\";\nimport { withEditTxn } from \"../../EditTxn\";\nimport {\n BisCodeSpec, Code, ConcreteEntityTypes, DefinitionElementProps, ECJsNames, ElementAspectProps, ElementProps, EntityReferenceSet, ModelProps,\n PropertyMetaData,\n RelatedElement, RelatedElementProps, RelationshipProps, SchemaState,\n} from \"@itwin/core-common\";\nimport {\n DefinitionElement, DefinitionModel, ElementRefersToElements, Entity, EntityReferences, IModelDb, IModelJsFs, Model, RepositoryLink,\n Schema, SnapshotDb, SpatialViewDefinition, StandaloneDb, UrlLink, ViewDefinition3d,\n} from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { Element } from \"../../Element\";\nimport { Schemas } from \"../../Schema\";\nimport { ClassRegistry } from \"../../ClassRegistry\";\nimport { OpenMode } from \"@itwin/core-bentley\";\nimport { EntityClass, NavigationProperty, PrimitiveProperty, SchemaItemKey, SchemaKey } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Class Registry\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"ClassRegistryTest.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n assert.exists(imodel);\n });\n\n after(() => {\n imodel?.close();\n });\n\n it(\"should verify the Entity metadata of known element subclasses\", async () => {\n const code1 = new Code({ spec: \"0x10\", scope: \"0x11\", value: \"RF1.dgn\" });\n const el = imodel.elements.getElement(code1);\n assert.exists(el);\n if (el) {\n const metaData = await el.getMetaData();\n assert.exists(metaData);\n\n assert.equal(metaData.fullName, el.classFullName.replace(\":\", \".\"));\n // I happen to know that this is a BisCore:RepositoryLink\n assert.equal(metaData.fullName, RepositoryLink.classFullName.replace(\":\", \".\"));\n // Check the metadata on the class itself\n assert.isDefined(metaData.baseClass);\n assert.equal(metaData.baseClass?.fullName, UrlLink.classFullName.replace(\":\", \".\"));\n assert.isTrue(metaData.customAttributes?.has(\"BisCore.ClassHasHandler\"));\n // Check the metadata on the one property that RepositoryLink defines, RepositoryGuid\n const repositoryGuidProperty = await metaData.getProperty(\"repositoryGuid\") as PrimitiveProperty;\n assert.isDefined(repositoryGuidProperty);\n assert.equal(repositoryGuidProperty.extendedTypeName, \"BeGuid\");\n assert.isTrue(repositoryGuidProperty.customAttributes?.has(\"CoreCustomAttributes.HiddenProperty\"));\n }\n const el2 = imodel.elements.getElement(\"0x34\");\n assert.exists(el2);\n if (el2) {\n const metaData = await el2.getMetaData();\n assert.exists(metaData);\n\n assert.equal(metaData.fullName, el2.classFullName.replace(\":\", \".\"));\n // I happen to know that this is a BisCore.SpatialViewDefinition\n assert.equal(metaData.fullName, SpatialViewDefinition.classFullName.replace(\":\", \".\"));\n assert.isDefined(metaData.baseClass);\n assert.equal(metaData.baseClass?.fullName, ViewDefinition3d.classFullName.replace(\":\", \".\"));\n const modelSelectorProperty = await metaData.getProperty(\"modelSelector\") as NavigationProperty;\n assert.isDefined(modelSelectorProperty);\n assert.equal(modelSelectorProperty.relationshipClass.fullName, \"BisCore.SpatialViewDefinitionUsesModelSelector\");\n }\n });\n\n it(\"should verify Entity metadata with both base class and mixin properties\", async () => {\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestDomain.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"TestDomain\", \"TestDomainClass\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n assert.equal(testDomainClass?.baseClass?.fullName, DefinitionElement.classFullName.replace(\":\", \".\"));\n\n assert.isDefined(testDomainClass?.mixins);\n assert.equal(testDomainClass?.mixins.length, 1);\n assert.equal(testDomainClass?.mixins[0].fullName, \"TestDomain.IMixin\");\n\n // Verify that the forEach method which is called when constructing an entity\n // is picking up all expected properties.\n const testData: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n IModelDb.forEachMetaData(imodel, \"TestDomain:TestDomainClass\", true, (propName: string, _property: PropertyMetaData) => {\n testData.push(ECJsNames.toJsName(propName));\n }, false);\n\n const expectedString = testData.find((testString: string) => {\n return testString === \"testMixinProperty\";\n });\n\n assert.isDefined(expectedString);\n });\n});\n\ndescribe(\"Class Registry - getRootMetaData\", () => {\n let imodel: StandaloneDb;\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GetRootMetaData.bim\");\n IModelJsFs.copySync(seedFileName, testFileName);\n\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\n\n imodel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n assert.exists(imodel);\n await imodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"01.00.03\" alias=\"CoreCA\"/>\n\n <ECEntityClass typeName=\"TestBase\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestDerived\">\n <BaseClass>TestBase</BaseClass>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForAspectsBase\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForAspectsDerived\">\n <BaseClass>ITestMixinForAspectsBase</BaseClass>\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:ElementUniqueAspect</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"ITestMixinForElements\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <IsMixin xmlns=\"CoreCustomAttributes.01.00.03\">\n <AppliesToEntityClass>bis:Element</AppliesToEntityClass>\n </IsMixin>\n </ECCustomAttributes>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestMixedInAndDerived\">\n <BaseClass>TestBase</BaseClass>\n <BaseClass>ITestMixinForElements</BaseClass>\n </ECEntityClass>\n\n </ECSchema>\n `,\n ]); // will throw an exception if import fails\n });\n\n after(() => {\n imodel?.close();\n });\n\n it(\"should get the root metadata\", async () => {\n for (const [testClass, expectedRoot] of [\n [\"TestSchema1.TestBase\", \"BisCore:Element\"],\n [\"TestSchema1.TestDerived\", \"BisCore:Element\"],\n [\"TestSchema1.ITestMixinForAspectsBase\", \"BisCore:ElementAspect\"],\n [\"TestSchema1.ITestMixinForAspectsDerived\", \"BisCore:ElementAspect\"],\n [\"TestSchema1.ITestMixinForElements\", \"BisCore:Element\"],\n [\"TestSchema1.TestMixedInAndDerived\", \"BisCore:Element\"],\n ] as const) {\n const rootMetaData = ClassRegistry.getRootEntity(imodel, testClass);\n expect(rootMetaData.replace(\".\", \":\")).to.equal(expectedRoot);\n }\n });\n});\n\ndescribe(\"Class Registry - generated classes\", () => {\n let imodel: SnapshotDb;\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"TestGeneratedClasses.ecschema.xml\");\n\n before(async () => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GeneratedClasses.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, seedFileName);\n assert.exists(imodel);\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n });\n\n after(() => {\n imodel?.close();\n });\n\n interface TestModelWithNavPropProps extends ModelProps {\n elemNavProp: RelatedElementProps;\n aspectNavProp: RelatedElementProps;\n relNavProp: RelatedElementProps;\n }\n\n interface TestEntityProps extends DefinitionElementProps {\n prop: string;\n }\n\n interface LinkTableRelWithNavPropProps extends RelationshipProps {\n elemNavProp: RelatedElementProps;\n modelNavProp: RelatedElementProps;\n aspectNavProp: RelatedElementProps;\n }\n\n interface TestElementWithNavPropProps extends DefinitionElementProps {\n navProp: RelatedElementProps;\n }\n\n interface DerivedWithNavPropProps extends TestElementWithNavPropProps {\n derivedNavProp: RelatedElementProps;\n }\n\n interface TestAspectWithNavProp extends ElementAspectProps {\n navProp: RelatedElement;\n }\n\n class TestGeneratedClasses extends Schema {\n public static override get schemaName(): string { return \"TestGeneratedClasses\"; }\n public static get classes() {\n return [TestModelWithNavProp, TestElementWithNavProp, LinkTableRelWithNavProp, DerivedWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n for (const class_ of this.classes) {\n ClassRegistry.register(class_, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n class TestElementWithNavProp extends DefinitionElement {\n public static override get className() { return \"TestElementWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public navProp: RelatedElement;\n public constructor(props: TestElementWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.navProp = new RelatedElement(props.navProp);\n }\n }\n\n class TestModelWithNavProp extends DefinitionModel {\n public static override get className() { return \"TestModelWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public elemNavProp: RelatedElement;\n public aspectNavProp: RelatedElement;\n public relNavProp: RelatedElement;\n public constructor(props: TestModelWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.elemNavProp = new RelatedElement(props.elemNavProp);\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\n this.relNavProp = new RelatedElement(props.relNavProp);\n }\n }\n\n class LinkTableRelWithNavProp extends ElementRefersToElements {\n public static override get className() { return \"LinkTableRelWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public elemNavProp: RelatedElement;\n public aspectNavProp: RelatedElement;\n public modelNavProp: RelatedElement;\n public constructor(props: LinkTableRelWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.elemNavProp = new RelatedElement(props.elemNavProp);\n this.aspectNavProp = new RelatedElement(props.aspectNavProp);\n this.modelNavProp = new RelatedElement(props.modelNavProp);\n }\n }\n\n class DerivedWithNavProp extends TestElementWithNavProp {\n public static override get className() { return \"DerivedWithNavProp\"; }\n public static override schema = TestGeneratedClasses;\n public derivedNavProp: RelatedElement;\n public constructor(props: DerivedWithNavPropProps, inIModel: IModelDb) {\n super(props, inIModel);\n this.derivedNavProp = new RelatedElement(props.derivedNavProp);\n }\n }\n\n class Derived2 extends DerivedWithNavProp {\n public static override get className() { return \"Derived2\"; }\n }\n class Derived3 extends Derived2 {\n public static override get className() { return \"Derived3\"; }\n }\n class Derived4 extends Derived3 {\n public static override get className() { return \"Derived4\"; }\n }\n class Derived5 extends Derived4 {\n public static override get className() { return \"Derived5\"; }\n }\n class Derived6 extends Derived5 {\n public static override get className() { return \"Derived6\"; }\n }\n\n class NonGeneratedElement extends DefinitionElement {\n public static override get className() { return \"NonGeneratedElement\"; }\n }\n\n it(\"Should provide correct schemas and full-names on generated classes\", async () => {\n await imodel.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"CustomA\" alias=\"custA\" version=\"1.0.0\"\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\n <ECEntityClass typeName=\"NonGeneratedElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"GeneratedElement\">\n <BaseClass>NonGeneratedElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ElementC\">\n <BaseClass>GeneratedElement</BaseClass>\n </ECEntityClass>\n </ECSchema>\n `,\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"CustomB\" alias=\"custB\" version=\"1.0.0\"\n xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECSchemaReference name=\"Functional\" version=\"1.00\" alias=\"func\"/>\n <ECSchemaReference name=\"CustomA\" version=\"01.00\" alias=\"custA\"/>\n <ECEntityClass typeName=\"DummyElement\">\n <BaseClass>bis:DefinitionElement</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"ErrorElement\">\n <BaseClass>custA:ElementC</BaseClass>\n </ECEntityClass>\n </ECSchema>\n `,\n ]);\n\n class CustomASchema extends Schema {\n public static override get schemaName(): string { return \"CustomA\"; }\n public static get classes(): typeof Entity[] {\n return [NonGeneratedElement];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n for (const ecClass of this.classes) {\n ClassRegistry.register(ecClass, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n CustomASchema.registerSchema();\n\n class DummyElement extends DefinitionElement {\n public static override get className() { return \"DummyElement\"; }\n }\n\n class CustomBSchema extends Schema {\n public static override get schemaName(): string { return \"CustomB\"; }\n public static get classes() {\n return [DummyElement];\n }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n for (const ecClass of this.classes) {\n ClassRegistry.register(ecClass, this);\n }\n }\n }\n\n public static unregisterSchema() {\n Schemas.unregisterSchema(this.schemaName);\n }\n }\n\n CustomBSchema.registerSchema();\n\n const nonGeneratedElement = imodel.getJsClass(\"CustomA:NonGeneratedElement\");\n assert.equal(nonGeneratedElement.classFullName, \"CustomA:NonGeneratedElement\");\n const generatedElement = imodel.getJsClass(\"CustomA:GeneratedElement\");\n assert.equal(generatedElement.classFullName, \"CustomA:GeneratedElement\");\n const elementC = imodel.getJsClass(\"CustomA:ElementC\");\n assert.equal(elementC.classFullName, \"CustomA:ElementC\");\n const dummyElement = imodel.getJsClass(\"CustomB:DummyElement\");\n assert.equal(dummyElement.classFullName, \"CustomB:DummyElement\");\n\n //This is the class that had the wrong schema\n const errorElement = imodel.getJsClass(\"CustomB:ErrorElement\");\n assert.equal(errorElement.classFullName, \"CustomB:ErrorElement\");\n assert.isTrue(errorElement.schemaItemKey.matches(new SchemaItemKey(\"ErrorElement\", new SchemaKey(\"CustomB\", 1, 0, 0))));\n assert.equal(errorElement.className, \"ErrorElement\");\n assert.equal(errorElement.schema.schemaName, \"CustomB\");\n\n // Create an instance of ErrorElement\n const errorElementInstance = Entity.instantiate(errorElement, { classFullName: errorElement.classFullName }, imodel);\n assert.exists(errorElementInstance);\n assert.instanceOf(errorElementInstance, errorElement);\n assert.instanceOf(errorElementInstance, Entity);\n assert.equal(errorElementInstance.className, \"ErrorElement\");\n assert.equal(errorElementInstance.schemaName, \"CustomB\");\n const metadata = await errorElementInstance.getMetaData();\n assert.exists(metadata);\n assert.equal(metadata.fullName, \"CustomB.ErrorElement\");\n });\n\n // if a single inherited class is not generated, the entire hierarchy is considered not-generated\n it(\"should only generate automatic collectReferenceIds implementations for generated classes\", async () => {\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\n constructor(props: TestElementWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const testEntityId = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\n navProp: {\n id: testEntityId,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n } as TestElementWithNavPropProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n assert.isDefined(GeneratedTestElementWithNavProp.prototype[\"collectReferenceIds\"]);\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\n ]);\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\n assert.isTrue(GeneratedTestAspectWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\n });\n\n it(\"should not override collectReferenceIds for BisCore schema classes\", async () => {\n // AnnotationFrameStyle is an example of an unregistered bis class without an implementation of collectReferenceIds\n assert.isTrue(imodel.getJsClass(\"BisCore:AnnotationFrameStyle\").prototype.hasOwnProperty(\"collectReferenceIds\"));\n });\n\n it(\"should get references from its bis superclass\", async () => {\n await imodel.importSchemas([testSchemaPath]); // will throw an exception if import fails\n\n class GeneratedTestElementWithNavProp extends imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\") {\n constructor(props: ElementProps) {\n super(props, imodel);\n }\n }\n\n const testEntityId = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n const elemWithNavProp = new GeneratedTestElementWithNavProp({\n classFullName: \"TestGeneratedClasses:TestElementWithNavProp\",\n navProp: new RelatedElement({\n id: testEntityId,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n }),\n model: IModelDb.dictionaryId,\n code: new Code({\n scope: IModelDb.rootSubjectId,\n spec: imodel.codeSpecs.getByName(BisCodeSpec.spatialCategory).id,\n value: \"\",\n }),\n parent: new RelatedElement({\n // since we don't actually insert this element in this test, using an arbitrary id string\n id: \"0x0000ffff\",\n relClassName: \"BisCore:ElementOwnsChildElements\",\n }),\n } as TestElementWithNavPropProps);\n\n // super class here is Element so we should get the code.scope, model and parent as references\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testEntityId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n\n const modelTestEntityIds = new Array(2).fill(undefined).map((_, index) => withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: `model-value-${index}`,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps)));\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedTestAspectWithNavProp = imodel.getJsClass(\"TestGeneratedClasses:TestAspectWithNavProp\");\n\n const aspectWithNavPropId = withEditTxn(imodel, (txn) => txn.insertAspect({\n classFullName: GeneratedTestAspectWithNavProp.classFullName,\n navProp: { id: modelTestEntityIds[0], relClassName: \"TestGeneratedClasses:NonElemRel\" },\n element: { id: modelTestEntityIds[1] },\n } as TestAspectWithNavProp));\n\n class GeneratedTestModelWithNavProp extends imodel.getJsClass<typeof Model>(\"TestGeneratedClasses:TestModelWithNavProp\") {\n constructor(props: TestModelWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const modelWithNavProp = new GeneratedTestModelWithNavProp({\n classFullName: GeneratedTestModelWithNavProp.classFullName,\n modeledElement: { id: modelTestEntityIds[0] },\n parentModel: IModelDb.dictionaryId,\n elemNavProp: { id: modelTestEntityIds[1], relClassName: \"TestGeneratedClasses:ModelToElemNavRel\" },\n aspectNavProp: { id: aspectWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToAspectNavRel\" },\n // removed due to a bug\n // relNavProp: { id: relWithNavPropId, relClassName: \"TestGeneratedClasses:ModelToRelNavRel\" },\n } as TestModelWithNavPropProps);\n\n const modelWithNavPropId = withEditTxn(imodel, (txn) => modelWithNavProp.insert(txn));\n\n expect(\n [...modelWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(modelTestEntityIds[1], ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(IModelDb.dictionaryId, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(modelTestEntityIds[0], ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\n // ignoring this one, because there seems to be a bug when specifying a relationship instance as a nav prop\n // EntityReferences.fromEntityType(relWithNavPropId, ConcreteEntityTypes.Relationship),\n ].filter((x) => x !== undefined));\n\n const relTestEntityIds = new Array(3).fill(undefined).map((_, index) => withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: `rel-value-${index}`,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps)));\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const GeneratedLinkTableRelWithNavProp = imodel.getJsClass<typeof LinkTableRelWithNavProp>(\"TestGeneratedClasses:LinkTableRelWithNavProp\");\n\n const relWithNavProp = new GeneratedLinkTableRelWithNavProp({\n classFullName: GeneratedLinkTableRelWithNavProp.classFullName,\n sourceId: relTestEntityIds[0],\n targetId: relTestEntityIds[1],\n elemNavProp: {\n id: relTestEntityIds[2],\n relClassName: \"TestGeneratedClasses:LinkTableRelToElemNavRel\",\n },\n modelNavProp: {\n id: modelWithNavPropId,\n relClassName: \"TestGeneratedClasses:LinkTableRelToModelNavRel\",\n },\n aspectNavProp: {\n id: aspectWithNavPropId,\n relClassName: \"TestGeneratedClasses:LinkTableRelToAspectNavRel\",\n },\n }, imodel);\n\n const _relWithNavPropId = withEditTxn(imodel, (txn) => relWithNavProp.insert(txn));\n\n expect(\n [...relWithNavProp.getReferenceIds()],\n ).to.have.members([\n ...relTestEntityIds.map((id) => EntityReferences.fromEntityType(id, ConcreteEntityTypes.Element)),\n EntityReferences.fromEntityType(modelWithNavPropId, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(aspectWithNavPropId, ConcreteEntityTypes.ElementAspect),\n ]);\n });\n\n it(\"should not override custom registered schema class implementations of collectReferenceIds\", async () => {\n const testImplReferenceId = \"TEST-INVALID-ID\";\n class MyTestElementWithNavProp extends TestElementWithNavProp {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(testImplReferenceId);\n }\n }\n class MyTestGeneratedClasses extends TestGeneratedClasses {\n public static override get classes() {\n return [MyTestElementWithNavProp, Derived2, Derived3, Derived4, Derived5, Derived6];\n }\n }\n imodel.jsClassMap.clear();\n MyTestGeneratedClasses.registerSchema();\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof MyTestElementWithNavProp>(TestElementWithNavProp.classFullName);\n\n const testElementWithNavPropCollectReferencesSpy = sinon.spy(ActualTestElementWithNavProp.prototype, \"collectReferenceIds\");\n\n class ActualDerivedWithNavProp extends imodel.getJsClass<typeof Element>(DerivedWithNavProp.classFullName) {\n constructor(props: DerivedWithNavPropProps) {\n super(props, imodel);\n }\n }\n\n const testEntity1Id = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-1\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n const testEntity2Id = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-2\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n const elemWithNavProp = new ActualTestElementWithNavProp({\n classFullName: TestElementWithNavProp.classFullName,\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n } as TestElementWithNavPropProps, imodel);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n assert.isDefined(ActualTestElementWithNavProp.prototype.collectReferenceIds);\n expect(\n [...elemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\n testElementWithNavPropCollectReferencesSpy.resetHistory();\n\n const derivedElemWithNavProp = new ActualDerivedWithNavProp({\n classFullName: DerivedWithNavProp.classFullName,\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n derivedNavProp: {\n id: testEntity2Id,\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\n },\n } as DerivedWithNavPropProps);\n\n // eslint-disable-next-line @typescript-eslint/dot-notation\n assert.isDefined(ActualDerivedWithNavProp.prototype[\"collectReferenceIds\"]);\n // This demonstrates that if a non-generated class has a registered non-biscore base, it will not get a generated impl,\n expect(\n [...derivedElemWithNavProp.getReferenceIds()],\n ).to.have.members([\n EntityReferences.fromEntityType(elemWithNavProp.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(elemWithNavProp.code.scope, ConcreteEntityTypes.Element),\n elemWithNavProp.parent && EntityReferences.fromEntityType(elemWithNavProp.parent?.id, ConcreteEntityTypes.Element),\n EntityReferences.fromEntityType(testImplReferenceId, ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined));\n // explicitly check we called the super function\n // (we already know its implementation was called, because testImplReferenceId is in the derived call's result)\n expect(testElementWithNavPropCollectReferencesSpy.called).to.be.true;\n\n sinon.restore();\n MyTestGeneratedClasses.unregisterSchema();\n });\n\n it(\"should work along a complex chain of overrides\", async () => {\n class MyDerived2 extends Derived2 {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(\"derived-2\");\n }\n }\n class MyDerived4 extends Derived4 {\n public override collectReferenceIds(referenceIds: EntityReferenceSet) {\n super.collectReferenceIds(referenceIds);\n referenceIds.addElement(\"derived-4\");\n }\n }\n class MyTestGeneratedClasses extends TestGeneratedClasses {\n public static override get classes() {\n // leaving Derived3,5,6 generated\n return [MyDerived2, MyDerived4];\n }\n }\n imodel.jsClassMap.clear();\n MyTestGeneratedClasses.registerSchema();\n\n /* eslint-disable @typescript-eslint/naming-convention */\n const ActualTestElementWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:TestElementWithNavProp\");\n const ActualDerivedWithNavProp = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:DerivedWithNavProp\");\n const ActualDerived2 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived2\");\n const ActualDerived3 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived3\");\n const ActualDerived4 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived4\");\n const ActualDerived5 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived5\");\n const ActualDerived6 = imodel.getJsClass<typeof Element>(\"TestGeneratedClasses:Derived6\");\n\n expect(ActualTestElementWithNavProp.isGeneratedClass).to.be.true;\n expect(ActualDerivedWithNavProp.isGeneratedClass).to.be.true;\n expect(ActualDerived2.isGeneratedClass).to.be.false;\n expect(ActualDerived3.isGeneratedClass).to.be.true;\n expect(ActualDerived4.isGeneratedClass).to.be.false;\n expect(ActualDerived5.isGeneratedClass).to.be.true;\n expect(ActualDerived6.isGeneratedClass).to.be.true;\n\n assert.isTrue(ActualTestElementWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\")); // should have automatic impl\n assert.isTrue(ActualDerivedWithNavProp.prototype.hasOwnProperty(\"collectReferenceIds\"));\n assert.isTrue(ActualDerived2.prototype.hasOwnProperty(\"collectReferenceIds\")); // non-generated; manually implements so has method\n assert.isFalse(ActualDerived3.prototype.hasOwnProperty(\"collectReferenceIds\")); // base is non-generated so it shouldn't get the automatic impl\n assert.isTrue(ActualDerived4.prototype.hasOwnProperty(\"collectReferenceIds\")); // manually implements so it should have the method\n assert.isFalse(ActualDerived5.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\n assert.isFalse(ActualDerived6.prototype.hasOwnProperty(\"collectReferenceIds\")); // ancestor is non-generated so it shouldn't get the automatic impl\n\n const testEntity1Id = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:Derived6\",\n prop: \"sample-value-1\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n const testEntity2Id = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: \"TestGeneratedClasses:TestEntity\",\n prop: \"sample-value-2\",\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n } as TestEntityProps));\n\n const derived6Id = withEditTxn(imodel, (txn) => txn.insertElement({\n classFullName: Derived6.classFullName,\n model: IModelDb.dictionaryId,\n code: Code.createEmpty(),\n navProp: {\n id: testEntity1Id,\n relClassName: \"TestGeneratedClasses:ElemRel\",\n },\n derivedNavProp: {\n id: testEntity2Id,\n relClassName: \"TestGeneratedClasses:DerivedElemRel\",\n },\n } as DerivedWithNavPropProps));\n\n const derived6 = imodel.elements.getElement(derived6Id);\n\n /** it is not possible to make a spy of an already existing spy, so lazy try making one\n * this is necessary since due to prototypes, some \"methods\" we listen to are actually the same\n */\n function spyCollectReferenceIds(cls: typeof Element): sinon.SinonSpy {\n if ((cls.prototype as any).collectReferenceIds.isSinonProxy) {\n return (cls.prototype as any).collectReferenceIds;\n }\n return sinon.spy(cls.prototype, \"collectReferenceIds\" as any);\n }\n\n const elementMethodSpy = spyCollectReferenceIds(Element);\n const testElementWithNavPropSpy = spyCollectReferenceIds(ActualTestElementWithNavProp);\n const derivedWithNavPropSpy = spyCollectReferenceIds(ActualDerivedWithNavProp);\n const derived2Spy = spyCollectReferenceIds(ActualDerived2);\n const derived3Spy = spyCollectReferenceIds(ActualDerived3);\n const derived4Spy = spyCollectReferenceIds(ActualDerived4);\n const derived5Spy = spyCollectReferenceIds(ActualDerived5);\n const derived6Spy = spyCollectReferenceIds(ActualDerived6);\n\n // This demonstrates that if a generated class (Derived6) has a non-generated ancestor, it will not get a generated impl\n // instead it will just call the closest non-generated ancestor (Derived4)\n expect([...derived6.getReferenceIds()]).to.have.members(\n [\n EntityReferences.fromEntityType(derived6.model, ConcreteEntityTypes.Model),\n EntityReferences.fromEntityType(derived6.code.scope, ConcreteEntityTypes.Element),\n derived6.parent?.id && EntityReferences.fromEntityType(derived6.parent.id, ConcreteEntityTypes.Element),\n // \"TestGeneratedClasses:Derived4\" is MyDerived4 above, which extends the Derived4 class, which extends up\n // without any custom ancestor implementing collectReferenceIds, so Element.collectReferenceIds is called as the\n // super, and no navigation properties or other custom implementations are called so we only get \"derived-4\"\n EntityReferences.fromEntityType(\"derived-4\", ConcreteEntityTypes.Element),\n ].filter((x) => x !== undefined),\n );\n\n expect(elementMethodSpy.called).to.be.true; // this is the `super.collectReferenceIds` call in MyDerived4\n expect(testElementWithNavPropSpy.called).to.be.false;\n expect(derivedWithNavPropSpy.called).to.be.false;\n\n // these are the same (tested below)\n expect(derived2Spy.called).to.be.false;\n expect(derived3Spy.called).to.be.false;\n\n // these are all the same (tested below)\n expect(derived4Spy.called).to.be.true;\n expect(derived5Spy.called).to.be.true;\n expect(derived6Spy.called).to.be.true;\n\n expect(\n new Set(\n [\n Element,\n ActualTestElementWithNavProp,\n ActualDerivedWithNavProp,\n Derived2,\n Derived3, // same as above (so will be removed from set)\n Derived4,\n Derived5, // save as above (so will be removed from set)\n Derived6, // save as above (so will be removed from set)\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\n ),\n ).to.deep.equal(\n new Set(\n [\n Element,\n ActualTestElementWithNavProp,\n ActualDerivedWithNavProp,\n Derived2,\n Derived4,\n ].map((e) => e.prototype[\"collectReferenceIds\"]), // eslint-disable-line @typescript-eslint/dot-notation\n ),\n );\n\n MyTestGeneratedClasses.unregisterSchema();\n sinon.restore();\n });\n});\n\nclass Base {\n public static staticProperty: string = \"base\";\n public static get sqlName(): string { return `s.${this.staticProperty}`; }\n}\n\nclass Derived extends Base {\n}\n\ndescribe(\"Static Properties\", () => {\n it(\"should be inherited, and the subclass should get its own copy\", async () => {\n assert.equal(Base.staticProperty, \"base\");\n assert.equal(Derived.staticProperty, \"base\"); // Derived inherits Base's staticProperty (via its prototype)\n Derived.staticProperty = \"derived\"; // Derived now gets its own copy of staticProperty\n assert.equal(Base.staticProperty, \"base\"); // Base's staticProperty remains as it was\n assert.equal(Derived.staticProperty, \"derived\"); // Derived's staticProperty is now different\n assert.equal(Base.sqlName, \"s.base\");\n const d = new Derived();\n assert.equal((d.constructor as any).staticProperty, \"derived\"); // Instances of Derived see Derived.staticProperty\n const b = new Base();\n assert.equal((b.constructor as any).staticProperty, \"base\"); // Instances of Base see Base.staticProperty\n });\n\n});\n\ndescribe(\"Global state of ClassRegistry\", () => {\n let imodel1: SnapshotDb;\n let imodel2: SnapshotDb;\n\n before(() => {\n const seedFileName = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const testFileName1 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState1.bim\");\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"ClassRegistry\", \"GlobalState2.bim\");\n imodel1 = IModelTestUtils.createSnapshotFromSeed(testFileName1, seedFileName);\n imodel2 = IModelTestUtils.createSnapshotFromSeed(testFileName2, seedFileName);\n assert.exists(imodel1);\n assert.exists(imodel2);\n });\n\n after(() => {\n imodel1?.close();\n imodel2?.close();\n });\n\n it(\"registering a class in different imodels should not affect each other\", async () => {\n await imodel1.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"foo\" typeName=\"string\"/>\n <ECNavigationProperty propertyName=\"RelatedTestClass\" relationshipName=\"MyRelationship\" direction=\"backward\"/>\n </ECEntityClass>\n\n <ECRelationshipClass typeName=\"MyRelationship\" modifier=\"None\" strength=\"embedding\">\n <Source multiplicity=\"(0..1)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"TestClass\"/>\n </Source>\n <Target multiplicity=\"(0..*)\" roleLabel=\"has\" polymorphic=\"false\">\n <Class class=\"TestClass\"/>\n </Target>\n </ECRelationshipClass>\n </ECSchema>\n `,\n ]);\n await imodel2.importSchemaStrings([\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"bar\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>\n `,\n ]);\n\n const testClass1 = imodel1.getJsClass(\"TestSchema:TestClass\");\n assert.isFalse(testClass1.hasOwnProperty(\"testPropertyGuard\"));\n (testClass1 as any).testPropertyGuard = true;\n assert.isTrue(testClass1.hasOwnProperty(\"testPropertyGuard\"));\n\n const testClass2 = imodel2.getJsClass(\"TestSchema:TestClass\");\n assert.isFalse(testClass2.hasOwnProperty(\"testPropertyGuard\"));\n });\n\n\n});\n// TODO: add tests on the new model/aspect prefixes\n"]}
|
|
@@ -8,6 +8,7 @@ import { restore as sinonRestore, spy as sinonSpy } from "sinon";
|
|
|
8
8
|
import { Guid, Id64 } from "@itwin/core-bentley";
|
|
9
9
|
import { CodeScopeSpec, CodeSpec, IModel } from "@itwin/core-common";
|
|
10
10
|
import { ClassRegistry } from "../../ClassRegistry";
|
|
11
|
+
import { EditTxn } from "../../EditTxn";
|
|
11
12
|
import { ElementUniqueAspect } from "../../ElementAspect";
|
|
12
13
|
import { _nativeDb, ChannelControl, FunctionalBreakdownElement, FunctionalComponentElement, FunctionalModel, FunctionalPartition, FunctionalSchema, InformationPartitionElement, Schemas, StandaloneDb, } from "../../core-backend";
|
|
13
14
|
import { ElementOwnsChildElements, ElementOwnsUniqueAspect, SubjectOwnsPartitionElements } from "../../NavigationRelationship";
|
|
@@ -234,16 +235,17 @@ describe("Functional Domain", () => {
|
|
|
234
235
|
const elements = iModelDb.elements;
|
|
235
236
|
const dropCommit = iModelDb.txns.onCommit.addListener(() => commits++);
|
|
236
237
|
const dropCommitted = iModelDb.txns.onCommitted.addListener(() => committed++);
|
|
237
|
-
iModelDb.saveChanges("Import Functional schema");
|
|
238
|
+
iModelDb[_nativeDb].saveChanges("Import Functional schema");
|
|
238
239
|
assert.equal(commits, 1);
|
|
239
240
|
assert.equal(committed, 1);
|
|
240
241
|
dropCommit();
|
|
241
242
|
dropCommitted();
|
|
242
243
|
IModelTestUtils.flushTxns(iModelDb); // importSchema below will fail if this is not called to flush local changes
|
|
243
244
|
await iModelDb.importSchemas([join(KnownTestLocations.assetsDir, "TestFunctional.ecschema.xml")]);
|
|
244
|
-
iModelDb.saveChanges("Import TestFunctional schema");
|
|
245
245
|
assert.equal(commits, 1);
|
|
246
246
|
assert.equal(committed, 1);
|
|
247
|
+
const txn = new EditTxn(iModelDb, "functional domain test");
|
|
248
|
+
txn.start();
|
|
247
249
|
const testChannelKey1 = "channel 1 for tests";
|
|
248
250
|
const testChannelKey2 = "channel 2 for tests";
|
|
249
251
|
function testChannel(channelKey, fn, spies) {
|
|
@@ -303,11 +305,11 @@ describe("Functional Domain", () => {
|
|
|
303
305
|
};
|
|
304
306
|
assert.equal(iModelDb.channels.queryChannelRoot(ChannelControl.sharedChannelName), IModel.rootSubjectId);
|
|
305
307
|
const codeSpec = CodeSpec.create(iModelDb, "Test Functional Elements", CodeScopeSpec.Type.Model);
|
|
306
|
-
iModelDb.codeSpecs.insert(codeSpec);
|
|
308
|
+
iModelDb.codeSpecs.insert(txn, codeSpec);
|
|
307
309
|
assert.isTrue(Id64.isValidId64(codeSpec.id));
|
|
308
310
|
// create a channel for all elements in this test
|
|
309
311
|
assert.isUndefined(iModelDb.channels.queryChannelRoot(testChannelKey1));
|
|
310
|
-
const subject1Id = iModelDb.channels.insertChannelSubject({ subjectName: "Test Functional Subject", channelKey: testChannelKey1 });
|
|
312
|
+
const subject1Id = iModelDb.channels.insertChannelSubject({ subjectName: "Test Functional Subject", channelKey: testChannelKey1, txn });
|
|
311
313
|
assert.equal(iModelDb.channels.queryChannelRoot(testChannelKey1), subject1Id);
|
|
312
314
|
const partitionCode = FunctionalPartition.createCode(iModelDb, subject1Id, "Test Functional Model");
|
|
313
315
|
const partitionProps = {
|
|
@@ -315,8 +317,8 @@ describe("Functional Domain", () => {
|
|
|
315
317
|
parent: new SubjectOwnsPartitionElements(subject1Id), code: partitionCode,
|
|
316
318
|
};
|
|
317
319
|
iModelDb.channels.addAllowedChannel(testChannelKey1);
|
|
318
|
-
let partitionId =
|
|
319
|
-
const modelId = testChannel(testChannelKey1, () =>
|
|
320
|
+
let partitionId = txn.insertElement(partitionProps);
|
|
321
|
+
const modelId = testChannel(testChannelKey1, () => txn.insertModel({ classFullName: TestFuncModel.classFullName, modeledElement: { id: partitionId } }), [spy.model.onInsert]);
|
|
320
322
|
assert.isTrue(Id64.isValidId64(modelId));
|
|
321
323
|
assert.isTrue(spy.model.onInsert.calledOnce);
|
|
322
324
|
assert.isTrue(spy.model.onInserted.calledOnce);
|
|
@@ -326,25 +328,25 @@ describe("Functional Domain", () => {
|
|
|
326
328
|
assert.isTrue(spy.partition.onSubModelInsert.calledOnce);
|
|
327
329
|
assert.isTrue(spy.partition.onSubModelInserted.calledOnce);
|
|
328
330
|
assert.equal(spy.partition.onSubModelInserted.getCall(0).args[0].subModelId, modelId, "Element.onSubModelInserted should have correct subModelId");
|
|
329
|
-
expect(() => iModelDb.channels.insertChannelSubject({ subjectName: "Test Functional Subject 2", channelKey: testChannelKey1 })).to.throw(`Channel ${testChannelKey1} root already exist`);
|
|
330
|
-
const subject2Id = iModelDb.channels.insertChannelSubject({ subjectName: "Test Functional Subject 2", channelKey: testChannelKey2 });
|
|
331
|
+
expect(() => iModelDb.channels.insertChannelSubject({ subjectName: "Test Functional Subject 2", channelKey: testChannelKey1, txn })).to.throw(`Channel ${testChannelKey1} root already exist`);
|
|
332
|
+
const subject2Id = iModelDb.channels.insertChannelSubject({ subjectName: "Test Functional Subject 2", channelKey: testChannelKey2, txn });
|
|
331
333
|
iModelDb.channels.addAllowedChannel(testChannelKey2);
|
|
332
|
-
expect(() => iModelDb.channels.insertChannelSubject({ subjectName: "Nested Subject", parentSubjectId: subject2Id, channelKey: "nested channel" })).to.throw("may not nest");
|
|
334
|
+
expect(() => iModelDb.channels.insertChannelSubject({ subjectName: "Nested Subject", parentSubjectId: subject2Id, channelKey: "nested channel", txn })).to.throw("may not nest");
|
|
333
335
|
partitionProps.code.value = "Test Func 2";
|
|
334
336
|
partitionProps.parent = new SubjectOwnsPartitionElements(subject2Id);
|
|
335
|
-
partitionId =
|
|
336
|
-
const modelId2 =
|
|
337
|
+
partitionId = txn.insertElement(partitionProps);
|
|
338
|
+
const modelId2 = txn.insertModel({ classFullName: TestFuncModel.classFullName, modeledElement: { id: partitionId } });
|
|
337
339
|
assert.isTrue(Id64.isValidId64(modelId2));
|
|
338
340
|
assert.equal(spy.model.onInserted.getCall(1).args[0].id, modelId2, "second insert should set new id");
|
|
339
341
|
assert.equal(spy.model.onInsert.callCount, 2);
|
|
340
342
|
assert.equal(spy.model.onInserted.callCount, 2);
|
|
341
343
|
assert.equal(spy.partition.onSubModelInserted.getCall(1).args[0].subModelId, modelId2, "Element.onSubModelInserted should have correct subModelId");
|
|
342
344
|
const model2 = iModelDb.models.getModel(modelId2);
|
|
343
|
-
testChannel(testChannelKey2, () => model2.update(), []);
|
|
345
|
+
testChannel(testChannelKey2, () => model2.update(txn), []);
|
|
344
346
|
assert.equal(spy.model.onUpdated.getCall(0).args[0].id, modelId2);
|
|
345
347
|
assert.equal(spy.model.onUpdate.callCount, 2);
|
|
346
348
|
assert.equal(spy.model.onUpdated.callCount, 1);
|
|
347
|
-
testChannel(testChannelKey2, () => model2.delete(), [spy.model.onDelete, spy.partition.onSubModelDelete]);
|
|
349
|
+
testChannel(testChannelKey2, () => model2.delete(txn), [spy.model.onDelete, spy.partition.onSubModelDelete]);
|
|
348
350
|
assert.isTrue(spy.model.onDelete.calledOnce);
|
|
349
351
|
assert.isTrue(spy.model.onDeleted.calledOnce);
|
|
350
352
|
assert.equal(spy.model.onDeleted.getCall(0).args[0].id, modelId2);
|
|
@@ -352,7 +354,7 @@ describe("Functional Domain", () => {
|
|
|
352
354
|
assert.isTrue(spy.partition.onSubModelDeleted.calledOnce);
|
|
353
355
|
assert.equal(spy.partition.onSubModelDeleted.getCall(0).args[0].subModelId, modelId2);
|
|
354
356
|
const breakdownProps = { classFullName: Breakdown.classFullName, model: modelId, code: { spec: codeSpec.id, scope: modelId, value: "Breakdown1" } };
|
|
355
|
-
const breakdownId = testChannel(testChannelKey1, () =>
|
|
357
|
+
const breakdownId = testChannel(testChannelKey1, () => txn.insertElement(breakdownProps), [spy.model.onInsertElement, spy.breakdown.onInsert]);
|
|
356
358
|
assert.isTrue(Id64.isValidId64(breakdownId));
|
|
357
359
|
assert.isTrue(spy.model.onInsertElement.calledOnce);
|
|
358
360
|
assert.isTrue(spy.model.onInsertedElement.calledOnce);
|
|
@@ -363,13 +365,13 @@ describe("Functional Domain", () => {
|
|
|
363
365
|
assert.equal(spy.breakdown.onInsert.getCall(0).args[0].props, breakdownProps);
|
|
364
366
|
const breakdown2Props = { classFullName: Breakdown.classFullName, model: modelId, code: { spec: codeSpec.id, scope: modelId, value: "badval" } };
|
|
365
367
|
// TestFuncModel.onInsertElement throws for this code.value
|
|
366
|
-
expect(() =>
|
|
368
|
+
expect(() => txn.insertElement(breakdown2Props)).to.throw("bad element");
|
|
367
369
|
breakdown2Props.code.value = "Breakdown2";
|
|
368
370
|
breakdown2Props.userLabel = "start label"; // gets overwritten in `onInsert`
|
|
369
|
-
const bd2 =
|
|
371
|
+
const bd2 = txn.insertElement(breakdown2Props);
|
|
370
372
|
const aspect = { classFullName: TestFuncAspect.classFullName, element: new ElementOwnsUniqueAspect(bd2), strProp: "prop 1" };
|
|
371
373
|
TestFuncAspect.expectedVal = aspect.strProp;
|
|
372
|
-
testChannel(testChannelKey1, () =>
|
|
374
|
+
testChannel(testChannelKey1, () => txn.insertAspect(aspect), [spy.aspect.onInsert]);
|
|
373
375
|
assert.isTrue(spy.aspect.onInsert.calledOnce);
|
|
374
376
|
assert.isTrue(spy.aspect.onInserted.calledOnce);
|
|
375
377
|
assert.isFalse(spy.aspect.onUpdate.called);
|
|
@@ -377,7 +379,7 @@ describe("Functional Domain", () => {
|
|
|
377
379
|
assert.equal(spy.aspect.onInserted.getCall(0).args[0].props.element.id, bd2, "elemId from ElementAspect.onInserted");
|
|
378
380
|
aspect.strProp = "prop 2";
|
|
379
381
|
TestFuncAspect.expectedVal = aspect.strProp;
|
|
380
|
-
testChannel(testChannelKey1, () =>
|
|
382
|
+
testChannel(testChannelKey1, () => txn.updateAspect(aspect), [spy.aspect.onUpdate]);
|
|
381
383
|
assert.equal(spy.aspect.onInsert.callCount, 1, "ElementAspect.onInsert should not be called on update");
|
|
382
384
|
assert.equal(spy.aspect.onInserted.callCount, 1, "ElementAspect.onInserted should should not be called on update");
|
|
383
385
|
assert.equal(spy.aspect.onUpdate.callCount, 1);
|
|
@@ -385,7 +387,7 @@ describe("Functional Domain", () => {
|
|
|
385
387
|
assert.equal(spy.aspect.onUpdated.getCall(0).args[0].props.element.id, bd2, "from ElementAspect.onUpdated");
|
|
386
388
|
const aspects = elements.getAspects(bd2, TestFuncAspect.classFullName);
|
|
387
389
|
assert.equal(aspects.length, 1);
|
|
388
|
-
testChannel(testChannelKey1, () =>
|
|
390
|
+
testChannel(testChannelKey1, () => txn.deleteAspect(aspects[0].id), [spy.aspect.onDelete]);
|
|
389
391
|
assert.equal(spy.aspect.onDelete.callCount, 1);
|
|
390
392
|
assert.equal(spy.aspect.onDeleted.callCount, 1);
|
|
391
393
|
assert.equal(spy.aspect.onDelete.getCall(0).args[0].aspectId, aspects[0].id);
|
|
@@ -394,14 +396,14 @@ describe("Functional Domain", () => {
|
|
|
394
396
|
assert.equal(bd2el.userLabel, insertedLabel, "label was modified by onInsert");
|
|
395
397
|
expect(iModelDb.channels.getChannelKey(bd2)).equals(testChannelKey1);
|
|
396
398
|
bd2el.userLabel = "nothing";
|
|
397
|
-
testChannel(testChannelKey1, () => bd2el.update(), [spy.breakdown.onUpdate, spy.breakdown.onUpdated]);
|
|
399
|
+
testChannel(testChannelKey1, () => bd2el.update(txn), [spy.breakdown.onUpdate, spy.breakdown.onUpdated]);
|
|
398
400
|
bd2el = elements.getElement(bd2);
|
|
399
401
|
assert.equal(bd2el.userLabel, updatedLabel, "label was modified in onUpdate");
|
|
400
402
|
assert.equal(spy.breakdown.onUpdate.callCount, 1);
|
|
401
403
|
assert.equal(spy.breakdown.onUpdated.callCount, 1);
|
|
402
404
|
assert.equal(spy.breakdown.onUpdate.getCall(0).args[0].props.id, bd2);
|
|
403
405
|
assert.equal(spy.breakdown.onUpdated.getCall(0).args[0].id, bd2);
|
|
404
|
-
testChannel(testChannelKey1, () => bd2el.delete(), [spy.breakdown.onDelete]);
|
|
406
|
+
testChannel(testChannelKey1, () => bd2el.delete(txn), [spy.breakdown.onDelete]);
|
|
405
407
|
assert.equal(spy.breakdown.onDelete.callCount, 1);
|
|
406
408
|
assert.equal(spy.breakdown.onDeleted.callCount, 1);
|
|
407
409
|
const deleteArg = spy.breakdown.onDelete.getCall(0).args[0];
|
|
@@ -414,20 +416,20 @@ describe("Functional Domain", () => {
|
|
|
414
416
|
model: modelId,
|
|
415
417
|
code: { spec: codeSpec.id, scope: modelId, value: "bd3" },
|
|
416
418
|
};
|
|
417
|
-
const bd3 =
|
|
419
|
+
const bd3 = txn.insertElement(breakdown3Props);
|
|
418
420
|
const componentProps = {
|
|
419
421
|
classFullName: Component.classFullName,
|
|
420
422
|
model: modelId,
|
|
421
423
|
parent: { id: breakdownId, relClassName: ElementOwnsChildElements.classFullName },
|
|
422
424
|
code: { spec: codeSpec.id, scope: modelId, value: "Component1" },
|
|
423
425
|
};
|
|
424
|
-
const componentId = testChannel(testChannelKey1, () =>
|
|
426
|
+
const componentId = testChannel(testChannelKey1, () => txn.insertElement(componentProps), []);
|
|
425
427
|
assert.isTrue(Id64.isValidId64(componentId));
|
|
426
428
|
assert.equal(spy.breakdown.onChildInserted.callCount, 1);
|
|
427
429
|
assert.equal(spy.breakdown.onChildInserted.getCall(0).args[0].childId, componentId);
|
|
428
430
|
// test model and element callbacks for updateElement
|
|
429
431
|
const component1 = elements.getElement(componentId);
|
|
430
|
-
testChannel(testChannelKey1, () => component1.update(), [spy.model.onUpdateElement, spy.model.onUpdatedElement]);
|
|
432
|
+
testChannel(testChannelKey1, () => component1.update(txn), [spy.model.onUpdateElement, spy.model.onUpdatedElement]);
|
|
431
433
|
assert.equal(spy.model.onUpdateElement.callCount, 1);
|
|
432
434
|
assert.equal(spy.model.onUpdatedElement.callCount, 1);
|
|
433
435
|
assert.equal(spy.model.onUpdatedElement.getCall(0).args[0].elementId, componentId);
|
|
@@ -436,21 +438,21 @@ describe("Functional Domain", () => {
|
|
|
436
438
|
assert.equal(spy.breakdown.onChildUpdate.getCall(0).args[0].parentId, breakdownId);
|
|
437
439
|
assert.equal(spy.breakdown.onChildUpdated.getCall(0).args[0].childId, componentId);
|
|
438
440
|
componentProps.code.value = "comp2";
|
|
439
|
-
const comp2 =
|
|
441
|
+
const comp2 = txn.insertElement(componentProps);
|
|
440
442
|
assert.equal(spy.breakdown.onChildInserted.callCount, 2);
|
|
441
443
|
assert.equal(spy.breakdown.onChildInserted.getCall(1).args[0].childId, comp2);
|
|
442
444
|
const el2 = elements.getElement(comp2);
|
|
443
445
|
spy.model.onDeleteElement.resetHistory();
|
|
444
446
|
spy.model.onDeletedElement.resetHistory();
|
|
445
447
|
TestFuncModel.dontDelete = comp2; // block deletion through model
|
|
446
|
-
expect(() => el2.delete()).to.throw("dont delete my element");
|
|
448
|
+
expect(() => el2.delete(txn)).to.throw("dont delete my element");
|
|
447
449
|
TestFuncModel.dontDelete = ""; // allow deletion through model
|
|
448
450
|
Breakdown.dontDeleteChild = comp2; // but block through parent
|
|
449
|
-
expect(() => el2.delete()).to.throw("dont delete my child"); // nope
|
|
451
|
+
expect(() => el2.delete(txn)).to.throw("dont delete my child"); // nope
|
|
450
452
|
assert.equal(spy.model.onDeleteElement.callCount, 2, "Model.onElementDelete gets called even though element is not really deleted");
|
|
451
453
|
assert.equal(spy.model.onDeletedElement.callCount, 0, "make sure Model.onElementDeleted did not get called");
|
|
452
454
|
Breakdown.dontDeleteChild = ""; // now fully allow delete
|
|
453
|
-
el2.delete();
|
|
455
|
+
el2.delete(txn);
|
|
454
456
|
assert.equal(spy.model.onDeleteElement.callCount, 3, "Model.onElementDelete should be called again");
|
|
455
457
|
assert.equal(spy.model.onDeletedElement.callCount, 1);
|
|
456
458
|
assert.equal(spy.model.onDeletedElement.getCall(0).args[0].elementId, comp2);
|
|
@@ -459,10 +461,10 @@ describe("Functional Domain", () => {
|
|
|
459
461
|
// next we make sure that changing the parent of an element calls the "onChildAdd/Drop/Added/Dropped" callbacks.
|
|
460
462
|
// To do this we switch a component's parent from "breakDownId" to "bc3"
|
|
461
463
|
componentProps.parent.id = bd3;
|
|
462
|
-
const comp3 =
|
|
464
|
+
const comp3 = txn.insertElement(componentProps);
|
|
463
465
|
const compEl3 = elements.getElementProps(comp3);
|
|
464
466
|
compEl3.parent.id = breakdownId;
|
|
465
|
-
testChannel(testChannelKey1, () =>
|
|
467
|
+
testChannel(testChannelKey1, () => txn.updateElement(compEl3), []);
|
|
466
468
|
assert.equal(spy.breakdown.onChildAdd.callCount, 1);
|
|
467
469
|
assert.equal(spy.breakdown.onChildAdd.getCall(0).args[0].parentId, breakdownId);
|
|
468
470
|
assert.equal(spy.breakdown.onChildAdd.getCall(0).args[0].childProps.id, comp3);
|
|
@@ -475,15 +477,15 @@ describe("Functional Domain", () => {
|
|
|
475
477
|
assert.equal(spy.breakdown.onChildDropped.callCount, 1);
|
|
476
478
|
assert.equal(spy.breakdown.onChildDropped.getCall(0).args[0].parentId, bd3);
|
|
477
479
|
assert.equal(spy.breakdown.onChildDropped.getCall(0).args[0].childId, comp3);
|
|
478
|
-
|
|
480
|
+
txn.saveChanges("Insert Functional elements");
|
|
479
481
|
// unregister test schema to make sure it will throw exceptions if it is not present (since it has the "SchemaHasBehavior" custom attribute)
|
|
480
482
|
Schemas.unregisterSchema(TestSchema.schemaName);
|
|
481
483
|
const errMsg = "Schema [TestFunctional] not registered, but is marked with SchemaHasBehavior";
|
|
482
|
-
expect(() =>
|
|
484
|
+
expect(() => txn.deleteElement(breakdownId)).to.throw(errMsg);
|
|
483
485
|
assert.isDefined(elements.getElement(breakdownId), "should not have been deleted");
|
|
484
|
-
expect(() =>
|
|
486
|
+
expect(() => txn.updateElement(breakdownProps)).to.throw(errMsg);
|
|
485
487
|
breakdownProps.code.value = "Breakdown 2";
|
|
486
|
-
expect(() =>
|
|
488
|
+
expect(() => txn.insertElement(breakdownProps)).to.throw(errMsg);
|
|
487
489
|
iModelDb.close();
|
|
488
490
|
});
|
|
489
491
|
});
|