@itwin/core-backend 5.9.0-dev.1 → 5.9.0-dev.10
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/CHANGELOG.md +30 -1
- package/lib/cjs/BackendHubAccess.d.ts +38 -0
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- 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/CloudSqlite.d.ts +1 -1
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +68 -13
- package/lib/cjs/CloudSqlite.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 +175 -289
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +58 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +89 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +35 -15
- 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/LockControl.d.ts +85 -1
- package/lib/cjs/LockControl.d.ts.map +1 -1
- package/lib/cjs/LockControl.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 +105 -9
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +194 -15
- 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/HubMock.d.ts +2 -0
- package/lib/cjs/internal/HubMock.d.ts.map +1 -1
- package/lib/cjs/internal/HubMock.js +7 -0
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
- package/lib/cjs/internal/NoLocks.js +6 -0
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
- package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +285 -4
- package/lib/cjs/internal/ServerBasedLocks.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/internal/workspace/SettingsEditorImpl.d.ts +18 -3
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js +49 -242
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +0 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +70 -41
- package/lib/cjs/internal/workspace/WorkspaceImpl.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/cjs/workspace/Settings.d.ts +11 -5
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.d.ts +20 -99
- package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsDb.js +23 -7
- package/lib/cjs/workspace/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.d.ts +40 -226
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js +86 -25
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +7 -11
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts +14 -0
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.d.ts +38 -0
- package/lib/esm/BackendHubAccess.d.ts.map +1 -1
- package/lib/esm/BackendHubAccess.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/CloudSqlite.d.ts +1 -1
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js +69 -14
- package/lib/esm/CloudSqlite.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 +177 -291
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +58 -1
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +91 -2
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IpcHost.d.ts.map +1 -1
- package/lib/esm/IpcHost.js +36 -16
- 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/LockControl.d.ts +85 -1
- package/lib/esm/LockControl.d.ts.map +1 -1
- package/lib/esm/LockControl.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 +105 -9
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +194 -15
- 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/HubMock.d.ts +2 -0
- package/lib/esm/internal/HubMock.d.ts.map +1 -1
- package/lib/esm/internal/HubMock.js +7 -0
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/NoLocks.d.ts.map +1 -1
- package/lib/esm/internal/NoLocks.js +6 -0
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
- package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +286 -5
- package/lib/esm/internal/ServerBasedLocks.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/internal/workspace/SettingsEditorImpl.d.ts +18 -3
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.js +52 -246
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +0 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +71 -41
- package/lib/esm/internal/workspace/WorkspaceImpl.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/IpcHost.test.js +112 -0
- package/lib/esm/test/IpcHost.test.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/ITwinWorkspace.test.d.ts +2 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
- 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 +928 -22
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +26 -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 +72 -22
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js +28 -456
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.d.ts +11 -5
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.d.ts +20 -99
- package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsDb.js +20 -6
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js +85 -24
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +7 -11
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts +14 -0
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
- package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
- package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
- package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
- package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
|
@@ -4,6 +4,7 @@ import { Code } from "@itwin/core-common";
|
|
|
4
4
|
import { IModelTestUtils } from "../IModelTestUtils";
|
|
5
5
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
6
6
|
import { Id64 } from "@itwin/core-bentley";
|
|
7
|
+
import { withEditTxn } from "../../EditTxn";
|
|
7
8
|
describe("Code Tests", () => {
|
|
8
9
|
let imodel;
|
|
9
10
|
before(async () => {
|
|
@@ -13,7 +14,6 @@ describe("Code Tests", () => {
|
|
|
13
14
|
imodel = IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);
|
|
14
15
|
const schemaPathname = path.join(KnownTestLocations.assetsDir, "TestBim.ecschema.xml");
|
|
15
16
|
await imodel.importSchemas([schemaPathname]);
|
|
16
|
-
imodel.saveChanges();
|
|
17
17
|
});
|
|
18
18
|
after(() => {
|
|
19
19
|
imodel.close();
|
|
@@ -48,7 +48,7 @@ describe("Code Tests", () => {
|
|
|
48
48
|
userLabel: 'RF1.dgn',
|
|
49
49
|
federationGuid: undefined,
|
|
50
50
|
};
|
|
51
|
-
const id = imodel.
|
|
51
|
+
const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
52
52
|
assert.exists(id);
|
|
53
53
|
assert.isTrue(Id64.isValidId64(id));
|
|
54
54
|
const nonBreakingSpaceCode = new Code({ scope: "0x11", spec: "0x10", value: "\xa0" });
|
|
@@ -75,7 +75,7 @@ describe("Code Tests", () => {
|
|
|
75
75
|
userLabel: 'RF1.dgn',
|
|
76
76
|
federationGuid: undefined,
|
|
77
77
|
};
|
|
78
|
-
const id = imodel.
|
|
78
|
+
const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
79
79
|
assert.exists(id);
|
|
80
80
|
assert.isTrue(Id64.isValidId64(id));
|
|
81
81
|
const whitespaceCode = { scope: "0x11", spec: " ", value: "RF1.dgn" };
|
|
@@ -123,7 +123,7 @@ describe("Code Tests", () => {
|
|
|
123
123
|
userLabel: 'RF1.dgn',
|
|
124
124
|
federationGuid: undefined,
|
|
125
125
|
};
|
|
126
|
-
const id = imodel.
|
|
126
|
+
const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
127
127
|
assert.exists(id);
|
|
128
128
|
assert.isTrue(Id64.isValidId64(id));
|
|
129
129
|
});
|
|
@@ -137,11 +137,11 @@ describe("Code Tests", () => {
|
|
|
137
137
|
userLabel: 'RF1.dgn',
|
|
138
138
|
federationGuid: undefined,
|
|
139
139
|
};
|
|
140
|
-
expect(() => imodel.
|
|
140
|
+
expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws("invalid code scope").to.have.property("metadata");
|
|
141
141
|
elProps.code.scope = "0x34322"; // valid id, but element doesn't exist
|
|
142
|
-
expect(() => imodel.
|
|
142
|
+
expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws("invalid code scope").to.have.property("metadata");
|
|
143
143
|
elProps.code.scope = undefined; // nothing
|
|
144
|
-
expect(() => imodel.
|
|
144
|
+
expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws("invalid code scope").to.have.property("metadata");
|
|
145
145
|
});
|
|
146
146
|
it("should insert and trim an element with a code value with trailing spaces", () => {
|
|
147
147
|
assert.exists(imodel.elements);
|
|
@@ -153,7 +153,7 @@ describe("Code Tests", () => {
|
|
|
153
153
|
userLabel: 'RF1.dgn',
|
|
154
154
|
federationGuid: undefined,
|
|
155
155
|
};
|
|
156
|
-
const id = imodel.
|
|
156
|
+
const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
157
157
|
assert.exists(id);
|
|
158
158
|
assert.isTrue(Id64.isValidId64(id));
|
|
159
159
|
const queryResult = imodel.elements.queryElementIdByCode({ scope: "0x1", spec: "0x10", value: "new code trailing space test " });
|
|
@@ -169,7 +169,7 @@ describe("Code Tests", () => {
|
|
|
169
169
|
userLabel: 'RF1.dgn',
|
|
170
170
|
federationGuid: undefined,
|
|
171
171
|
};
|
|
172
|
-
const id2 = imodel.
|
|
172
|
+
const id2 = withEditTxn(imodel, (txn) => txn.insertElement(elProps2));
|
|
173
173
|
assert.exists(id2);
|
|
174
174
|
assert.isTrue(Id64.isValidId64(id2));
|
|
175
175
|
const queryResult2 = imodel.elements.queryElementIdByCode({ scope: "0x1", spec: "0x10", value: "new code trailing space test2\xa0" });
|
|
@@ -188,7 +188,7 @@ describe("Code Tests", () => {
|
|
|
188
188
|
userLabel: 'RF1.dgn',
|
|
189
189
|
federationGuid: undefined,
|
|
190
190
|
};
|
|
191
|
-
const id = imodel.
|
|
191
|
+
const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
192
192
|
assert.exists(id);
|
|
193
193
|
assert.isTrue(Id64.isValidId64(id));
|
|
194
194
|
const element = imodel.elements.getElement(id);
|
|
@@ -201,7 +201,7 @@ describe("Code Tests", () => {
|
|
|
201
201
|
userLabel: 'RF1.dgn',
|
|
202
202
|
federationGuid: undefined,
|
|
203
203
|
};
|
|
204
|
-
const id2 = imodel.
|
|
204
|
+
const id2 = withEditTxn(imodel, (txn) => txn.insertElement(elProps2));
|
|
205
205
|
assert.exists(id2);
|
|
206
206
|
assert.isTrue(Id64.isValidId64(id2));
|
|
207
207
|
const element2 = imodel.elements.getElement(id2);
|
|
@@ -217,12 +217,12 @@ describe("Code Tests", () => {
|
|
|
217
217
|
userLabel: 'RF1.dgn',
|
|
218
218
|
federationGuid: undefined,
|
|
219
219
|
};
|
|
220
|
-
expect(() => imodel.
|
|
220
|
+
expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws("Error inserting element").to.have.property("metadata");
|
|
221
221
|
// TODO: Non-ID values currently do not throw an error. This should be caught in TS
|
|
222
222
|
// elProps.code.spec = "not a spec in the model"; // not an id
|
|
223
|
-
// expect(() => imodel.
|
|
223
|
+
// expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws("Error inserting element").to.have.property("metadata");
|
|
224
224
|
// elProps.code.spec = undefined as any; // nothing
|
|
225
|
-
// expect(() => imodel.
|
|
225
|
+
// expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws("Error inserting element").to.have.property("metadata");
|
|
226
226
|
});
|
|
227
227
|
it("should fail to insert an element with a duplicate valid code", () => {
|
|
228
228
|
assert.exists(imodel.elements);
|
|
@@ -234,7 +234,7 @@ describe("Code Tests", () => {
|
|
|
234
234
|
userLabel: 'RF1.dgn',
|
|
235
235
|
federationGuid: undefined,
|
|
236
236
|
};
|
|
237
|
-
const id = imodel.
|
|
237
|
+
const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
238
238
|
assert.exists(id);
|
|
239
239
|
assert.isTrue(Id64.isValidId64(id));
|
|
240
240
|
const elProps2 = {
|
|
@@ -245,7 +245,7 @@ describe("Code Tests", () => {
|
|
|
245
245
|
userLabel: 'RF1.dgn',
|
|
246
246
|
federationGuid: undefined,
|
|
247
247
|
};
|
|
248
|
-
expect(() => imodel.
|
|
248
|
+
expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps2))).throws("Error inserting element").to.have.property("metadata");
|
|
249
249
|
});
|
|
250
250
|
});
|
|
251
251
|
describe("Code Update Tests", () => {
|
|
@@ -259,21 +259,21 @@ describe("Code Tests", () => {
|
|
|
259
259
|
userLabel: 'RF1.dgn',
|
|
260
260
|
federationGuid: undefined,
|
|
261
261
|
};
|
|
262
|
-
const elementId = imodel.
|
|
262
|
+
const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
263
263
|
const element = imodel.elements.getElement(elementId);
|
|
264
264
|
assert.equal(element.code.value, elProps.code.value);
|
|
265
265
|
assert.equal(element.code.spec, elProps.code.spec);
|
|
266
266
|
assert.equal(element.code.scope, elProps.code.scope);
|
|
267
267
|
let newCode = new Code({ scope: "0x1", spec: "0x10", value: "UpdatedValue.dgn2" });
|
|
268
268
|
element.code = newCode;
|
|
269
|
-
element.update();
|
|
269
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
270
270
|
const updatedElement = imodel.elements.getElement(elementId);
|
|
271
271
|
assert.equal(updatedElement.code.value, newCode.value);
|
|
272
272
|
assert.equal(updatedElement.code.spec, newCode.spec);
|
|
273
273
|
assert.equal(updatedElement.code.scope, newCode.scope);
|
|
274
274
|
newCode = new Code({ scope: "0x12", spec: "0x11", value: "UpdatedValue.dgn2" });
|
|
275
275
|
element.code = newCode;
|
|
276
|
-
element.update();
|
|
276
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
277
277
|
const updatedElement2 = imodel.elements.getElement(elementId);
|
|
278
278
|
assert.equal(updatedElement2.code.value, newCode.value);
|
|
279
279
|
assert.equal(updatedElement2.code.spec, newCode.spec);
|
|
@@ -289,7 +289,7 @@ describe("Code Tests", () => {
|
|
|
289
289
|
userLabel: 'RF1.dgn',
|
|
290
290
|
federationGuid: undefined,
|
|
291
291
|
};
|
|
292
|
-
const elementId = imodel.
|
|
292
|
+
const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
293
293
|
const element = imodel.elements.getElement(elementId);
|
|
294
294
|
assert.equal(element.code.value, elProps.code.value);
|
|
295
295
|
assert.equal(element.code.spec, elProps.code.spec);
|
|
@@ -302,13 +302,13 @@ describe("Code Tests", () => {
|
|
|
302
302
|
userLabel: 'RF1.dgn',
|
|
303
303
|
federationGuid: undefined,
|
|
304
304
|
};
|
|
305
|
-
const elementId2 = imodel.
|
|
305
|
+
const elementId2 = withEditTxn(imodel, (txn) => txn.insertElement(elProps2));
|
|
306
306
|
const element2 = imodel.elements.getElement(elementId2);
|
|
307
307
|
assert.equal(element2.code.value, elProps2.code.value);
|
|
308
308
|
assert.equal(element2.code.spec, elProps2.code.spec);
|
|
309
309
|
assert.equal(element2.code.scope, elProps2.code.scope);
|
|
310
310
|
element.code = element2.code;
|
|
311
|
-
expect(() => element.update()).to.throw("Error updating element").to.have.property("metadata");
|
|
311
|
+
withEditTxn(imodel, (txn) => { expect(() => element.update(txn)).to.throw("Error updating element").to.have.property("metadata"); });
|
|
312
312
|
});
|
|
313
313
|
it("should update an element code with edge case code values", () => {
|
|
314
314
|
assert.exists(imodel.elements);
|
|
@@ -320,39 +320,39 @@ describe("Code Tests", () => {
|
|
|
320
320
|
userLabel: 'RF1.dgn',
|
|
321
321
|
federationGuid: undefined,
|
|
322
322
|
};
|
|
323
|
-
const elementId = imodel.
|
|
323
|
+
const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
324
324
|
const element = imodel.elements.getElement(elementId);
|
|
325
325
|
assert.equal(element.code.value, elProps.code.value);
|
|
326
326
|
assert.equal(element.code.spec, elProps.code.spec);
|
|
327
327
|
assert.equal(element.code.scope, elProps.code.scope);
|
|
328
328
|
let newCode = new Code({ scope: "0x1", spec: "0x10", value: "" }); // empty value
|
|
329
329
|
element.code = newCode;
|
|
330
|
-
element.update();
|
|
330
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
331
331
|
const updatedElement = imodel.elements.getElement(elementId);
|
|
332
332
|
assert.equal(updatedElement.code.value, newCode.value);
|
|
333
333
|
assert.equal(updatedElement.code.spec, newCode.spec);
|
|
334
334
|
assert.equal(updatedElement.code.scope, newCode.scope);
|
|
335
335
|
newCode = new Code({ scope: "0x1", spec: "0x10", value: "validcodeagain" }); // reset the code
|
|
336
336
|
element.code = newCode;
|
|
337
|
-
element.update();
|
|
337
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
338
338
|
newCode = new Code({ scope: "0x1", spec: "0x11" }); // NULL value
|
|
339
339
|
newCode.value = undefined;
|
|
340
340
|
element.code = newCode;
|
|
341
|
-
element.update();
|
|
341
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
342
342
|
const updatedElement2 = imodel.elements.getElement(elementId);
|
|
343
343
|
assert.equal(updatedElement2.code.value, "");
|
|
344
344
|
assert.equal(updatedElement2.code.spec, newCode.spec);
|
|
345
345
|
assert.equal(updatedElement2.code.scope, newCode.scope);
|
|
346
346
|
newCode = Code.createEmpty(); // Empty Code
|
|
347
347
|
element.code = newCode;
|
|
348
|
-
element.update();
|
|
348
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
349
349
|
const updatedElement3 = imodel.elements.getElement(elementId);
|
|
350
350
|
assert.equal(updatedElement3.code.value, newCode.value);
|
|
351
351
|
assert.equal(updatedElement3.code.spec, newCode.spec);
|
|
352
352
|
assert.equal(updatedElement3.code.scope, newCode.scope);
|
|
353
353
|
newCode = new Code({ scope: "0x1", spec: "0x11", value: "\xa0" }); // non-breaking space value
|
|
354
354
|
element.code = newCode;
|
|
355
|
-
element.update();
|
|
355
|
+
withEditTxn(imodel, (txn) => element.update(txn));
|
|
356
356
|
const updatedElement4 = imodel.elements.getElement(elementId);
|
|
357
357
|
assert.equal(updatedElement4.code.value, "");
|
|
358
358
|
assert.equal(updatedElement4.code.spec, newCode.spec);
|
|
@@ -368,21 +368,21 @@ describe("Code Tests", () => {
|
|
|
368
368
|
userLabel: 'RF1.dgn',
|
|
369
369
|
federationGuid: undefined,
|
|
370
370
|
};
|
|
371
|
-
const elementId = imodel.
|
|
371
|
+
const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));
|
|
372
372
|
const element = imodel.elements.getElement(elementId);
|
|
373
373
|
assert.equal(element.code.value, elProps.code.value);
|
|
374
374
|
assert.equal(element.code.spec, elProps.code.spec);
|
|
375
375
|
assert.equal(element.code.scope, elProps.code.scope);
|
|
376
376
|
let newCode = new Code({ scope: "", spec: "0x10", value: "newcode5" }); // empty scope
|
|
377
377
|
element.code = newCode;
|
|
378
|
-
expect(() => element.update()).to.throw("Error updating element").to.have.property("metadata");
|
|
378
|
+
withEditTxn(imodel, (txn) => { expect(() => element.update(txn)).to.throw("Error updating element").to.have.property("metadata"); });
|
|
379
379
|
const updatedElement = imodel.elements.getElement(elementId);
|
|
380
380
|
assert.equal(updatedElement.code.value, elProps.code.value);
|
|
381
381
|
assert.equal(updatedElement.code.spec, elProps.code.spec);
|
|
382
382
|
assert.equal(updatedElement.code.scope, elProps.code.scope);
|
|
383
383
|
newCode = new Code({ scope: "not a real id", spec: "0x10", value: "newcode5" }); // bad id
|
|
384
384
|
element.code = newCode;
|
|
385
|
-
expect(() => element.update()).to.throw("Error updating element").to.have.property("metadata");
|
|
385
|
+
withEditTxn(imodel, (txn) => { expect(() => element.update(txn)).to.throw("Error updating element").to.have.property("metadata"); });
|
|
386
386
|
const updatedElement2 = imodel.elements.getElement(elementId);
|
|
387
387
|
assert.equal(updatedElement2.code.value, elProps.code.value);
|
|
388
388
|
assert.equal(updatedElement2.code.spec, elProps.code.spec);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Code.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/Code.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, expect } from \"chai\";\nimport * as path from \"node:path\";\nimport { SnapshotDb } from \"../../core-backend\";\nimport { Code, ElementProps } from \"@itwin/core-common\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { Id64 } from \"@itwin/core-bentley\";\n\ndescribe(\"Code Tests\", () => {\n let imodel: SnapshotDb;\n\n before(async () => {\n IModelTestUtils.registerTestBimSchema();\n const seedFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"test.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]);\n imodel.saveChanges();\n });\n\n after(() => {\n imodel.close();\n });\n\n describe(\"Code Query Tests\", () => {\n it(\"should query an element by code\", () => {\n assert.exists(imodel.elements);\n const code = new Code({ scope: \"0x11\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(code);\n assert.exists(elementId);\n assert.equal(elementId, \"0x1e\");\n });\n\n it(\"should get undefined when querying an element with a bad code value\", () => {\n assert.exists(imodel.elements);\n const badCode = new Code({ scope: \"0x11\", spec: \"0x10\", value: \"RF1_does_not_exist.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(badCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying an element with an empty code\", () => {\n assert.exists(imodel.elements);\n const emptyCode = Code.createEmpty();\n const elementId = imodel.elements.queryElementIdByCode(emptyCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying an element with a non-breaking space value\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x11\", spec: \"0x10\", value: \"\\xa0\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = imodel.elements.insertElement(elProps);\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const nonBreakingSpaceCode = new Code({ scope: \"0x11\", spec: \"0x10\", value: \"\\xa0\" });\n const elementId = imodel.elements.queryElementIdByCode(nonBreakingSpaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should throw when querying an element with a NULL value\", () => {\n assert.exists(imodel.elements);\n const nullValueCode = { scope: \"0x11\", spec: \"0x10\", value: undefined as any };\n expect(() => imodel.elements.queryElementIdByCode(nullValueCode)).to.throw(\"Invalid Code\");\n });\n\n it(\"should throw when querying an element with an empty spec\", () => {\n assert.exists(imodel.elements);\n const noSpecCode = new Code({ scope: \"0x11\", spec: \"\", value: \"RF1.dgn\" });\n expect(() => imodel.elements.queryElementIdByCode(noSpecCode)).to.throw(\"Invalid CodeSpec\");\n });\n\n it(\"should get undefined when querying an element with a whitespace string spec\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x11\", spec: \" \", value: \"RF1.dgn\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = imodel.elements.insertElement(elProps);\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const whitespaceCode = { scope: \"0x11\", spec: \" \", value: \"RF1.dgn\" };\n const elementId = imodel.elements.queryElementIdByCode(whitespaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying an element with a non-breaking space spec\", () => {\n assert.exists(imodel.elements);\n const nonBreakingSpaceCode = { scope: \"0x11\", spec: \"\\xa0\", value: \"RF1.dgn\" };\n const elementId = imodel.elements.queryElementIdByCode(nonBreakingSpaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should throw when querying an element with a bad spec\", () => {\n assert.exists(imodel.elements);\n const badSpecCode = new Code({ scope: \"0x11\", spec: \"not a real id\", value: \"RF1.dgn\" });\n expect(() => imodel.elements.queryElementIdByCode(badSpecCode)).to.throw(\"Invalid CodeSpec\");\n });\n\n it(\"should get undefined when querying for an element id with no scope\", () => {\n assert.exists(imodel.elements);\n const noScopeCode = new Code({ scope: \"\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(noScopeCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying for an element id with non-breaking space scope\", () => {\n assert.exists(imodel.elements);\n const nonBreakingSpaceCode = new Code({ scope: \"\\xa0\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(nonBreakingSpaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying for an element id with a bad scope\", () => {\n assert.exists(imodel.elements);\n const badScopeCode = new Code({ scope: \"not a real id\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(badScopeCode);\n assert.isUndefined(elementId);\n });\n });\n\n describe(\"Code Insertion Tests\", () => {\n it(\"should insert an element with valid Code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = imodel.elements.insertElement(elProps);\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n });\n\n it(\"should fail to insert an element with invalid Code scope\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"bad scope\", spec: \"0x10\", value: \"new code\" }, // invalid scope value\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n expect(() => imodel.elements.insertElement(elProps)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n elProps.code.scope = \"0x34322\"; // valid id, but element doesn't exist\n expect(() => imodel.elements.insertElement(elProps)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n elProps.code.scope = undefined as any; // nothing\n expect(() => imodel.elements.insertElement(elProps)).throws(\"invalid code scope\").to.have.property(\"metadata\");\n });\n\n it(\"should insert and trim an element with a code value with trailing spaces\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test \" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = imodel.elements.insertElement(elProps);\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const queryResult = imodel.elements.queryElementIdByCode({ scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test \" });\n assert.exists(queryResult);\n assert.equal(queryResult, id);\n const element = imodel.elements.getElement(id);\n assert.equal(element.code.value, \"new code trailing space test\");\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test2\\xa0\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id2 = imodel.elements.insertElement(elProps2);\n assert.exists(id2);\n assert.isTrue(Id64.isValidId64(id2));\n\n const queryResult2 = imodel.elements.queryElementIdByCode({ scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test2\\xa0\" });\n assert.exists(queryResult2);\n assert.equal(queryResult2, id2);\n const element2 = imodel.elements.getElement(id2);\n assert.equal(element2.code.value, \"new code trailing space test2\");\n });\n\n it(\"should insert and trim an element with a code value that is only trailing spaces\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \" \" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = imodel.elements.insertElement(elProps);\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const element = imodel.elements.getElement(id);\n assert.equal(element.code.value, \"\");\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"\\xa0\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id2 = imodel.elements.insertElement(elProps2);\n assert.exists(id2);\n assert.isTrue(Id64.isValidId64(id2));\n\n const element2 = imodel.elements.getElement(id2);\n assert.equal(element2.code.value, \"\");\n });\n\n it(\"should fail to insert an element with invalid Code spec\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x34322\", value: \"new code\" }, // valid id, but element doesn't exist\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n expect(() => imodel.elements.insertElement(elProps)).throws(\"Error inserting element\").to.have.property(\"metadata\");\n // TODO: Non-ID values currently do not throw an error. This should be caught in TS\n // elProps.code.spec = \"not a spec in the model\"; // not an id\n // expect(() => imodel.elements.insertElement(elProps)).throws(\"Error inserting element\").to.have.property(\"metadata\");\n // elProps.code.spec = undefined as any; // nothing\n // expect(() => imodel.elements.insertElement(elProps)).throws(\"Error inserting element\").to.have.property(\"metadata\");\n });\n\n it(\"should fail to insert an element with a duplicate valid code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code duplicate test\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = imodel.elements.insertElement(elProps);\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code duplicate test\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n expect(() => imodel.elements.insertElement(elProps2)).throws(\"Error inserting element\").to.have.property(\"metadata\");\n });\n });\n\n describe(\"Code Update Tests\", () => {\n it(\"should update an element code to a valid code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode update\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = imodel.elements.insertElement(elProps);\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n let newCode = new Code({ scope: \"0x1\", spec: \"0x10\", value: \"UpdatedValue.dgn2\" });\n element.code = newCode;\n element.update();\n\n const updatedElement = imodel.elements.getElement(elementId);\n assert.equal(updatedElement.code.value, newCode.value);\n assert.equal(updatedElement.code.spec, newCode.spec);\n assert.equal(updatedElement.code.scope, newCode.scope);\n\n newCode = new Code({ scope: \"0x12\", spec: \"0x11\", value: \"UpdatedValue.dgn2\" });\n element.code = newCode;\n element.update();\n\n const updatedElement2 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement2.code.value, newCode.value);\n assert.equal(updatedElement2.code.spec, newCode.spec);\n assert.equal(updatedElement2.code.scope, newCode.scope);\n });\n\n it(\"should fail to update an element code to a duplicate valid code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode3\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = imodel.elements.insertElement(elProps);\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode32\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId2 = imodel.elements.insertElement(elProps2);\n const element2 = imodel.elements.getElement(elementId2);\n assert.equal(element2.code.value, elProps2.code.value);\n assert.equal(element2.code.spec, elProps2.code.spec);\n assert.equal(element2.code.scope, elProps2.code.scope);\n\n element.code = element2.code;\n expect(() => element.update()).to.throw(\"Error updating element\").to.have.property(\"metadata\");\n });\n\n it(\"should update an element code with edge case code values\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode4\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = imodel.elements.insertElement(elProps);\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n let newCode = new Code({ scope: \"0x1\", spec: \"0x10\", value: \"\" }); // empty value\n element.code = newCode;\n element.update();\n\n const updatedElement = imodel.elements.getElement(elementId);\n assert.equal(updatedElement.code.value, newCode.value);\n assert.equal(updatedElement.code.spec, newCode.spec);\n assert.equal(updatedElement.code.scope, newCode.scope);\n\n newCode = new Code({ scope: \"0x1\", spec: \"0x10\", value: \"validcodeagain\" }); // reset the code\n element.code = newCode;\n element.update();\n\n newCode = new Code({ scope: \"0x1\", spec: \"0x11\" }); // NULL value\n newCode.value = undefined as any;\n element.code = newCode;\n element.update();\n\n const updatedElement2 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement2.code.value, \"\");\n assert.equal(updatedElement2.code.spec, newCode.spec);\n assert.equal(updatedElement2.code.scope, newCode.scope);\n\n newCode = Code.createEmpty(); // Empty Code\n element.code = newCode;\n element.update();\n\n const updatedElement3 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement3.code.value, newCode.value);\n assert.equal(updatedElement3.code.spec, newCode.spec);\n assert.equal(updatedElement3.code.scope, newCode.scope);\n\n newCode = new Code({ scope: \"0x1\", spec: \"0x11\", value: \"\\xa0\" }); // non-breaking space value\n element.code = newCode;\n element.update();\n\n const updatedElement4 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement4.code.value, \"\");\n assert.equal(updatedElement4.code.spec, newCode.spec);\n assert.equal(updatedElement4.code.scope, newCode.scope);\n });\n\n it(\"should fail to update an element code with an invalid code scope\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode5\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = imodel.elements.insertElement(elProps);\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n let newCode = new Code({ scope: \"\", spec: \"0x10\", value: \"newcode5\" }); // empty scope\n element.code = newCode;\n expect(() => element.update()).to.throw(\"Error updating element\").to.have.property(\"metadata\");\n\n const updatedElement = imodel.elements.getElement(elementId);\n assert.equal(updatedElement.code.value, elProps.code.value);\n assert.equal(updatedElement.code.spec, elProps.code.spec);\n assert.equal(updatedElement.code.scope, elProps.code.scope);\n\n newCode = new Code({ scope: \"not a real id\", spec: \"0x10\", value: \"newcode5\" }); // bad id\n element.code = newCode;\n expect(() => element.update()).to.throw(\"Error updating element\").to.have.property(\"metadata\");\n\n const updatedElement2 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement2.code.value, elProps.code.value);\n assert.equal(updatedElement2.code.spec, elProps.code.spec);\n assert.equal(updatedElement2.code.scope, elProps.code.scope);\n });\n });\n});"]}
|
|
1
|
+
{"version":3,"file":"Code.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/Code.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, expect } from \"chai\";\nimport * as path from \"node:path\";\nimport { SnapshotDb } from \"../../core-backend\";\nimport { Code, ElementProps } from \"@itwin/core-common\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"Code Tests\", () => {\n let imodel: SnapshotDb;\n\n before(async () => {\n IModelTestUtils.registerTestBimSchema();\n const seedFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"test.bim\");\n imodel = IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]);\n });\n\n after(() => {\n imodel.close();\n });\n\n describe(\"Code Query Tests\", () => {\n it(\"should query an element by code\", () => {\n assert.exists(imodel.elements);\n const code = new Code({ scope: \"0x11\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(code);\n assert.exists(elementId);\n assert.equal(elementId, \"0x1e\");\n });\n\n it(\"should get undefined when querying an element with a bad code value\", () => {\n assert.exists(imodel.elements);\n const badCode = new Code({ scope: \"0x11\", spec: \"0x10\", value: \"RF1_does_not_exist.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(badCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying an element with an empty code\", () => {\n assert.exists(imodel.elements);\n const emptyCode = Code.createEmpty();\n const elementId = imodel.elements.queryElementIdByCode(emptyCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying an element with a non-breaking space value\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x11\", spec: \"0x10\", value: \"\\xa0\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const nonBreakingSpaceCode = new Code({ scope: \"0x11\", spec: \"0x10\", value: \"\\xa0\" });\n const elementId = imodel.elements.queryElementIdByCode(nonBreakingSpaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should throw when querying an element with a NULL value\", () => {\n assert.exists(imodel.elements);\n const nullValueCode = { scope: \"0x11\", spec: \"0x10\", value: undefined as any };\n expect(() => imodel.elements.queryElementIdByCode(nullValueCode)).to.throw(\"Invalid Code\");\n });\n\n it(\"should throw when querying an element with an empty spec\", () => {\n assert.exists(imodel.elements);\n const noSpecCode = new Code({ scope: \"0x11\", spec: \"\", value: \"RF1.dgn\" });\n expect(() => imodel.elements.queryElementIdByCode(noSpecCode)).to.throw(\"Invalid CodeSpec\");\n });\n\n it(\"should get undefined when querying an element with a whitespace string spec\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x11\", spec: \" \", value: \"RF1.dgn\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const whitespaceCode = { scope: \"0x11\", spec: \" \", value: \"RF1.dgn\" };\n const elementId = imodel.elements.queryElementIdByCode(whitespaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying an element with a non-breaking space spec\", () => {\n assert.exists(imodel.elements);\n const nonBreakingSpaceCode = { scope: \"0x11\", spec: \"\\xa0\", value: \"RF1.dgn\" };\n const elementId = imodel.elements.queryElementIdByCode(nonBreakingSpaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should throw when querying an element with a bad spec\", () => {\n assert.exists(imodel.elements);\n const badSpecCode = new Code({ scope: \"0x11\", spec: \"not a real id\", value: \"RF1.dgn\" });\n expect(() => imodel.elements.queryElementIdByCode(badSpecCode)).to.throw(\"Invalid CodeSpec\");\n });\n\n it(\"should get undefined when querying for an element id with no scope\", () => {\n assert.exists(imodel.elements);\n const noScopeCode = new Code({ scope: \"\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(noScopeCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying for an element id with non-breaking space scope\", () => {\n assert.exists(imodel.elements);\n const nonBreakingSpaceCode = new Code({ scope: \"\\xa0\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(nonBreakingSpaceCode);\n assert.isUndefined(elementId);\n });\n\n it(\"should get undefined when querying for an element id with a bad scope\", () => {\n assert.exists(imodel.elements);\n const badScopeCode = new Code({ scope: \"not a real id\", spec: \"0x10\", value: \"RF1.dgn\" });\n const elementId = imodel.elements.queryElementIdByCode(badScopeCode);\n assert.isUndefined(elementId);\n });\n });\n\n describe(\"Code Insertion Tests\", () => {\n it(\"should insert an element with valid Code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n });\n\n it(\"should fail to insert an element with invalid Code scope\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"bad scope\", spec: \"0x10\", value: \"new code\" }, // invalid scope value\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws(\"invalid code scope\").to.have.property(\"metadata\");\n elProps.code.scope = \"0x34322\"; // valid id, but element doesn't exist\n expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws(\"invalid code scope\").to.have.property(\"metadata\");\n elProps.code.scope = undefined as any; // nothing\n expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws(\"invalid code scope\").to.have.property(\"metadata\");\n });\n\n it(\"should insert and trim an element with a code value with trailing spaces\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test \" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const queryResult = imodel.elements.queryElementIdByCode({ scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test \" });\n assert.exists(queryResult);\n assert.equal(queryResult, id);\n const element = imodel.elements.getElement(id);\n assert.equal(element.code.value, \"new code trailing space test\");\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test2\\xa0\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id2 = withEditTxn(imodel, (txn) => txn.insertElement(elProps2));\n assert.exists(id2);\n assert.isTrue(Id64.isValidId64(id2));\n\n const queryResult2 = imodel.elements.queryElementIdByCode({ scope: \"0x1\", spec: \"0x10\", value: \"new code trailing space test2\\xa0\" });\n assert.exists(queryResult2);\n assert.equal(queryResult2, id2);\n const element2 = imodel.elements.getElement(id2);\n assert.equal(element2.code.value, \"new code trailing space test2\");\n });\n\n it(\"should insert and trim an element with a code value that is only trailing spaces\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \" \" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const element = imodel.elements.getElement(id);\n assert.equal(element.code.value, \"\");\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"\\xa0\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id2 = withEditTxn(imodel, (txn) => txn.insertElement(elProps2));\n assert.exists(id2);\n assert.isTrue(Id64.isValidId64(id2));\n\n const element2 = imodel.elements.getElement(id2);\n assert.equal(element2.code.value, \"\");\n });\n\n it(\"should fail to insert an element with invalid Code spec\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x34322\", value: \"new code\" }, // valid id, but element doesn't exist\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws(\"Error inserting element\").to.have.property(\"metadata\");\n // TODO: Non-ID values currently do not throw an error. This should be caught in TS\n // elProps.code.spec = \"not a spec in the model\"; // not an id\n // expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws(\"Error inserting element\").to.have.property(\"metadata\");\n // elProps.code.spec = undefined as any; // nothing\n // expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps))).throws(\"Error inserting element\").to.have.property(\"metadata\");\n });\n\n it(\"should fail to insert an element with a duplicate valid code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code duplicate test\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n const id = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n assert.exists(id);\n assert.isTrue(Id64.isValidId64(id));\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"new code duplicate test\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n\n expect(() => withEditTxn(imodel, (txn) => txn.insertElement(elProps2))).throws(\"Error inserting element\").to.have.property(\"metadata\");\n });\n });\n\n describe(\"Code Update Tests\", () => {\n it(\"should update an element code to a valid code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode update\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n let newCode = new Code({ scope: \"0x1\", spec: \"0x10\", value: \"UpdatedValue.dgn2\" });\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n const updatedElement = imodel.elements.getElement(elementId);\n assert.equal(updatedElement.code.value, newCode.value);\n assert.equal(updatedElement.code.spec, newCode.spec);\n assert.equal(updatedElement.code.scope, newCode.scope);\n\n newCode = new Code({ scope: \"0x12\", spec: \"0x11\", value: \"UpdatedValue.dgn2\" });\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n const updatedElement2 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement2.code.value, newCode.value);\n assert.equal(updatedElement2.code.spec, newCode.spec);\n assert.equal(updatedElement2.code.scope, newCode.scope);\n });\n\n it(\"should fail to update an element code to a duplicate valid code\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode3\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n const elProps2: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode32\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId2 = withEditTxn(imodel, (txn) => txn.insertElement(elProps2));\n const element2 = imodel.elements.getElement(elementId2);\n assert.equal(element2.code.value, elProps2.code.value);\n assert.equal(element2.code.spec, elProps2.code.spec);\n assert.equal(element2.code.scope, elProps2.code.scope);\n\n element.code = element2.code;\n withEditTxn(imodel, (txn) => { expect(() => element.update(txn)).to.throw(\"Error updating element\").to.have.property(\"metadata\"); });\n });\n\n it(\"should update an element code with edge case code values\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode4\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n let newCode = new Code({ scope: \"0x1\", spec: \"0x10\", value: \"\" }); // empty value\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n const updatedElement = imodel.elements.getElement(elementId);\n assert.equal(updatedElement.code.value, newCode.value);\n assert.equal(updatedElement.code.spec, newCode.spec);\n assert.equal(updatedElement.code.scope, newCode.scope);\n\n newCode = new Code({ scope: \"0x1\", spec: \"0x10\", value: \"validcodeagain\" }); // reset the code\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n newCode = new Code({ scope: \"0x1\", spec: \"0x11\" }); // NULL value\n newCode.value = undefined as any;\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n const updatedElement2 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement2.code.value, \"\");\n assert.equal(updatedElement2.code.spec, newCode.spec);\n assert.equal(updatedElement2.code.scope, newCode.scope);\n\n newCode = Code.createEmpty(); // Empty Code\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n const updatedElement3 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement3.code.value, newCode.value);\n assert.equal(updatedElement3.code.spec, newCode.spec);\n assert.equal(updatedElement3.code.scope, newCode.scope);\n\n newCode = new Code({ scope: \"0x1\", spec: \"0x11\", value: \"\\xa0\" }); // non-breaking space value\n element.code = newCode;\n withEditTxn(imodel, (txn) => element.update(txn));\n\n const updatedElement4 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement4.code.value, \"\");\n assert.equal(updatedElement4.code.spec, newCode.spec);\n assert.equal(updatedElement4.code.scope, newCode.scope);\n });\n\n it(\"should fail to update an element code with an invalid code scope\", () => {\n assert.exists(imodel.elements);\n const elProps: ElementProps = {\n classFullName: 'BisCore:RepositoryLink',\n code: { scope: \"0x1\", spec: \"0x10\", value: \"newcode5\" },\n id: '0x1e',\n model: '0x11',\n userLabel: 'RF1.dgn',\n federationGuid: undefined,\n };\n const elementId = withEditTxn(imodel, (txn) => txn.insertElement(elProps));\n const element = imodel.elements.getElement(elementId);\n assert.equal(element.code.value, elProps.code.value);\n assert.equal(element.code.spec, elProps.code.spec);\n assert.equal(element.code.scope, elProps.code.scope);\n\n let newCode = new Code({ scope: \"\", spec: \"0x10\", value: \"newcode5\" }); // empty scope\n element.code = newCode;\n withEditTxn(imodel, (txn) => { expect(() => element.update(txn)).to.throw(\"Error updating element\").to.have.property(\"metadata\"); });\n\n const updatedElement = imodel.elements.getElement(elementId);\n assert.equal(updatedElement.code.value, elProps.code.value);\n assert.equal(updatedElement.code.spec, elProps.code.spec);\n assert.equal(updatedElement.code.scope, elProps.code.scope);\n\n newCode = new Code({ scope: \"not a real id\", spec: \"0x10\", value: \"newcode5\" }); // bad id\n element.code = newCode;\n withEditTxn(imodel, (txn) => { expect(() => element.update(txn)).to.throw(\"Error updating element\").to.have.property(\"metadata\"); });\n\n const updatedElement2 = imodel.elements.getElement(elementId);\n assert.equal(updatedElement2.code.value, elProps.code.value);\n assert.equal(updatedElement2.code.spec, elProps.code.spec);\n assert.equal(updatedElement2.code.scope, elProps.code.scope);\n });\n });\n});\n\n\n"]}
|
|
@@ -12,6 +12,7 @@ import { DefinitionContainer, DefinitionModel, DocumentListModel, Drawing, Drawi
|
|
|
12
12
|
import { deleteElementSubTrees, deleteElementTree, ElementTreeBottomUp, ElementTreeWalkerScope } from "../../ElementTreeWalker";
|
|
13
13
|
import { IModelTestUtils } from "../IModelTestUtils";
|
|
14
14
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
15
|
+
import { withEditTxn } from "../../EditTxn";
|
|
15
16
|
// Test class that collects the results of a bottom-up tree walk
|
|
16
17
|
class ElementTreeCollector extends ElementTreeBottomUp {
|
|
17
18
|
subModels = [];
|
|
@@ -32,7 +33,7 @@ class ElementTreeCollector extends ElementTreeBottomUp {
|
|
|
32
33
|
this.elements.push(elementId);
|
|
33
34
|
}
|
|
34
35
|
collect(topElement) {
|
|
35
|
-
this.processElementTree(topElement, ElementTreeWalkerScope.createTopScope(this.
|
|
36
|
+
this.processElementTree(topElement, ElementTreeWalkerScope.createTopScope(this.txn.iModel, topElement));
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
class SelectedElementCollector extends ElementTreeCollector {
|
|
@@ -120,50 +121,52 @@ describe("ElementTreeWalker", () => {
|
|
|
120
121
|
+- PhysicalPartition -- [PhysicalModel]
|
|
121
122
|
PhysicalObject, PhysicalObject, PhysicalObject (grouped)
|
|
122
123
|
*/
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
124
|
+
withEditTxn(iModel, (txn) => {
|
|
125
|
+
repositoryLinkId = IModelTestUtils.insertRepositoryLink(txn, "test link", "foo", "bar");
|
|
126
|
+
jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, "Job").insert(txn);
|
|
127
|
+
childSubject = Subject.insert(txn, jobSubjectId, "Child Subject");
|
|
128
|
+
definitionModelId = DefinitionModel.insert(txn, jobSubjectId, "Definition");
|
|
129
|
+
spatialCategoryId = SpatialCategory.insert(txn, definitionModelId, "SpatialCategory", new SubCategoryAppearance());
|
|
130
|
+
drawingDefinitionModelId = DefinitionModel.insert(txn, jobSubjectId, "DrawingDefinition");
|
|
131
|
+
drawingCategoryId = DrawingCategory.insert(txn, drawingDefinitionModelId, "DrawingCategory", new SubCategoryAppearance());
|
|
132
|
+
drawingSubCategory1Id = SubCategory.insert(txn, drawingCategoryId, "SubCategory1", new SubCategoryAppearance());
|
|
133
|
+
drawingSubCategory2Id = SubCategory.insert(txn, drawingCategoryId, "SubCategory2", new SubCategoryAppearance());
|
|
134
|
+
definitionContainerId = DefinitionContainer.insert(txn, definitionModelId, Code.createEmpty());
|
|
135
|
+
nestedSpatialCategoryId = SpatialCategory.insert(txn, definitionContainerId, "nested", {});
|
|
136
|
+
xsGroup = txn.insertElement({ classFullName: ExternalSourceGroup.classFullName, model: drawingDefinitionModelId, code: Code.createEmpty() });
|
|
137
|
+
xsElement = txn.insertElement({ classFullName: ExternalSource.classFullName, model: drawingDefinitionModelId, parent: new ElementOwnsChildElements(xsGroup), code: Code.createEmpty() });
|
|
138
|
+
documentListModelId = DocumentListModel.insert(txn, jobSubjectId, "Document");
|
|
139
|
+
assert.isTrue(Id64.isValidId64(documentListModelId));
|
|
140
|
+
drawingModelId = Drawing.insert(txn, documentListModelId, "Drawing");
|
|
141
|
+
const drawingGraphicProps1 = {
|
|
142
|
+
classFullName: DrawingGraphic.classFullName,
|
|
143
|
+
model: drawingModelId,
|
|
144
|
+
category: drawingCategoryId,
|
|
145
|
+
code: Code.createEmpty(),
|
|
146
|
+
userLabel: "DrawingGraphic1",
|
|
147
|
+
geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),
|
|
148
|
+
placement: { origin: Point2d.create(2, 2), angle: 0 },
|
|
149
|
+
};
|
|
150
|
+
drawingGraphicId1 = txn.insertElement(drawingGraphicProps1);
|
|
151
|
+
[, physicalModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(txn, PhysicalPartition.createCode(iModel, childSubject, "Physical"), false, childSubject);
|
|
152
|
+
const elementProps = {
|
|
153
|
+
classFullName: "TestBim:TestPhysicalObject",
|
|
154
|
+
model: physicalModelId,
|
|
155
|
+
category: spatialCategoryId,
|
|
156
|
+
code: Code.createEmpty(),
|
|
157
|
+
};
|
|
158
|
+
const elementProps2 = {
|
|
159
|
+
classFullName: "TestBim:TestPhysicalObject",
|
|
160
|
+
model: physicalModelId,
|
|
161
|
+
category: nestedSpatialCategoryId,
|
|
162
|
+
code: Code.createEmpty(),
|
|
163
|
+
};
|
|
164
|
+
physicalObjectId1 = txn.insertElement(iModel.elements.createElement(elementProps).toJSON());
|
|
165
|
+
physicalObjectId2 = txn.insertElement(iModel.elements.createElement(elementProps2).toJSON());
|
|
166
|
+
physicalObjectId3 = txn.insertElement(iModel.elements.createElement(elementProps).toJSON());
|
|
167
|
+
txn.insertRelationship(ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId2).toJSON());
|
|
168
|
+
txn.insertRelationship(ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId3).toJSON());
|
|
169
|
+
});
|
|
167
170
|
assert.isTrue(doesElementExist(iModel, repositoryLinkId));
|
|
168
171
|
assert.equal(iModel.elements.getElement(jobSubjectId).parent?.id, IModel.rootSubjectId);
|
|
169
172
|
assert.equal(iModel.elements.getElement(definitionModelId).parent?.id, jobSubjectId);
|
|
@@ -238,7 +241,9 @@ describe("ElementTreeWalker", () => {
|
|
|
238
241
|
assert.isTrue(collector2.elements.includes(physicalObjectId3));
|
|
239
242
|
}
|
|
240
243
|
// Test the deleteElementTree function
|
|
241
|
-
|
|
244
|
+
withEditTxn(iModel, (txn) => {
|
|
245
|
+
deleteElementTree(txn, jobSubjectId);
|
|
246
|
+
});
|
|
242
247
|
assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));
|
|
243
248
|
assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));
|
|
244
249
|
assert.isTrue(doesElementExist(iModel, repositoryLinkId), "RepositoryLink should not have been deleted, since it is not under Job Subject");
|
|
@@ -293,7 +298,9 @@ describe("ElementTreeWalker", () => {
|
|
|
293
298
|
toPrune.add(drawingModelId);
|
|
294
299
|
toPrune.add(drawingCategoryId);
|
|
295
300
|
toPrune.add(physicalObjectId3);
|
|
296
|
-
|
|
301
|
+
withEditTxn(iModel, (txn) => {
|
|
302
|
+
deleteElementSubTrees(txn, jobSubjectId, (elementId) => toPrune.has(elementId));
|
|
303
|
+
});
|
|
297
304
|
assert.isFalse(doesElementExist(iModel, drawingCategoryId));
|
|
298
305
|
assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));
|
|
299
306
|
assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));
|
|
@@ -348,7 +355,9 @@ describe("ElementTreeWalker", () => {
|
|
|
348
355
|
const toPrune = new Set();
|
|
349
356
|
toPrune.add(drawingDefinitionModelId);
|
|
350
357
|
toPrune.add(documentListModelId); // (also get rid of the elements that use the definitions)
|
|
351
|
-
|
|
358
|
+
withEditTxn(iModel, (txn) => {
|
|
359
|
+
deleteElementSubTrees(txn, jobSubjectId, (elementId) => toPrune.has(elementId));
|
|
360
|
+
});
|
|
352
361
|
assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));
|
|
353
362
|
assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));
|
|
354
363
|
assert.isFalse(doesElementExist(iModel, drawingCategoryId));
|