@itwin/core-backend 5.9.0-dev.9 → 5.10.0-dev.1
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 +18 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +6 -3
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +255 -249
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.d.ts +186 -0
- package/lib/cjs/ChangesetReader.d.ts.map +1 -0
- package/lib/cjs/ChangesetReader.js +372 -0
- package/lib/cjs/ChangesetReader.js.map +1 -0
- package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
- package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
- package/lib/cjs/ChangesetReaderTypes.js +23 -0
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.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/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts +55 -1
- package/lib/cjs/EditTxn.d.ts.map +1 -1
- package/lib/cjs/EditTxn.js +43 -1
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.d.ts +69 -0
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +36 -0
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.d.ts +15 -0
- package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
- package/lib/cjs/GeographicCRSServices.js +13 -4
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +9 -1
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +32 -13
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +20 -9
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +34 -0
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +24 -0
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
- package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
- package/lib/cjs/PartialChangeUnifier.js +234 -0
- package/lib/cjs/PartialChangeUnifier.js.map +1 -0
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +14 -0
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +25 -0
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +19 -7
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +77 -25
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.d.ts.map +1 -1
- package/lib/cjs/ViewStore.js +63 -21
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.d.ts +3 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +3 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
- package/lib/cjs/internal/IntegrityCheck.js +22 -22
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +33 -33
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.d.ts +6 -4
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +6 -3
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +255 -249
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +186 -0
- package/lib/esm/ChangesetReader.d.ts.map +1 -0
- package/lib/esm/ChangesetReader.js +368 -0
- package/lib/esm/ChangesetReader.js.map +1 -0
- package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
- package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
- package/lib/esm/ChangesetReaderTypes.js +20 -0
- package/lib/esm/ChangesetReaderTypes.js.map +1 -0
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.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/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/EditTxn.d.ts +55 -1
- package/lib/esm/EditTxn.d.ts.map +1 -1
- package/lib/esm/EditTxn.js +43 -1
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.d.ts +69 -0
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +36 -0
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.d.ts +15 -0
- package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
- package/lib/esm/GeographicCRSServices.js +12 -4
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +9 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +33 -14
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.d.ts.map +1 -1
- package/lib/esm/IpcHost.js +20 -9
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +34 -0
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +24 -0
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PartialChangeUnifier.d.ts +77 -0
- package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
- package/lib/esm/PartialChangeUnifier.js +230 -0
- package/lib/esm/PartialChangeUnifier.js.map +1 -0
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/esm/SqliteChangesetReader.js +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +14 -0
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +25 -0
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +19 -7
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +78 -26
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.d.ts.map +1 -1
- package/lib/esm/ViewStore.js +64 -22
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.d.ts +3 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +3 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
- package/lib/esm/internal/IntegrityCheck.js +22 -22
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +33 -33
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +1 -0
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +5 -0
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.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/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- 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/LeaderGeometry.test.js +0 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- 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.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- 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 +819 -26
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +283 -142
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +57 -57
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +45 -45
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -13
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js +43 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +4201 -1671
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
- package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
- package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
- package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +90 -0
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.d.ts +6 -4
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteDefinitionElements.test.js","sourceRoot":"","sources":["../../../../src/test/element/DeleteDefinitionElements.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*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport { Id64, Id64Set } from \"@itwin/core-bentley\";\nimport { Point3d } from \"@itwin/core-geometry\";\nimport { GeometryPartProps, ImageSourceFormat, IModel } from \"@itwin/core-common\";\nimport { EditTxn } from \"../../EditTxn\";\nimport {\n CategorySelector, DisplayStyle2d, DisplayStyle3d, DrawingCategory, DrawingViewDefinition, GeometryPart, IModelJsFs, InformationPartitionElement,\n ModelSelector, OrthographicViewDefinition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, Subject, Texture,\n} from \"../../core-backend\";\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\n\ndescribe(\"DeleteDefinitionElements\", () => {\n const outputDir: string = path.join(KnownTestLocations.outputDir, \"DeleteDefinitionElements\");\n\n before(async () => {\n if (!IModelJsFs.existsSync(KnownTestLocations.outputDir)) {\n IModelJsFs.mkdirSync(KnownTestLocations.outputDir);\n }\n if (!IModelJsFs.existsSync(outputDir)) {\n IModelJsFs.mkdirSync(outputDir);\n }\n });\n\n it(\"should delete if not used\", async () => {\n const iModelFile: string = IModelTestUtils.prepareOutputFile(\"DeleteDefinitionElements\", \"DeleteDefinitionElements.bim\");\n const iModelDb = SnapshotDb.createEmpty(iModelFile, { rootSubject: { name: \"DeleteDefinitionElements\" } });\n await ExtensiveTestScenario.prepareDb(iModelDb);\n await ExtensiveTestScenario.populateDb(iModelDb);\n\n // Get ElementIds of DefinitionElements created by populateDb\n const subjectId = iModelDb.elements.queryElementIdByCode(Subject.createCode(iModelDb, IModel.rootSubjectId, \"Subject\"))!;\n const definitionModelId = iModelDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(iModelDb, subjectId, \"Definition\"))!;\n const spatialCategoryId = iModelDb.elements.queryElementIdByCode(SpatialCategory.createCode(iModelDb, definitionModelId, \"SpatialCategory\"))!;\n const subCategoryId = iModelDb.elements.queryElementIdByCode(SubCategory.createCode(iModelDb, spatialCategoryId, \"SubCategory\"))!;\n const spatialCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"SpatialCategories\"))!;\n const modelSelectorId = iModelDb.elements.queryElementIdByCode(ModelSelector.createCode(iModelDb, definitionModelId, \"SpatialModels\"))!;\n const displayStyle3dId = iModelDb.elements.queryElementIdByCode(DisplayStyle3d.createCode(iModelDb, definitionModelId, \"DisplayStyle3d\"))!;\n const viewId = iModelDb.elements.queryElementIdByCode(OrthographicViewDefinition.createCode(iModelDb, definitionModelId, \"Orthographic View\"))!;\n const drawingCategoryId = iModelDb.elements.queryElementIdByCode(DrawingCategory.createCode(iModelDb, definitionModelId, \"DrawingCategory\"))!;\n const drawingCategorySelectorId = iModelDb.elements.queryElementIdByCode(CategorySelector.createCode(iModelDb, definitionModelId, \"DrawingCategories\"))!;\n const displayStyle2dId = iModelDb.elements.queryElementIdByCode(DisplayStyle2d.createCode(iModelDb, definitionModelId, \"DisplayStyle2d\"))!;\n const drawingViewId = iModelDb.elements.queryElementIdByCode(DrawingViewDefinition.createCode(iModelDb, definitionModelId, \"Drawing View\"))!;\n const geometryPartId = iModelDb.elements.queryElementIdByCode(GeometryPart.createCode(iModelDb, definitionModelId, \"GeometryPart\"))!;\n const renderMaterialId = iModelDb.elements.queryElementIdByCode(RenderMaterialElement.createCode(iModelDb, definitionModelId, \"RenderMaterial\"))!;\n const textureId = iModelDb.elements.queryElementIdByCode(Texture.createCode(iModelDb, definitionModelId, \"Texture\"))!;\n const physicalObjectId1 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject1\");\n const physicalObjectId2 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject2\");\n const physicalObjectId3 = IModelTestUtils.queryByUserLabel(iModelDb, \"PhysicalObject3\");\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\n assert.isTrue(Id64.isValidId64(subCategoryId));\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\n assert.isTrue(Id64.isValidId64(modelSelectorId));\n assert.isTrue(Id64.isValidId64(displayStyle3dId));\n assert.isTrue(Id64.isValidId64(viewId));\n assert.isTrue(Id64.isValidId64(drawingCategoryId));\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\n assert.isTrue(Id64.isValidId64(displayStyle2dId));\n assert.isTrue(Id64.isValidId64(drawingViewId));\n assert.isTrue(Id64.isValidId64(geometryPartId));\n assert.isTrue(Id64.isValidId64(renderMaterialId));\n assert.isTrue(Id64.isValidId64(textureId));\n assert.isTrue(Id64.isValidId64(physicalObjectId1));\n assert.isTrue(Id64.isValidId64(physicalObjectId2));\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\n\n const txn = new EditTxn(iModelDb, \"delete definition elements\");\n txn.start();\n\n let usedDefinitionElementIds: Id64Set;\n const expectDeleteToThrow = (elementId: string) => assert.throws(() => txn.deleteElement(elementId));\n\n try {\n // make sure deleteDefinitionElements skips Elements that are not DefinitionElements\n usedDefinitionElementIds = txn.deleteDefinitionElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId1));\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId2));\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId3));\n assert.isDefined(iModelDb.elements.tryGetElement(subjectId));\n\n // make sure deleteDefinitionElements skips invalid Ids\n usedDefinitionElementIds = txn.deleteDefinitionElements([Id64.invalid, Id64.invalid]);\n assert.equal(usedDefinitionElementIds.size, 0);\n\n // delete/deleteDefinitionElements for a used GeometryPart should fail\n expectDeleteToThrow(geometryPartId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([geometryPartId]);\n assert.isTrue(usedDefinitionElementIds.has(geometryPartId));\n assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId));\n\n // deleteDefinitionElements for an unused GeometryPart should succeed, delete should still fail\n const unusedGeometryPartProps: GeometryPartProps = {\n classFullName: GeometryPart.classFullName,\n model: definitionModelId,\n code: GeometryPart.createCode(iModelDb, definitionModelId, \"Unused GeometryPart\"),\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\n };\n const unusedGeometryPartId = txn.insertElement(unusedGeometryPartProps);\n assert.isTrue(Id64.isValidId64(unusedGeometryPartId));\n expectDeleteToThrow(unusedGeometryPartId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedGeometryPartId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedGeometryPartId));\n\n // delete/deleteDefinitionElements for a used RenderMaterial should fail\n expectDeleteToThrow(renderMaterialId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([renderMaterialId]);\n assert.isTrue(usedDefinitionElementIds.has(renderMaterialId));\n assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId));\n\n // deleteDefinitionElements for an unused RenderMaterial should succeed, delete should still fail\n const unusedRenderMaterial = RenderMaterialElement.create(iModelDb, definitionModelId, \"Unused RenderMaterial\", { paletteName: \"PaletteName\" });\n const unusedRenderMaterialId = txn.insertElement(unusedRenderMaterial.toJSON());\n assert.isTrue(Id64.isValidId64(unusedRenderMaterialId));\n expectDeleteToThrow(unusedRenderMaterialId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedRenderMaterialId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedRenderMaterialId));\n\n // delete/deleteDefinitionElements for a used Texture should fail\n expectDeleteToThrow(textureId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([textureId]);\n assert.isTrue(usedDefinitionElementIds.has(textureId));\n assert.isDefined(iModelDb.elements.tryGetElement(textureId));\n\n // deleteDefinitionElements for an unused Texture should succeed, delete should still fail\n const textureData = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217, 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65, 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]).toString(\"base64\");\n const unusedTexture = Texture.createTexture(iModelDb, definitionModelId, \"Unused Texture\", ImageSourceFormat.Png, textureData, \"Description for Unused Texture\");\n const unusedTextureId = txn.insertElement(unusedTexture.toJSON());\n assert.isTrue(Id64.isValidId64(unusedTextureId));\n expectDeleteToThrow(unusedTextureId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedTextureId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedTextureId));\n\n // delete/deleteDefinitionElements for a used SpatialCategory should fail\n expectDeleteToThrow(spatialCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([spatialCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(spatialCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId));\n\n // delete/deleteDefinitionElements for a default SubCategory should fail\n const spatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId, SpatialCategory);\n const defaultSpatialSubCategoryId = spatialCategory.myDefaultSubCategoryId();\n expectDeleteToThrow(defaultSpatialSubCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([defaultSpatialSubCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(defaultSpatialSubCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(defaultSpatialSubCategoryId));\n\n // delete/deleteDefinitionElements for a used, non-default SubCategory should fail\n expectDeleteToThrow(subCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([subCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(subCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId));\n\n // deleteDefinitionElements for an unused SubCategory should succeed, delete should still fail\n const unusedSubCategory = SubCategory.create(iModelDb, spatialCategoryId, \"Unused SubCategory\", {});\n const unusedSubCategoryId = txn.insertElement(unusedSubCategory.toJSON());\n assert.isTrue(Id64.isValidId64(unusedSubCategoryId));\n expectDeleteToThrow(unusedSubCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedSubCategoryId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSubCategoryId));\n\n // deleteDefinitionElements for an unused SpatialCategory should succeed, delete should still fail\n const unusedSpatialCategory = SpatialCategory.create(iModelDb, definitionModelId, \"Unused SpatialCategory\");\n const unusedSpatialCategoryId = txn.insertElement(unusedSpatialCategory.toJSON());\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryId));\n const reloadedSpatialCategory = iModelDb.elements.getElement<SpatialCategory>(unusedSpatialCategoryId, SpatialCategory);\n const unusedSpatialCategoryDefaultSubCategoryId = reloadedSpatialCategory.myDefaultSubCategoryId();\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryDefaultSubCategoryId));\n expectDeleteToThrow(unusedSpatialCategoryId);\n expectDeleteToThrow(unusedSpatialCategoryDefaultSubCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedSpatialCategoryId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryId));\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryDefaultSubCategoryId));\n\n // delete/deleteDefinitionElements of a used DrawingCategory should fail\n expectDeleteToThrow(drawingCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([drawingCategoryId]);\n assert.isTrue(usedDefinitionElementIds.has(drawingCategoryId));\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategoryId));\n\n // deleteDefinitionElements for an unused DrawingCategory should succeed, delete should still fail\n const unusedDrawingCategory = DrawingCategory.create(iModelDb, definitionModelId, \"Unused DrawingCategory\");\n const unusedDrawingCategoryId = txn.insertElement(unusedDrawingCategory.toJSON());\n assert.isTrue(Id64.isValidId64(unusedDrawingCategoryId));\n const reloadedDrawingCategory = iModelDb.elements.getElement<DrawingCategory>(unusedDrawingCategoryId, DrawingCategory);\n const unusedDrawingSubCategoryId = reloadedDrawingCategory.myDefaultSubCategoryId();\n assert.isTrue(Id64.isValidId64(unusedDrawingSubCategoryId));\n expectDeleteToThrow(unusedDrawingSubCategoryId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedDrawingCategoryId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingCategoryId));\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingSubCategoryId));\n\n // delete/deleteDefinitionElements of DefinitionElements used by an existing SpatialViewDefinition should fail\n expectDeleteToThrow(spatialCategorySelectorId);\n expectDeleteToThrow(modelSelectorId);\n expectDeleteToThrow(displayStyle3dId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\n assert.isTrue(usedDefinitionElementIds.has(spatialCategorySelectorId));\n assert.isTrue(usedDefinitionElementIds.has(modelSelectorId));\n assert.isTrue(usedDefinitionElementIds.has(displayStyle3dId));\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\n assert.isDefined(iModelDb.elements.tryGetElement(modelSelectorId));\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle3dId));\n assert.isDefined(iModelDb.elements.tryGetElement(viewId));\n\n // deleteDefinitionElements should succeed when the list includes the SpatialViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\n expectDeleteToThrow(viewId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\n assert.isUndefined(iModelDb.elements.tryGetElement(modelSelectorId));\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle3dId));\n assert.isUndefined(iModelDb.elements.tryGetElement(viewId));\n\n // delete/deleteDefinitionElements of DefinitionElements used by an existing DrawingViewDefinition should fail\n expectDeleteToThrow(drawingCategorySelectorId);\n expectDeleteToThrow(displayStyle2dId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([drawingCategorySelectorId, displayStyle2dId]);\n assert.isTrue(usedDefinitionElementIds.has(drawingCategorySelectorId));\n assert.isTrue(usedDefinitionElementIds.has(displayStyle2dId));\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle2dId));\n assert.isDefined(iModelDb.elements.tryGetElement(drawingViewId));\n\n // deleteDefinitionElements should succeed when the list includes the DrawingViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\n expectDeleteToThrow(drawingViewId);\n usedDefinitionElementIds = txn.deleteDefinitionElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]);\n assert.equal(usedDefinitionElementIds.size, 0);\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle2dId));\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingViewId));\n\n txn.end();\n } finally {\n if (txn.isActive)\n txn.end(\"abandon\");\n\n iModelDb.close();\n }\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"DeleteDefinitionElements.test.js","sourceRoot":"","sources":["../../../../src/test/element/DeleteDefinitionElements.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { Id64, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\nimport { Code, CodeScopeSpec, GeometricElement2dProps, GeometryPartProps, ImageSourceFormat, IModel, PhysicalElementProps, PhysicalTypeProps, QueryBinder, QueryRowFormat, SubCategoryAppearance, TypeDefinitionElementProps } from \"@itwin/core-common\";\r\nimport { EditTxn } from \"../../EditTxn\";\r\nimport {\r\n CategorySelector, ChannelControl, DefinitionContainer, DefinitionModel, DisplayStyle2d, DisplayStyle3d, DocumentListModel, Drawing, DrawingCategory,\r\n DrawingGraphic, DrawingViewDefinition, GenericGraphicalType2d, GenericPhysicalType, GeometryPart,\r\n GraphicalElement2dIsOfType, IModelJsFs, InformationPartitionElement, ModelSelector, OrthographicViewDefinition, PhysicalElementIsOfType,\r\n PhysicalModel, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SubCategory, Subject, Texture,\r\n} from \"../../core-backend\";\r\nimport { ExtensiveTestScenario, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { withEditTxn } from \"../TestEditTxn\";\r\n\r\ndescribe(\"DeleteDefinitionElements\", () => {\r\n const outputDir: string = path.join(KnownTestLocations.outputDir, \"DeleteDefinitionElements\");\r\n\r\n let seedDb: SnapshotDb;\r\n let iModelDb: SnapshotDb;\r\n let subjectId: Id64String;\r\n let definitionModelId: Id64String;\r\n let physicalModelId: Id64String;\r\n let spatialCategoryId: Id64String;\r\n let subCategoryId: Id64String;\r\n let spatialCategorySelectorId: Id64String;\r\n let modelSelectorId: Id64String;\r\n let displayStyle3dId: Id64String;\r\n let viewId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let drawingCategorySelectorId: Id64String;\r\n let displayStyle2dId: Id64String;\r\n let drawingViewId: Id64String;\r\n let geometryPartId: Id64String;\r\n let renderMaterialId: Id64String;\r\n let textureId: Id64String;\r\n let physicalObjectId1: Id64String;\r\n let physicalObjectId2: Id64String;\r\n let physicalObjectId3: Id64String;\r\n\r\n before(async () => {\r\n if (!IModelJsFs.existsSync(KnownTestLocations.outputDir)) {\r\n IModelJsFs.mkdirSync(KnownTestLocations.outputDir);\r\n }\r\n if (!IModelJsFs.existsSync(outputDir)) {\r\n IModelJsFs.mkdirSync(outputDir);\r\n }\r\n\r\n const seedDbFile = IModelTestUtils.prepareOutputFile(\"DeleteDefinitionElements\", \"seed.bim\");\r\n if (IModelJsFs.existsSync(seedDbFile)) {\r\n IModelJsFs.removeSync(seedDbFile);\r\n }\r\n seedDb = SnapshotDb.createEmpty(seedDbFile, { rootSubject: { name: \"DeleteDefinitionElements\" } });\r\n await ExtensiveTestScenario.prepareDb(seedDb);\r\n await ExtensiveTestScenario.populateDb(seedDb);\r\n\r\n // Get ElementIds of DefinitionElements created by populateDb\r\n subjectId = seedDb.elements.queryElementIdByCode(Subject.createCode(seedDb, IModel.rootSubjectId, \"Subject\"))!;\r\n definitionModelId = seedDb.elements.queryElementIdByCode(InformationPartitionElement.createCode(seedDb, subjectId, \"Definition\"))!;\r\n physicalModelId = seedDb.elements.queryElementIdByCode(PhysicalPartition.createCode(seedDb, subjectId, \"Physical\"))!;\r\n spatialCategoryId = seedDb.elements.queryElementIdByCode(SpatialCategory.createCode(seedDb, definitionModelId, \"SpatialCategory\"))!;\r\n subCategoryId = seedDb.elements.queryElementIdByCode(SubCategory.createCode(seedDb, spatialCategoryId, \"SubCategory\"))!;\r\n spatialCategorySelectorId = seedDb.elements.queryElementIdByCode(CategorySelector.createCode(seedDb, definitionModelId, \"SpatialCategories\"))!;\r\n modelSelectorId = seedDb.elements.queryElementIdByCode(ModelSelector.createCode(seedDb, definitionModelId, \"SpatialModels\"))!;\r\n displayStyle3dId = seedDb.elements.queryElementIdByCode(DisplayStyle3d.createCode(seedDb, definitionModelId, \"DisplayStyle3d\"))!;\r\n viewId = seedDb.elements.queryElementIdByCode(OrthographicViewDefinition.createCode(seedDb, definitionModelId, \"Orthographic View\"))!;\r\n drawingCategoryId = seedDb.elements.queryElementIdByCode(DrawingCategory.createCode(seedDb, definitionModelId, \"DrawingCategory\"))!;\r\n drawingCategorySelectorId = seedDb.elements.queryElementIdByCode(CategorySelector.createCode(seedDb, definitionModelId, \"DrawingCategories\"))!;\r\n displayStyle2dId = seedDb.elements.queryElementIdByCode(DisplayStyle2d.createCode(seedDb, definitionModelId, \"DisplayStyle2d\"))!;\r\n drawingViewId = seedDb.elements.queryElementIdByCode(DrawingViewDefinition.createCode(seedDb, definitionModelId, \"Drawing View\"))!;\r\n geometryPartId = seedDb.elements.queryElementIdByCode(GeometryPart.createCode(seedDb, definitionModelId, \"GeometryPart\"))!;\r\n renderMaterialId = seedDb.elements.queryElementIdByCode(RenderMaterialElement.createCode(seedDb, definitionModelId, \"RenderMaterial\"))!;\r\n textureId = seedDb.elements.queryElementIdByCode(Texture.createCode(seedDb, definitionModelId, \"Texture\"))!;\r\n physicalObjectId1 = IModelTestUtils.queryByUserLabel(seedDb, \"PhysicalObject1\");\r\n physicalObjectId2 = IModelTestUtils.queryByUserLabel(seedDb, \"PhysicalObject2\");\r\n physicalObjectId3 = IModelTestUtils.queryByUserLabel(seedDb, \"PhysicalObject3\");\r\n\r\n assert.isTrue(Id64.isValidId64(physicalModelId));\r\n assert.isTrue(Id64.isValidId64(spatialCategoryId));\r\n assert.isTrue(Id64.isValidId64(subCategoryId));\r\n assert.isTrue(Id64.isValidId64(spatialCategorySelectorId));\r\n assert.isTrue(Id64.isValidId64(modelSelectorId));\r\n assert.isTrue(Id64.isValidId64(displayStyle3dId));\r\n assert.isTrue(Id64.isValidId64(viewId));\r\n assert.isTrue(Id64.isValidId64(drawingCategoryId));\r\n assert.isTrue(Id64.isValidId64(drawingCategorySelectorId));\r\n assert.isTrue(Id64.isValidId64(displayStyle2dId));\r\n assert.isTrue(Id64.isValidId64(drawingViewId));\r\n assert.isTrue(Id64.isValidId64(geometryPartId));\r\n assert.isTrue(Id64.isValidId64(renderMaterialId));\r\n assert.isTrue(Id64.isValidId64(textureId));\r\n assert.isTrue(Id64.isValidId64(physicalObjectId1));\r\n assert.isTrue(Id64.isValidId64(physicalObjectId2));\r\n assert.isTrue(Id64.isValidId64(physicalObjectId3));\r\n\r\n withEditTxn(seedDb, \"save changes\", () => { });\r\n });\r\n\r\n beforeEach(async () => {\r\n iModelDb = SnapshotDb.createFrom(seedDb, IModelTestUtils.prepareOutputFile(\"DeleteDefinitionElements\", \"DeleteDefinitionElements.bim\"));\r\n assert.isTrue(iModelDb.isOpen);\r\n iModelDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n });\r\n\r\n afterEach(() => {\r\n if (iModelDb.isOpen)\r\n iModelDb.close();\r\n });\r\n\r\n after(() => {\r\n if (seedDb.isOpen)\r\n seedDb.close();\r\n });\r\n\r\n it(\"should delete if not used\", async () => {\r\n const txn = new EditTxn(iModelDb, \"delete definition elements\");\r\n txn.start();\r\n\r\n let usedDefinitionElementIds: Id64Set;\r\n const expectDeleteToThrow = (elementId: string) => assert.throws(() => txn.deleteElement(elementId));\r\n\r\n try {\r\n // make sure deleteDefinitionElements skips Elements that are not DefinitionElements\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId1));\r\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId2));\r\n assert.isDefined(iModelDb.elements.tryGetElement(physicalObjectId3));\r\n assert.isDefined(iModelDb.elements.tryGetElement(subjectId));\r\n\r\n // make sure deleteDefinitionElements skips invalid Ids\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([Id64.invalid, Id64.invalid]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n\r\n // delete/deleteDefinitionElements for a used GeometryPart should fail\r\n expectDeleteToThrow(geometryPartId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([geometryPartId]);\r\n assert.isTrue(usedDefinitionElementIds.has(geometryPartId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId));\r\n\r\n // deleteDefinitionElements for an unused GeometryPart should succeed, delete should still fail\r\n const unusedGeometryPartProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: GeometryPart.createCode(iModelDb, definitionModelId, \"Unused GeometryPart\"),\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const unusedGeometryPartId = txn.insertElement(unusedGeometryPartProps);\r\n assert.isTrue(Id64.isValidId64(unusedGeometryPartId));\r\n expectDeleteToThrow(unusedGeometryPartId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedGeometryPartId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedGeometryPartId));\r\n\r\n // delete/deleteDefinitionElements for a used RenderMaterial should fail\r\n expectDeleteToThrow(renderMaterialId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([renderMaterialId]);\r\n assert.isTrue(usedDefinitionElementIds.has(renderMaterialId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId));\r\n\r\n // deleteDefinitionElements for an unused RenderMaterial should succeed, delete should still fail\r\n const unusedRenderMaterial = RenderMaterialElement.create(iModelDb, definitionModelId, \"Unused RenderMaterial\", { paletteName: \"PaletteName\" });\r\n const unusedRenderMaterialId = txn.insertElement(unusedRenderMaterial.toJSON());\r\n assert.isTrue(Id64.isValidId64(unusedRenderMaterialId));\r\n expectDeleteToThrow(unusedRenderMaterialId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedRenderMaterialId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedRenderMaterialId));\r\n\r\n // delete/deleteDefinitionElements for a used Texture should fail\r\n expectDeleteToThrow(textureId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([textureId]);\r\n assert.isTrue(usedDefinitionElementIds.has(textureId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(textureId));\r\n\r\n // deleteDefinitionElements for an unused Texture should succeed, delete should still fail\r\n const textureData = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217, 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65, 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]).toString(\"base64\");\r\n const unusedTexture = Texture.createTexture(iModelDb, definitionModelId, \"Unused Texture\", ImageSourceFormat.Png, textureData, \"Description for Unused Texture\");\r\n const unusedTextureId = txn.insertElement(unusedTexture.toJSON());\r\n assert.isTrue(Id64.isValidId64(unusedTextureId));\r\n expectDeleteToThrow(unusedTextureId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedTextureId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedTextureId));\r\n\r\n // delete/deleteDefinitionElements for a used SpatialCategory should fail\r\n expectDeleteToThrow(spatialCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([spatialCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(spatialCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId));\r\n\r\n // delete/deleteDefinitionElements for a default SubCategory should fail\r\n const spatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId, SpatialCategory);\r\n const defaultSpatialSubCategoryId = spatialCategory.myDefaultSubCategoryId();\r\n expectDeleteToThrow(defaultSpatialSubCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([defaultSpatialSubCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(defaultSpatialSubCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(defaultSpatialSubCategoryId));\r\n\r\n // delete/deleteDefinitionElements for a used, non-default SubCategory should fail\r\n expectDeleteToThrow(subCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([subCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(subCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId));\r\n\r\n // deleteDefinitionElements for an unused SubCategory should succeed, delete should still fail\r\n const unusedSubCategory = SubCategory.create(iModelDb, spatialCategoryId, \"Unused SubCategory\", {});\r\n const unusedSubCategoryId = txn.insertElement(unusedSubCategory.toJSON());\r\n assert.isTrue(Id64.isValidId64(unusedSubCategoryId));\r\n expectDeleteToThrow(unusedSubCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedSubCategoryId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSubCategoryId));\r\n\r\n // deleteDefinitionElements for an unused SpatialCategory should succeed, delete should still fail\r\n const unusedSpatialCategory = SpatialCategory.create(iModelDb, definitionModelId, \"Unused SpatialCategory\");\r\n const unusedSpatialCategoryId = txn.insertElement(unusedSpatialCategory.toJSON());\r\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryId));\r\n const reloadedSpatialCategory = iModelDb.elements.getElement<SpatialCategory>(unusedSpatialCategoryId, SpatialCategory);\r\n const unusedSpatialCategoryDefaultSubCategoryId = reloadedSpatialCategory.myDefaultSubCategoryId();\r\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryDefaultSubCategoryId));\r\n expectDeleteToThrow(unusedSpatialCategoryId);\r\n expectDeleteToThrow(unusedSpatialCategoryDefaultSubCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedSpatialCategoryId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryDefaultSubCategoryId));\r\n\r\n // delete/deleteDefinitionElements of a used DrawingCategory should fail\r\n expectDeleteToThrow(drawingCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([drawingCategoryId]);\r\n assert.isTrue(usedDefinitionElementIds.has(drawingCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategoryId));\r\n\r\n // deleteDefinitionElements for an unused DrawingCategory should succeed, delete should still fail\r\n const unusedDrawingCategory = DrawingCategory.create(iModelDb, definitionModelId, \"Unused DrawingCategory\");\r\n const unusedDrawingCategoryId = txn.insertElement(unusedDrawingCategory.toJSON());\r\n assert.isTrue(Id64.isValidId64(unusedDrawingCategoryId));\r\n const reloadedDrawingCategory = iModelDb.elements.getElement<DrawingCategory>(unusedDrawingCategoryId, DrawingCategory);\r\n const unusedDrawingSubCategoryId = reloadedDrawingCategory.myDefaultSubCategoryId();\r\n assert.isTrue(Id64.isValidId64(unusedDrawingSubCategoryId));\r\n expectDeleteToThrow(unusedDrawingSubCategoryId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([unusedDrawingCategoryId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingCategoryId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingSubCategoryId));\r\n\r\n // delete/deleteDefinitionElements of DefinitionElements used by an existing SpatialViewDefinition should fail\r\n expectDeleteToThrow(spatialCategorySelectorId);\r\n expectDeleteToThrow(modelSelectorId);\r\n expectDeleteToThrow(displayStyle3dId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\r\n assert.isTrue(usedDefinitionElementIds.has(spatialCategorySelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(modelSelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(displayStyle3dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(modelSelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle3dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(viewId));\r\n\r\n // deleteDefinitionElements should succeed when the list includes the SpatialViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\r\n expectDeleteToThrow(viewId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(modelSelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle3dId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(viewId));\r\n\r\n // delete/deleteDefinitionElements of DefinitionElements used by an existing DrawingViewDefinition should fail\r\n expectDeleteToThrow(drawingCategorySelectorId);\r\n expectDeleteToThrow(displayStyle2dId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([drawingCategorySelectorId, displayStyle2dId]);\r\n assert.isTrue(usedDefinitionElementIds.has(drawingCategorySelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(displayStyle2dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle2dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingViewId));\r\n\r\n // deleteDefinitionElements should succeed when the list includes the DrawingViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\r\n expectDeleteToThrow(drawingViewId);\r\n usedDefinitionElementIds = txn.deleteDefinitionElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]);\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle2dId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingViewId));\r\n\r\n txn.end();\r\n } finally {\r\n if (txn.isActive)\r\n txn.end(\"abandon\");\r\n\r\n iModelDb.close();\r\n }\r\n });\r\n\r\n describe(\"deleteElements\", () => {\r\n let elementCounter = 0;\r\n\r\n beforeEach(() => { elementCounter = 0; });\r\n\r\n afterEach(() => {\r\n if (iModelDb.isOpen) {\r\n const txn = new EditTxn(iModelDb, \"abandon\");\r\n txn.start();\r\n txn.end(\"abandon\");\r\n }\r\n });\r\n\r\n const insertDefinitionElement = (txn: EditTxn, parentId?: Id64String, modelId?: Id64String): Id64String => {\r\n const props: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: modelId ?? definitionModelId,\r\n code: GeometryPart.createCode(iModelDb, modelId ?? definitionModelId, `TestPart_${++elementCounter}`),\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n ...(parentId ? { parent: { id: parentId, relClassName: \"BisCore:ElementOwnsChildElements\" } } : {}),\r\n };\r\n return txn.insertElement(props);\r\n };\r\n\r\n /**\r\n * Call deleteElements, verify the returned failed-set, then check which elements survived vs. were deleted.\r\n * Rolls back changes with abandonChanges afterwards.\r\n */\r\n const executeTestCase = (txn: EditTxn, label: string, idsToDelete: Id64Array, expectedDeleted: Id64Array, expectedFailed: Id64Array, expectedRetained: Id64Array, abandonChanges: boolean = true) => {\r\n const failed = txn.deleteElements(idsToDelete);\r\n assert.sameMembers(Array.from(failed.failedIds), expectedFailed, `[${label}] failed set mismatch`);\r\n\r\n for (const id of expectedDeleted)\r\n assert.isUndefined(iModelDb.elements.tryGetElement(id), `error reading element`);\r\n for (const id of expectedRetained)\r\n assert.isDefined(iModelDb.elements.tryGetElement(id), `[${label}] ${id} should have been retained`);\r\n\r\n if (abandonChanges)\r\n txn.abandonChanges();\r\n };\r\n\r\n it(\"should delete only if not used with deleteElements\", async () => {\r\n let usedDefinitionElementIds: Id64Set;\r\n\r\n const txn = new EditTxn(iModelDb, \"delete definition elements\");\r\n txn.start();\r\n\r\n // make sure deleteElements only skips Elements that are being used (subjectId)\r\n usedDefinitionElementIds = txn.deleteElements([physicalObjectId1, physicalObjectId2, physicalObjectId3, subjectId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 1);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physicalObjectId1));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physicalObjectId2));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physicalObjectId3));\r\n assert.isDefined(iModelDb.elements.tryGetElement(subjectId));\r\n\r\n // Reset the db state\r\n txn.abandonChanges();\r\n\r\n // make sure deleteElements throws for invalid Ids\r\n assert.throws(() => txn.deleteElements([Id64.invalid, Id64.invalid]));\r\n\r\n // deleteElement/deleteElements for a used GeometryPart should fail\r\n assert.throws(() => txn.deleteElement(geometryPartId));\r\n usedDefinitionElementIds = txn.deleteElements([geometryPartId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(geometryPartId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId));\r\n\r\n // deleteElements for an unused GeometryPart should succeed, delete should still fail\r\n const unusedGeometryPartProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: GeometryPart.createCode(iModelDb, definitionModelId, \"Unused GeometryPart\"),\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n // Reset the db state\r\n txn.abandonChanges();\r\n const unusedGeometryPartId = txn.insertElement(unusedGeometryPartProps);\r\n assert.isTrue(Id64.isValidId64(unusedGeometryPartId));\r\n assert.throws(() => txn.deleteElement(unusedGeometryPartId));\r\n usedDefinitionElementIds = txn.deleteElements([unusedGeometryPartId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedGeometryPartId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements for a used RenderMaterial should fail\r\n assert.throws(() => txn.deleteElement(renderMaterialId));\r\n usedDefinitionElementIds = txn.deleteElements([renderMaterialId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(renderMaterialId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements for an unused RenderMaterial should succeed, delete should still fail\r\n const unusedRenderMaterialId = RenderMaterialElement.insert(txn, definitionModelId, \"Unused RenderMaterial\", { paletteName: \"PaletteName\" });\r\n assert.isTrue(Id64.isValidId64(unusedRenderMaterialId));\r\n assert.throws(() => txn.deleteElement(unusedRenderMaterialId));\r\n usedDefinitionElementIds = txn.deleteElements([unusedRenderMaterialId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedRenderMaterialId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements for a used Texture should fail\r\n assert.throws(() => txn.deleteElement(textureId));\r\n usedDefinitionElementIds = txn.deleteElements([textureId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(textureId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(textureId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements for an unused Texture should succeed, delete should still fail\r\n const unusedTextureId = IModelTestUtils.insertTextureElement(txn, definitionModelId, \"Unused Texture\");\r\n assert.isTrue(Id64.isValidId64(unusedTextureId));\r\n assert.throws(() => txn.deleteElement(unusedTextureId));\r\n usedDefinitionElementIds = txn.deleteElements([unusedTextureId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedTextureId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements for a used SpatialCategory should fail\r\n assert.throws(() => txn.deleteElement(spatialCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([spatialCategoryId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(spatialCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements for a default SubCategory should fail\r\n const spatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId, SpatialCategory);\r\n const defaultSpatialSubCategoryId = spatialCategory.myDefaultSubCategoryId();\r\n assert.throws(() => txn.deleteElement(defaultSpatialSubCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([defaultSpatialSubCategoryId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(defaultSpatialSubCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(defaultSpatialSubCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements for a used, non-default SubCategory should fail\r\n assert.throws(() => txn.deleteElement(subCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([subCategoryId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(subCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements for an unused SubCategory should succeed, delete should still fail\r\n const unusedSubCategoryId = SubCategory.insert(txn, spatialCategoryId, \"Unused SubCategory\", {});\r\n assert.isTrue(Id64.isValidId64(unusedSubCategoryId));\r\n assert.throws(() => txn.deleteElement(unusedSubCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([unusedSubCategoryId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSubCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements for an unused SpatialCategory should succeed, delete should still fail\r\n const unusedSpatialCategoryId = SpatialCategory.insert(txn, definitionModelId, \"Unused SpatialCategory\", {});\r\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryId));\r\n const unusedSpatialCategory = iModelDb.elements.getElement<SpatialCategory>(unusedSpatialCategoryId, SpatialCategory);\r\n const unusedSpatialCategoryDefaultSubCategoryId = unusedSpatialCategory.myDefaultSubCategoryId();\r\n assert.isTrue(Id64.isValidId64(unusedSpatialCategoryDefaultSubCategoryId));\r\n assert.throws(() => txn.deleteElement(unusedSpatialCategoryId));\r\n assert.throws(() => txn.deleteElement(unusedSpatialCategoryDefaultSubCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([unusedSpatialCategoryId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedSpatialCategoryDefaultSubCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements of a used DrawingCategory should fail\r\n assert.throws(() => txn.deleteElement(drawingCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([drawingCategoryId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(drawingCategoryId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements for an unused DrawingCategory should succeed, delete should still fail\r\n const unusedDrawingCategoryId = DrawingCategory.insert(txn, definitionModelId, \"Unused DrawingCategory\", {});\r\n assert.isTrue(Id64.isValidId64(unusedDrawingCategoryId));\r\n const unusedDrawingCategory = iModelDb.elements.getElement<DrawingCategory>(unusedDrawingCategoryId, DrawingCategory);\r\n const unusedDrawingSubCategoryId = unusedDrawingCategory.myDefaultSubCategoryId();\r\n assert.isTrue(Id64.isValidId64(unusedDrawingSubCategoryId));\r\n assert.throws(() => txn.deleteElement(unusedDrawingSubCategoryId));\r\n usedDefinitionElementIds = txn.deleteElements([unusedDrawingCategoryId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingCategoryId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unusedDrawingSubCategoryId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements of DefinitionElements used by an existing SpatialViewDefinition should fail\r\n assert.throws(() => txn.deleteElement(spatialCategorySelectorId));\r\n assert.throws(() => txn.deleteElement(modelSelectorId));\r\n assert.throws(() => txn.deleteElement(displayStyle3dId));\r\n usedDefinitionElementIds = txn.deleteElements([spatialCategorySelectorId, modelSelectorId, displayStyle3dId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(spatialCategorySelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(modelSelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(displayStyle3dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(modelSelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle3dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(viewId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements should succeed when the list includes the SpatialViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\r\n assert.throws(() => txn.deleteElement(viewId));\r\n usedDefinitionElementIds = txn.deleteElements([viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(spatialCategorySelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(modelSelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle3dId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(viewId));\r\n txn.abandonChanges();\r\n\r\n // deleteElement/deleteElements of DefinitionElements used by an existing DrawingViewDefinition should fail\r\n assert.throws(() => txn.deleteElement(drawingCategorySelectorId));\r\n assert.throws(() => txn.deleteElement(displayStyle2dId));\r\n usedDefinitionElementIds = txn.deleteElements([drawingCategorySelectorId, displayStyle2dId]).failedIds;\r\n assert.isTrue(usedDefinitionElementIds.has(drawingCategorySelectorId));\r\n assert.isTrue(usedDefinitionElementIds.has(displayStyle2dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(displayStyle2dId));\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingViewId));\r\n txn.abandonChanges();\r\n\r\n // deleteElements should succeed when the list includes the DrawingViewDefinition as the only thing referencing other DefinitionElements, delete should still fail\r\n assert.throws(() => txn.deleteElement(drawingViewId));\r\n usedDefinitionElementIds = txn.deleteElements([drawingViewId, drawingCategorySelectorId, displayStyle2dId]).failedIds;\r\n assert.equal(usedDefinitionElementIds.size, 0);\r\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingCategorySelectorId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(displayStyle2dId));\r\n assert.isUndefined(iModelDb.elements.tryGetElement(drawingViewId));\r\n\r\n txn.end(\"abandon\");\r\n iModelDb.close();\r\n });\r\n\r\n describe(\"basic tests\", () => {\r\n let txn: EditTxn;\r\n beforeEach(() => {\r\n txn = new EditTxn(iModelDb, \"delete Definition Elements\");\r\n txn.start();\r\n });\r\n afterEach(() => {\r\n txn.end(\"abandon\");\r\n });\r\n\r\n it(\"deletes a single unused definition element\", () => {\r\n const element = insertDefinitionElement(txn);\r\n executeTestCase(txn, \"single unused definition element\", [element], [element], [], []);\r\n });\r\n\r\n it(\"deletes multiple unused definition elements in one call\", () => {\r\n const element1 = insertDefinitionElement(txn);\r\n const element2 = insertDefinitionElement(txn);\r\n const element3 = insertDefinitionElement(txn);\r\n executeTestCase(txn, \"multiple unused definition elements\", [element1, element2, element3], [element1, element2, element3], [], []);\r\n });\r\n\r\n it(\"returns empty failed-set when given an empty array\", () => {\r\n const failed = txn.deleteElements([]).failedIds;\r\n assert.isEmpty(Array.from(failed), \"empty input should return empty failed set\");\r\n });\r\n\r\n it(\"throws for invalid ids\", () => {\r\n assert.throws(() => txn.deleteElements([Id64.invalid, Id64.invalid]));\r\n });\r\n\r\n it(\"keeps an in-use definition element in the failed set and does not delete it\", () => {\r\n // geometryPartId is referenced by PhysicalObject1's geometry stream\r\n const failed = txn.deleteElements([geometryPartId]);\r\n assert.isTrue(failed.failedIds.has(geometryPartId), \"in-use definition element must be in failed set\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(geometryPartId), \"in-use definition element must not be deleted\");\r\n });\r\n\r\n it(\"returns only the in-use definition element in the failed set when mixing used and unused parts\", () => {\r\n const unusedElement = insertDefinitionElement(txn);\r\n const usedElement = insertDefinitionElement(txn);\r\n\r\n // Reference usedElement from a physical element geometry stream\r\n const physElemProps: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: Point3d.create(0, 0, 0).toJSON(), angles: {} },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, usedElement),\r\n };\r\n const physElemId = txn.insertElement(physElemProps);\r\n\r\n executeTestCase(\r\n txn,\r\n \"used + unused definition elements\",\r\n [unusedElement, usedElement],\r\n [unusedElement],\r\n [usedElement],\r\n [usedElement, physElemId],\r\n );\r\n });\r\n\r\n it(\"keeps an in-use RenderMaterial in the failed set and does not delete it\", () => {\r\n const failed = txn.deleteElements([renderMaterialId]);\r\n assert.isTrue(failed.failedIds.has(renderMaterialId), \"in-use RenderMaterial must be in failed set\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(renderMaterialId), \"in-use RenderMaterial must not be deleted\");\r\n });\r\n\r\n it(\"deletes an unused RenderMaterial\", () => {\r\n const unusedRenderMaterialId = RenderMaterialElement.insert(txn, definitionModelId, \"Unused RenderMaterial\", { paletteName: \"PaletteName\" });\r\n executeTestCase(txn, \"unused RenderMaterial\", [unusedRenderMaterialId], [unusedRenderMaterialId], [], []);\r\n });\r\n\r\n it(\"keeps an in-use Texture in the failed set and does not delete it\", () => {\r\n const failed = txn.deleteElements([textureId]);\r\n assert.isTrue(failed.failedIds.has(textureId), \"in-use Texture must be in failed set\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(textureId), \"in-use Texture must not be deleted\");\r\n });\r\n\r\n it(\"deletes an unused Texture\", () => {\r\n const unusedTextureId = IModelTestUtils.insertTextureElement(txn, definitionModelId, \"Unused Texture\");\r\n executeTestCase(txn, \"unused Texture\", [unusedTextureId], [unusedTextureId], [], []);\r\n });\r\n\r\n it(\"returns the full input as the failed set when every element is an in-use definition element\", () => {\r\n const usedElement1 = insertDefinitionElement(txn);\r\n const usedElement2 = insertDefinitionElement(txn);\r\n const usedElement3 = insertDefinitionElement(txn);\r\n\r\n // Reference usedElements from a physical element geometry stream\r\n const physElemProps: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: Point3d.create(0, 0, 0).toJSON(), angles: {} },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, usedElement1),\r\n };\r\n assert.isTrue(Id64.isValid(txn.insertElement(physElemProps)));\r\n physElemProps.geom = IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, usedElement2);\r\n assert.isTrue(Id64.isValid(txn.insertElement(physElemProps)));\r\n physElemProps.geom = IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, usedElement3);\r\n assert.isTrue(Id64.isValid(txn.insertElement(physElemProps)));\r\n\r\n const failedToDelete = txn.deleteElements([usedElement1, usedElement2, usedElement3]);\r\n assert.equal(failedToDelete.failedIds.size, 3, \"all in-use definition elements should be in failed set\");\r\n assert.isTrue(failedToDelete.failedIds.has(usedElement1));\r\n assert.isTrue(failedToDelete.failedIds.has(usedElement2));\r\n assert.isTrue(failedToDelete.failedIds.has(usedElement3));\r\n });\r\n });\r\n\r\n describe(\"category and subcategory tests\", () => {\r\n let txn: EditTxn;\r\n beforeEach(() => {\r\n txn = new EditTxn(iModelDb, \"delete Definition Elements\");\r\n txn.start();\r\n });\r\n afterEach(() => {\r\n txn.end(\"abandon\");\r\n });\r\n\r\n it(\"keeps an in-use SpatialCategory in the failed set and does not delete it\", () => {\r\n const failed = txn.deleteElements([spatialCategoryId]);\r\n assert.isTrue(failed.failedIds.has(spatialCategoryId), \"in-use SpatialCategory must be in failed set\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(spatialCategoryId), \"in-use SpatialCategory must not be deleted\");\r\n });\r\n\r\n it(\"keeps the default SubCategory in the failed set when its parent SpatialCategory is in use\", () => {\r\n const spatialCategory = iModelDb.elements.getElement<SpatialCategory>(spatialCategoryId, SpatialCategory);\r\n const defaultSubCategoryId = spatialCategory.myDefaultSubCategoryId();\r\n const failed = txn.deleteElements([defaultSubCategoryId]);\r\n assert.isTrue(failed.failedIds.has(defaultSubCategoryId), \"default SubCategory must be in failed set\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(defaultSubCategoryId), \"default SubCategory must not be deleted\");\r\n });\r\n\r\n it(\"keeps a used non-default SubCategory in the failed set and does not delete it\", () => {\r\n const failed = txn.deleteElements([subCategoryId]);\r\n assert.isTrue(failed.failedIds.has(subCategoryId), \"in-use SubCategory must be in failed set\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(subCategoryId), \"in-use SubCategory must not be deleted\");\r\n });\r\n\r\n it(\"deletes an unused non-default SubCategory\", () => {\r\n const unusedSubCategoryId = SubCategory.insert(txn, spatialCategoryId, \"Unused SubCategory\", {});\r\n executeTestCase(txn, \"unused SubCategory\", [unusedSubCategoryId], [unusedSubCategoryId], [], [spatialCategoryId]);\r\n });\r\n\r\n it(\"deletes an unused SpatialCategory together with its default SubCategory\", () => {\r\n const unusedCategoryId = SpatialCategory.insert(txn, definitionModelId, \"Unused SpatialCategory\", {});\r\n const unusedCategory = iModelDb.elements.getElement<SpatialCategory>(unusedCategoryId, SpatialCategory);\r\n const unusedDefaultSubCategoryId = unusedCategory.myDefaultSubCategoryId();\r\n\r\n executeTestCase(\r\n txn,\r\n \"unused SpatialCategory + default SubCategory\",\r\n [unusedCategoryId],\r\n [unusedCategoryId, unusedDefaultSubCategoryId],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n it(\"deletes an unused DrawingCategory together with its default SubCategory\", () => {\r\n const unusedDrawingCategoryId = DrawingCategory.insert(txn, definitionModelId, \"Unused DrawingCategory\", {});\r\n const unusedDrawingCategory = iModelDb.elements.getElement<DrawingCategory>(unusedDrawingCategoryId, DrawingCategory);\r\n const unusedDrawingSubCategoryId = unusedDrawingCategory.myDefaultSubCategoryId();\r\n\r\n executeTestCase(\r\n txn,\r\n \"unused DrawingCategory + default SubCategory\",\r\n [unusedDrawingCategoryId],\r\n [unusedDrawingCategoryId, unusedDrawingSubCategoryId],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n it(\"keeps CategorySelector, ModelSelector, DisplayStyle3d in the failed set when their view still exists\", () => {\r\n executeTestCase(\r\n txn,\r\n \"view-related still referenced\",\r\n [spatialCategorySelectorId, modelSelectorId, displayStyle3dId],\r\n [],\r\n [spatialCategorySelectorId, modelSelectorId, displayStyle3dId],\r\n [spatialCategorySelectorId, modelSelectorId, displayStyle3dId, viewId],\r\n );\r\n });\r\n\r\n it(\"deletes CategorySelector, ModelSelector, DisplayStyle3d and the SpatialViewDefinition in one call\", () => {\r\n executeTestCase(\r\n txn,\r\n \"view + view-related\",\r\n [viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId],\r\n [viewId, spatialCategorySelectorId, modelSelectorId, displayStyle3dId],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n it(\"deletes DrawingCategorySelector, DisplayStyle2d and the DrawingViewDefinition in one call\", () => {\r\n executeTestCase(\r\n txn,\r\n \"drawing view + drawing view-related\",\r\n [drawingViewId, drawingCategorySelectorId, displayStyle2dId],\r\n [drawingViewId, drawingCategorySelectorId, displayStyle2dId],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n it(\"deletes orphaned CategorySelector and DisplayStyle2d (no view references them)\", () => {\r\n // Insert a standalone CategorySelector and DisplayStyle2d that are not referenced by any view\r\n const orphanCategorySelectorId = CategorySelector.insert(txn, definitionModelId, \"OrphanCategorySelector\", [drawingCategoryId]);\r\n const orphanDisplayStyle2dId = DisplayStyle2d.insert(txn, definitionModelId, \"OrphanDisplayStyle2d\");\r\n\r\n executeTestCase(\r\n txn,\r\n \"orphaned view-related elements\",\r\n [orphanCategorySelectorId, orphanDisplayStyle2dId],\r\n [orphanCategorySelectorId, orphanDisplayStyle2dId],\r\n [],\r\n [],\r\n );\r\n });\r\n });\r\n\r\n describe(\"Element hierarchy\", () => {\r\n let txn: EditTxn;\r\n beforeEach(() => {\r\n txn = new EditTxn(iModelDb, \"test\");\r\n txn.start();\r\n });\r\n afterEach(() => {\r\n txn.end(\"abandon\");\r\n });\r\n\r\n it(\"deletes a parent DefinitionElement and automatically deletes its child\", () => {\r\n const parentPart = insertDefinitionElement(txn);\r\n const childPart = insertDefinitionElement(txn, parentPart);\r\n\r\n // Only pass the parent - the child must be pulled in automatically\r\n executeTestCase(\r\n txn,\r\n \"parent + child definition elements\",\r\n [parentPart],\r\n [parentPart, childPart],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n it(\"deletes a parent DefinitionElement and its child explicitly passed\", () => {\r\n const parentPart = insertDefinitionElement(txn);\r\n const childPart = insertDefinitionElement(txn, parentPart);\r\n\r\n // Pass both parent and child explicitly\r\n executeTestCase(\r\n txn,\r\n \"parent + child definition elements\",\r\n [parentPart, childPart],\r\n [parentPart, childPart],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n // Intra-set code scope\r\n // Both partA and partB are in the input set; partB uses partA as its CodeScope.\r\n // The old implementation would fail here because partA's deletion was blocked by partB's\r\n // code scope reference. The new native API resolves all intra-set dependencies first.\r\n it(\"deletes two DefinitionElements related by code scope when both are in the same set\", () => {\r\n const scopeSpecId = iModelDb.codeSpecs.insert(txn, \"DefElemScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n const partA = insertDefinitionElement(txn);\r\n const partBProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: { spec: scopeSpecId, scope: partA, value: \"partB-code\" },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const partB = txn.insertElement(partBProps);\r\n\r\n // Both unused externally; the intra-set code-scope link must not block deletion\r\n executeTestCase(txn, \"intra-set code scope\", [partA, partB], [partA, partB], [], []);\r\n });\r\n\r\n // Multi-level parent-child hierarchy\r\n // Passing only the root must automatically pull in all descendants (leaf-first).\r\n // The old implementation deleted elements in a fixed ECClass order and could not handle\r\n // arbitrary parent-child chains within the set.\r\n it(\"deletes a 3-level parent-child hierarchy by passing only the root\", () => {\r\n const root = insertDefinitionElement(txn);\r\n const child = insertDefinitionElement(txn, root);\r\n const grandchild = insertDefinitionElement(txn, child);\r\n\r\n // Only supply the root - all descendants must be included and deleted leaf-first\r\n executeTestCase(txn, \"3-level hierarchy via root only\", [root], [root, child, grandchild], [], []);\r\n });\r\n\r\n it(\"deletes a 3-level parent-child hierarchy by passing all elements explicitly\", () => {\r\n const root = insertDefinitionElement(txn);\r\n const child = insertDefinitionElement(txn, root);\r\n const grandchild = insertDefinitionElement(txn, child);\r\n\r\n // Pass all elements explicitly\r\n executeTestCase(\r\n txn,\r\n \"3-level hierarchy with all elements\",\r\n [root, child, grandchild],\r\n [root, child, grandchild],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n // Mixed inputs\r\n it(\"deletes a mixed batch of unused DefinitionElements of different types in one call\", () => {\r\n const unusedPart = insertDefinitionElement(txn);\r\n const unusedRenderMaterial = RenderMaterialElement.insert(txn, definitionModelId, \"BatchRenderMaterial\", { paletteName: \"P\" });\r\n const unusedTexture = IModelTestUtils.insertTextureElement(txn, definitionModelId, \"BatchTexture\");\r\n const unusedSubCategory = SubCategory.insert(txn, spatialCategoryId, \"BatchSubCategory\", {});\r\n\r\n executeTestCase(\r\n txn,\r\n \"mixed unused batch\",\r\n [unusedPart, unusedRenderMaterial, unusedTexture, unusedSubCategory],\r\n [unusedPart, unusedRenderMaterial, unusedTexture, unusedSubCategory],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n // Mixed inputs with intra scope violations and parent child hierarchies\r\n it(\"deletes a mixed batch of used and unused DefinitionElements in a hierarchy with conflicting code scopes with child\", () => {\r\n const scopeSpecId = iModelDb.codeSpecs.insert(txn, \"DefElemScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n const usedPart = insertDefinitionElement(txn);\r\n const unusedPart = insertDefinitionElement(txn);\r\n const childPart = insertDefinitionElement(txn, usedPart);\r\n\r\n const scopedPartProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: { spec: scopeSpecId, scope: childPart, value: \"scopedPart-code\" },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const scopedPart = txn.insertElement(scopedPartProps);\r\n\r\n // Pass both used and unused parts, with a child that has a code scope reference\r\n executeTestCase(\r\n txn,\r\n \"mixed used and unused batch\",\r\n [usedPart, unusedPart, scopedPart],\r\n [usedPart, unusedPart, childPart, scopedPart],\r\n [],\r\n [],\r\n );\r\n });\r\n\r\n // Mixed inputs with intra scope violations and parent child hierarchies\r\n it(\"deletes a mixed batch of used and unused DefinitionElements in a hierarchy with conflicting code scopes\", () => {\r\n const scopeSpecId = iModelDb.codeSpecs.insert(txn, \"DefElemScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n const usedPart = insertDefinitionElement(txn);\r\n const unusedPart = insertDefinitionElement(txn);\r\n const childPart = insertDefinitionElement(txn, usedPart);\r\n\r\n const scopedPartProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: { spec: scopeSpecId, scope: usedPart, value: \"scopedPart-code\" },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const scopedPart = txn.insertElement(scopedPartProps);\r\n\r\n // Pass both used and unused parts, with a child that has a code scope reference\r\n executeTestCase(\r\n txn,\r\n \"mixed used and unused batch\",\r\n [usedPart, unusedPart],\r\n [unusedPart],\r\n [usedPart],\r\n [usedPart, childPart, scopedPart],\r\n );\r\n });\r\n });\r\n\r\n describe(\"sub-model hierarchy\", () => {\r\n let txn: EditTxn;\r\n beforeEach(() => {\r\n txn = new EditTxn(iModelDb, \"test\");\r\n txn.start();\r\n });\r\n afterEach(() => {\r\n txn.end(\"abandon\");\r\n });\r\n\r\n let containerCounter = 0;\r\n\r\n const insertDefinitionContainer = (parentModelId?: Id64String): Id64String => {\r\n const scopeModelId = parentModelId ?? definitionModelId;\r\n const codeSpecId = iModelDb.codeSpecs.insert(txn, `ContainerCodeSpec_${++containerCounter}`, CodeScopeSpec.Type.Model);\r\n const code = new Code({ spec: codeSpecId, scope: scopeModelId, value: `Container_${containerCounter}` });\r\n return DefinitionContainer.insert(txn, scopeModelId, code);\r\n };\r\n\r\n /** Assert that the model row has been deleted. */\r\n const assertModelDeleted = (id: Id64String, msg: string) =>\r\n assert.isUndefined(iModelDb.models.tryGetModelProps(id), msg);\r\n\r\n /** Assert that the model row still exists. */\r\n const assertModelExists = (id: Id64String, msg: string) =>\r\n assert.isDefined(iModelDb.models.tryGetModelProps(id), msg);\r\n\r\n it(\"deletes unused definition elements from a DefinitionContainer\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const partA = insertDefinitionElement(txn, undefined, containerId);\r\n const partB = insertDefinitionElement(txn, undefined, containerId);\r\n\r\n executeTestCase(\r\n txn,\r\n \"unused elements in container sub-model\",\r\n [partA, partB],\r\n [partA, partB],\r\n [],\r\n [],\r\n false,\r\n );\r\n assertModelExists(containerId, \"DefinitionContainer must survive when container is not in the input set\");\r\n });\r\n\r\n it(\"deletes a DefinitionContainer and all definition elements inside it\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const defElem1 = insertDefinitionElement(txn, undefined, containerId);\r\n const defElem2 = insertDefinitionElement(txn, undefined, containerId);\r\n\r\n executeTestCase(\r\n txn,\r\n \"container + sub-model contents deleted via container id\",\r\n [containerId],\r\n [containerId, defElem1, defElem2],\r\n [],\r\n [],\r\n );\r\n // Sub-model row is deleted once the container element is successfully purged.\r\n assertModelDeleted(containerId, \"DefinitionModel sub-model row must be deleted after container is purged\");\r\n });\r\n\r\n it(\"keeps an in-use element inside a DefinitionContainer sub-model in the failed set\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const usedPart = insertDefinitionElement(txn, undefined, containerId);\r\n const unusedPart = insertDefinitionElement(txn, undefined, containerId);\r\n // Reference usedPart from a physical element geometry stream.\r\n const physElemProps: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, usedPart),\r\n };\r\n const physElemId = txn.insertElement(physElemProps);\r\n\r\n executeTestCase(\r\n txn,\r\n \"one used + one unused in container sub-model\",\r\n [usedPart, unusedPart],\r\n [unusedPart],\r\n [usedPart],\r\n [usedPart, physElemId],\r\n false,\r\n );\r\n assertModelExists(containerId, \"DefinitionContainer sub-model row must survive when an element inside it is blocked\");\r\n });\r\n\r\n it(\"parent blocked in failed set when its child inside a DefinitionContainer sub-model is in use\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const parent = insertDefinitionElement(txn, undefined, containerId);\r\n const child = insertDefinitionElement(txn, parent, containerId);\r\n // Reference child from a physical element geometry stream.\r\n const physElemProps: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, child),\r\n };\r\n const physElemId = txn.insertElement(physElemProps);\r\n\r\n executeTestCase(\r\n txn,\r\n \"parent blocked when child inside container sub-model is in use\",\r\n [parent],\r\n [],\r\n [parent],\r\n [parent, child, physElemId],\r\n false,\r\n );\r\n assertModelExists(containerId, \"DefinitionContainer sub-model row must survive when elements inside it are blocked\");\r\n });\r\n\r\n it(\"deletes two elements inside a DefinitionContainer sub-model related by intra-delete-set code scope\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const scopeSpecId = iModelDb.codeSpecs.insert(txn, \"NestedDefScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n const partA = insertDefinitionElement(txn, undefined, containerId);\r\n const partBProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: containerId,\r\n code: { spec: scopeSpecId, scope: partA, value: \"partB-code\" },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const partB = txn.insertElement(partBProps);\r\n\r\n executeTestCase(\r\n txn,\r\n \"intra-set code scope in container sub-model\",\r\n [partA, partB],\r\n [partA, partB],\r\n [],\r\n [],\r\n false,\r\n );\r\n assertModelExists(containerId, \"DefinitionContainer sub-model row must survive when container is not in the input set\");\r\n });\r\n\r\n it(\"element inside a DefinitionContainer sub-model blocked when used as external code scope\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const scopeSpecId = iModelDb.codeSpecs.insert(txn, \"ExtScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n const partA = insertDefinitionElement(txn, undefined, containerId);\r\n const partB = insertDefinitionElement(txn, undefined, containerId);\r\n // external lives in the top-level definition model — scoped to partA but NOT in the input set.\r\n const externalProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: definitionModelId,\r\n code: { spec: scopeSpecId, scope: partA, value: \"external-code\" },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const externalId = txn.insertElement(externalProps);\r\n\r\n executeTestCase(\r\n txn,\r\n \"external code scope blocks element inside container sub-model\",\r\n [partA, partB],\r\n [partB],\r\n [partA],\r\n [partA, externalId],\r\n false,\r\n );\r\n assertModelExists(containerId, \"DefinitionContainer sub-model row must survive when an element inside it is blocked\");\r\n });\r\n\r\n it(\"cross-container intra-set code scope: both elements deleted cleanly\", () => {\r\n const container1 = insertDefinitionContainer();\r\n const container2 = insertDefinitionContainer();\r\n const scopeSpecId = iModelDb.codeSpecs.insert(txn, \"CrossModelScopeSpec\", CodeScopeSpec.Type.RelatedElement);\r\n const partA = insertDefinitionElement(txn, undefined, container1);\r\n const partBProps: GeometryPartProps = {\r\n classFullName: GeometryPart.classFullName,\r\n model: container2,\r\n code: { spec: scopeSpecId, scope: partA, value: \"partB-code\" },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1)),\r\n };\r\n const partB = txn.insertElement(partBProps);\r\n\r\n executeTestCase(\r\n txn,\r\n \"cross-container intra-set code scope\",\r\n [partA, partB],\r\n [partA, partB],\r\n [],\r\n [],\r\n false,\r\n );\r\n assertModelExists(container1, \"container1 sub-model row must survive when container is not in the input set\");\r\n assertModelExists(container2, \"container2 sub-model row must survive when container is not in the input set\");\r\n });\r\n\r\n it(\"mixed elements where in-use ones get blocked/ignored, unused get deleted\", () => {\r\n const containerId = insertDefinitionContainer();\r\n const topUnused = insertDefinitionElement(txn, undefined, definitionModelId);\r\n const topUsed = insertDefinitionElement(txn, undefined, definitionModelId);\r\n const nestedUnused = insertDefinitionElement(txn, undefined, containerId);\r\n const nestedUsed = insertDefinitionElement(txn, undefined, containerId);\r\n\r\n const makeUser = (partId: Id64String): Id64String => {\r\n const props: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: { yaw: 0, pitch: 0, roll: 0 } },\r\n geom: IModelTestUtils.createBox(Point3d.create(1, 1, 1), spatialCategoryId, undefined, undefined, partId),\r\n };\r\n return txn.insertElement(props);\r\n };\r\n\r\n const topUsedPhysElem = makeUser(topUsed);\r\n const nestedUsedPhysElem = makeUser(nestedUsed);\r\n\r\n executeTestCase(\r\n txn,\r\n \"mixed top-level and container sub-model: used blocked, unused deleted\",\r\n [topUnused, topUsed, nestedUnused, nestedUsed],\r\n [topUnused, nestedUnused],\r\n [topUsed, nestedUsed],\r\n [topUsed, nestedUsed, topUsedPhysElem, nestedUsedPhysElem],\r\n false,\r\n );\r\n assertModelExists(containerId, \"DefinitionContainer sub-model row must survive when an element inside it is blocked\");\r\n });\r\n });\r\n });\r\n\r\n describe(\"TypeDefinition reference nulling\", () => {\r\n let typeDefModelId: Id64String;\r\n let typeDefCounter = 0;\r\n let txn: EditTxn;\r\n\r\n beforeEach(() => {\r\n txn = new EditTxn(iModelDb, \"delete Definition Elements\");\r\n txn.start();\r\n typeDefModelId = DefinitionModel.insert(txn, subjectId, `TypeDefModel-${++typeDefCounter}`);\r\n });\r\n\r\n afterEach(() => {\r\n txn.end(\"abandon\");\r\n });\r\n\r\n const insertPhysicalType = (): Id64String => {\r\n const props: PhysicalTypeProps = {\r\n classFullName: GenericPhysicalType.classFullName,\r\n model: typeDefModelId,\r\n code: Code.createEmpty(),\r\n };\r\n return txn.insertElement(props);\r\n };\r\n\r\n const insertPhysicalObjectWithType = (typeId: Id64String): Id64String => {\r\n const props: PhysicalElementProps = {\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: {} },\r\n typeDefinition: new PhysicalElementIsOfType(typeId),\r\n };\r\n return txn.insertElement(props);\r\n };\r\n\r\n /** Returns the TypeDefinitionId for a 3D element, or undefined if NULL. */\r\n const getTypeDefinitionId3d = (elementId: Id64String): Id64String | undefined => {\r\n return iModelDb.withQueryReader(\r\n \"SELECT TypeDefinition FROM bis.GeometricElement3d WHERE ECInstanceId=?\",\r\n (reader) => reader.step() ? reader.current[0]?.id : undefined,\r\n QueryBinder.from([elementId]),\r\n { rowFormat: QueryRowFormat.UseJsPropertyNames },\r\n );\r\n };\r\n\r\n it(\"TypeDefinitionId is NULLed on a surviving 3D element when its PhysicalType is deleted\", () => {\r\n const physTypeId = insertPhysicalType();\r\n const physObjId = insertPhysicalObjectWithType(physTypeId);\r\n\r\n assert.strictEqual(getTypeDefinitionId3d(physObjId), physTypeId, \"TypeDefinitionId should be set before deletion\");\r\n\r\n txn.deleteElements([physTypeId]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physTypeId), \"PhysicalType should be deleted\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(physObjId), \"PhysicalObject should survive\");\r\n assert.isUndefined(getTypeDefinitionId3d(physObjId), \"TypeDefinitionId should be NULL after its target type is deleted\");\r\n });\r\n\r\n it(\"TypeDefinitionId is NULLed on multiple surviving 3D elements when their shared PhysicalType is deleted\", () => {\r\n const physTypeId = insertPhysicalType();\r\n const obj1 = insertPhysicalObjectWithType(physTypeId);\r\n const obj2 = insertPhysicalObjectWithType(physTypeId);\r\n const obj3 = insertPhysicalObjectWithType(physTypeId);\r\n\r\n txn.deleteElements([physTypeId]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physTypeId), \"PhysicalType should be deleted\");\r\n for (const id of [obj1, obj2, obj3]) {\r\n assert.isDefined(iModelDb.elements.tryGetElement(id), \"PhysicalObject should survive\");\r\n assert.isUndefined(getTypeDefinitionId3d(id), \"TypeDefinitionId should be NULL on all surviving objects\");\r\n }\r\n });\r\n\r\n it(\"TypeDefinitionId is not disturbed on elements whose PhysicalType is NOT deleted\", () => {\r\n const typeToDelete = insertPhysicalType();\r\n const typeToKeep = insertPhysicalType();\r\n const objReferencingDeleted = insertPhysicalObjectWithType(typeToDelete);\r\n const objReferencingKept = insertPhysicalObjectWithType(typeToKeep);\r\n\r\n txn.deleteElements([typeToDelete]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(typeToDelete), \"typeToDelete should be deleted\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(typeToKeep), \"typeToKeep should survive\");\r\n assert.isUndefined(getTypeDefinitionId3d(objReferencingDeleted), \"TypeDefinitionId should be NULL on the affected object\");\r\n assert.strictEqual(getTypeDefinitionId3d(objReferencingKept), typeToKeep, \"TypeDefinitionId should be unchanged on the unaffected object\");\r\n });\r\n\r\n it(\"TypeDefinitionId is NULLed on a surviving 3D element when its PhysicalType is deleted together with a non-definition element\", () => {\r\n const physTypeId = insertPhysicalType();\r\n const physObjId = insertPhysicalObjectWithType(physTypeId);\r\n const unrelated = txn.insertElement({\r\n classFullName: \"Generic:PhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n placement: { origin: [0, 0, 0], angles: {} },\r\n } as PhysicalElementProps);\r\n\r\n txn.deleteElements([physTypeId, unrelated]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physTypeId), \"PhysicalType should be deleted\");\r\n assert.isUndefined(iModelDb.elements.tryGetElement(unrelated), \"unrelated element should be deleted\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(physObjId), \"PhysicalObject should survive\");\r\n assert.isUndefined(getTypeDefinitionId3d(physObjId), \"TypeDefinitionId should be NULL after its target type is deleted\");\r\n });\r\n\r\n it(\"TypeDefinitionId is NULLed on a surviving 2D element when its GraphicalType2d is deleted\", () => {\r\n const documentListModelId = DocumentListModel.insert(txn, subjectId, `DocList-${typeDefCounter}`);\r\n const drawingId = Drawing.insert(txn, documentListModelId, `Drawing-${typeDefCounter}`);\r\n const drawingCatId = DrawingCategory.insert(txn, typeDefModelId, `DrawingCat-${typeDefCounter}`, new SubCategoryAppearance());\r\n\r\n const graphicalTypeProps: TypeDefinitionElementProps = {\r\n classFullName: GenericGraphicalType2d.classFullName,\r\n model: typeDefModelId,\r\n code: Code.createEmpty(),\r\n };\r\n const graphicalTypeId = txn.insertElement(graphicalTypeProps);\r\n\r\n const drawingElemProps: GeometricElement2dProps = {\r\n classFullName: DrawingGraphic.classFullName,\r\n model: drawingId,\r\n category: drawingCatId,\r\n code: Code.createEmpty(),\r\n typeDefinition: new GraphicalElement2dIsOfType(graphicalTypeId),\r\n };\r\n const drawingElemId = txn.insertElement(drawingElemProps);\r\n\r\n const getTypeDefinitionId2d = (elemId: Id64String): Id64String | undefined => {\r\n return iModelDb.withQueryReader(\r\n \"SELECT TypeDefinition FROM bis.GeometricElement2d WHERE ECInstanceId=?\",\r\n (reader) => reader.step() ? reader.current[0]?.id : undefined,\r\n QueryBinder.from([elemId]),\r\n { rowFormat: QueryRowFormat.UseJsPropertyNames },\r\n );\r\n };\r\n\r\n assert.strictEqual(getTypeDefinitionId2d(drawingElemId), graphicalTypeId, \"TypeDefinitionId should be set before deletion\");\r\n\r\n txn.deleteElements([graphicalTypeId]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(graphicalTypeId), \"GraphicalType2d should be deleted\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(drawingElemId), \"DrawingGraphic should survive\");\r\n assert.isUndefined(getTypeDefinitionId2d(drawingElemId), \"TypeDefinitionId should be NULL after its 2D type is deleted\");\r\n });\r\n\r\n it(\"TypeDefinitionId is NOT NULLed when deleteElements deletes the type and NULLs the reference\", () => {\r\n const physTypeId = insertPhysicalType();\r\n const physObjId = insertPhysicalObjectWithType(physTypeId);\r\n\r\n const failed = txn.deleteElements([physTypeId]);\r\n\r\n assert.isFalse(failed.failedIds.has(physTypeId), \"physTypeId should NOT be in the failed set — TypeDefinitionId refs do not block deleteElements\");\r\n assert.isUndefined(iModelDb.elements.tryGetElement(physTypeId), \"PhysicalType should be deleted\");\r\n assert.isDefined(iModelDb.elements.tryGetElement(physObjId), \"PhysicalObject should still exist\");\r\n assert.isUndefined(getTypeDefinitionId3d(physObjId), \"TypeDefinitionId should be NULLed since the type was deleted\");\r\n });\r\n });\r\n\r\n describe(\"ModelSelector link-table cleanup on model deletion\", () => {\r\n let msCounter = 0;\r\n let msDefModelId: Id64String;\r\n let txn: EditTxn;\r\n\r\n beforeEach(() => {\r\n txn = new EditTxn(iModelDb, \"delete definition elements\");\r\n txn.start();\r\n msDefModelId = DefinitionModel.insert(txn, subjectId, `MSDefModel-${++msCounter}`);\r\n });\r\n\r\n const getModelSelectorModels = (selectorId: Id64String): Id64String[] => {\r\n return iModelDb.withQueryReader(\r\n \"SELECT TargetECInstanceId FROM bis.ModelSelectorRefersToModels WHERE SourceECInstanceId=?\",\r\n (reader) => {\r\n const ids: Id64String[] = [];\r\n for (const row of reader)\r\n ids.push(row[0] as Id64String);\r\n return ids;\r\n },\r\n QueryBinder.from([selectorId]),\r\n );\r\n };\r\n\r\n\r\n it(\"removes the ModelSelectorRefersToModels row when the referenced model is deleted\", () => {\r\n const partitionId = PhysicalModel.insert(txn, subjectId, `MSPartition-${msCounter}`);\r\n const selectorId = ModelSelector.insert(txn, msDefModelId, `MSSelector-${msCounter}`, [partitionId]);\r\n\r\n assert.include(getModelSelectorModels(selectorId), partitionId, \"ModelSelector should reference the partition before deletion\");\r\n\r\n txn.deleteElements([partitionId]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(partitionId), \"partition should be deleted\");\r\n assert.notInclude(getModelSelectorModels(selectorId), partitionId, \"ModelSelectorRefersToModels row should be removed after model deletion\");\r\n });\r\n\r\n it(\"removes only the deleted model's rows from ModelSelector when multiple models are referenced\", () => {\r\n const partition1 = PhysicalModel.insert(txn, subjectId, `MSMulti1-${msCounter}`);\r\n const partition2 = PhysicalModel.insert(txn, subjectId, `MSMulti2-${msCounter}`);\r\n const partition3 = PhysicalModel.insert(txn, subjectId, `MSMulti3-${msCounter}`);\r\n const selectorId = ModelSelector.insert(txn, msDefModelId, `MSMultiSelector-${msCounter}`, [partition1, partition2, partition3]);\r\n\r\n assert.equal(getModelSelectorModels(selectorId).length, 3, \"ModelSelector should start with 3 entries\");\r\n\r\n txn.deleteElements([partition1]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(partition1), \"partition1 should be deleted\");\r\n const remaining = getModelSelectorModels(selectorId);\r\n assert.equal(remaining.length, 2, \"ModelSelector should have 2 remaining entries\");\r\n assert.notInclude(remaining, partition1, \"partition1 row should be removed\");\r\n assert.include(remaining, partition2, \"partition2 row should remain\");\r\n assert.include(remaining, partition3, \"partition3 row should remain\");\r\n });\r\n\r\n it(\"removes ModelSelectorRefersToModels rows for all models when multiple partitions are deleted in one call\", () => {\r\n const partition1 = PhysicalModel.insert(txn, subjectId, `MSBulk1-${msCounter}`);\r\n const partition2 = PhysicalModel.insert(txn, subjectId, `MSBulk2-${msCounter}`);\r\n const selectorId = ModelSelector.insert(txn, msDefModelId, `MSBulkSelector-${msCounter}`, [partition1, partition2]);\r\n\r\n txn.deleteElements([partition1, partition2]);\r\n\r\n assert.isUndefined(iModelDb.elements.tryGetElement(partition1), \"partition1 should be deleted\");\r\n assert.isUndefined(iModelDb.elements.tryGetElement(partition2), \"partition2 should be deleted\");\r\n assert.isEmpty(getModelSelectorModels(selectorId), \"all ModelSelectorRefersToModels rows should be gone\");\r\n });\r\n });\r\n});\r\n"]}
|
|
@@ -79,7 +79,7 @@ describe("ElementAspect", () => {
|
|
|
79
79
|
assert.equal(aspectX.schemaName, aspect.schemaName);
|
|
80
80
|
assert.equal(aspectX.className, aspect.className);
|
|
81
81
|
});
|
|
82
|
-
assert.equal(JSON.stringify(uniqueAspects), `[{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
|
|
82
|
+
assert.equal(JSON.stringify(uniqueAspects), `[{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
|
|
83
83
|
{"classFullName":"DgnPlatformTest:TestUniqueAspectNoHandler","id":"0x6","testUniqueAspectProperty":"Aspect1-Updated","length":1,"element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}}]`.replace(/\s+/g, ""));
|
|
84
84
|
const multiAspectsA = iModel.elements.getAspects(element.id, "DgnPlatformTest:TestMultiAspectNoHandler");
|
|
85
85
|
assert.exists(multiAspectsA);
|
|
@@ -98,7 +98,7 @@ describe("ElementAspect", () => {
|
|
|
98
98
|
assert.exists(aspectX.asAny.testMultiAspectProperty);
|
|
99
99
|
assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);
|
|
100
100
|
});
|
|
101
|
-
assert.equal(JSON.stringify(multiAspectsA), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
101
|
+
assert.equal(JSON.stringify(multiAspectsA), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
102
102
|
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
|
|
103
103
|
// Test getAspects with dot separator
|
|
104
104
|
const multiAspectsADotSeparator = iModel.elements.getAspects(element.id, "DgnPlatformTest.TestMultiAspectNoHandler");
|
|
@@ -118,7 +118,7 @@ describe("ElementAspect", () => {
|
|
|
118
118
|
assert.exists(aspectX.asAny.testMultiAspectProperty);
|
|
119
119
|
assert.equal(aspectX.asAny.testMultiAspectProperty, aspect.asAny.testMultiAspectProperty);
|
|
120
120
|
});
|
|
121
|
-
assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
121
|
+
assert.equal(JSON.stringify(multiAspectsADotSeparator), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
122
122
|
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
|
|
123
123
|
const multiAspectsB = iModel.elements.getAspects(element.id, "DgnPlatformTest:TestMultiAspect");
|
|
124
124
|
assert.exists(multiAspectsB);
|
|
@@ -136,7 +136,7 @@ describe("ElementAspect", () => {
|
|
|
136
136
|
assert.equal(aspectX.className, "TestMultiAspect");
|
|
137
137
|
assert.exists(aspectX.asAny.testMultiAspectProperty);
|
|
138
138
|
});
|
|
139
|
-
assert.equal(JSON.stringify(multiAspectsB), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
139
|
+
assert.equal(JSON.stringify(multiAspectsB), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
140
140
|
{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
|
|
141
141
|
const multiAspects = iModel.elements.getAspects(element.id, ElementMultiAspect.classFullName);
|
|
142
142
|
assert.equal(multiAspects.length, 4);
|
|
@@ -148,9 +148,9 @@ describe("ElementAspect", () => {
|
|
|
148
148
|
assert.equal(aspectX.schemaName, aspect.schemaName);
|
|
149
149
|
assert.equal(aspectX.className, aspect.className);
|
|
150
150
|
});
|
|
151
|
-
assert.equal(JSON.stringify(multiAspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
152
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
153
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
151
|
+
assert.equal(JSON.stringify(multiAspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
152
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
153
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
154
154
|
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
|
|
155
155
|
const rootSubject = iModel.elements.getRootSubject();
|
|
156
156
|
assert.equal(0, iModel.elements.getAspects(rootSubject.id, "DgnPlatformTest:TestUniqueAspect").length, "Don't expect DgnPlatformTest:TestUniqueAspect aspects on the root Subject");
|
|
@@ -158,11 +158,11 @@ describe("ElementAspect", () => {
|
|
|
158
158
|
assert.equal(0, iModel.elements.getAspects(rootSubject.id).length, "Don't expect any aspects on the root Subject");
|
|
159
159
|
// The 'Element' property is introduced by ElementUniqueAspect and ElementMultiAspect, but is not available at the ElementAspect base class.
|
|
160
160
|
// Since we're now using instance queries to query ElementUniqueAspect and ElementMultiAspect directly in getAspects(), we can provide ElementAspect to the function as well.
|
|
161
|
-
const aspectList = `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
162
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
163
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
164
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
165
|
-
{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
|
|
161
|
+
const aspectList = `[{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x2","testMultiAspectProperty":"Aspect5-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
162
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspect","id":"0x3","testMultiAspectProperty":"Aspect6-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
163
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
164
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
165
|
+
{"classFullName":"DgnPlatformTest:TestUniqueAspect","id":"0x1","testUniqueAspectProperty":"Aspect2-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}},
|
|
166
166
|
{"classFullName":"DgnPlatformTest:TestUniqueAspectNoHandler","id":"0x6","testUniqueAspectProperty":"Aspect1-Updated","length":1,"element":{"id":"0x17","relClassName":"BisCore.ElementOwnsUniqueAspect"}}]`.replace(/\s+/g, "");
|
|
167
167
|
const aspects = iModel.elements.getAspects(element.id, ElementAspect.classFullName);
|
|
168
168
|
assert.equal(aspects.length, 6);
|
|
@@ -183,8 +183,8 @@ describe("ElementAspect", () => {
|
|
|
183
183
|
withEditTxn(iModel, (txn) => txn.insertAspect(aspectProps));
|
|
184
184
|
let aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);
|
|
185
185
|
assert.isAtLeast(aspects.length, 1);
|
|
186
|
-
assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
187
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
186
|
+
assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
187
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
188
188
|
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x21","testMultiAspectProperty":"MultiAspectInsertTest1","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
|
|
189
189
|
const numAspects = aspects.length;
|
|
190
190
|
let found = false;
|
|
@@ -203,14 +203,14 @@ describe("ElementAspect", () => {
|
|
|
203
203
|
assert.equal(aspectsUpdated.length, aspects.length);
|
|
204
204
|
assert.equal(aspectsUpdated[foundIndex].asAny.testMultiAspectProperty, "MultiAspectInsertTest1-Updated");
|
|
205
205
|
// Check if aspect was updated
|
|
206
|
-
assert.equal(JSON.stringify(aspectsUpdated), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
207
|
-
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
206
|
+
assert.equal(JSON.stringify(aspectsUpdated), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
207
|
+
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
208
208
|
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x21","testMultiAspectProperty":"MultiAspectInsertTest1-Updated","element":{"id":"0x17","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
|
|
209
209
|
withEditTxn(iModel, (txn) => txn.deleteAspect(aspects[foundIndex].id));
|
|
210
210
|
aspects = iModel.elements.getAspects(element.id, aspectProps.classFullName);
|
|
211
211
|
assert.equal(numAspects, aspects.length + 1);
|
|
212
212
|
// Check if aspect was deleted
|
|
213
|
-
assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
213
|
+
assert.equal(JSON.stringify(aspects), `[{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x4","testMultiAspectProperty":"Aspect3-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}},
|
|
214
214
|
{"classFullName":"DgnPlatformTest:TestMultiAspectNoHandler","id":"0x5","testMultiAspectProperty":"Aspect4-Updated","element":{"id":"0x17","relClassName":"DgnPlatformTest.TestElement"}}]`.replace(/\s+/g, ""));
|
|
215
215
|
});
|
|
216
216
|
it("should be able to insert, update, and delete UniqueAspects", () => {
|
|
@@ -337,17 +337,17 @@ describe("ElementAspect", () => {
|
|
|
337
337
|
e1Aspects.forEach((x) => {
|
|
338
338
|
assert.isTrue(findInProps(x, e1AspectProps));
|
|
339
339
|
});
|
|
340
|
-
assert.equal(JSON.stringify(e1Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x21","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
341
|
-
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x22","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
342
|
-
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x23","scope":{"id":"0x11","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
343
|
-
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x24","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"B","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
340
|
+
assert.equal(JSON.stringify(e1Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x21","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
341
|
+
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x22","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
342
|
+
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x23","scope":{"id":"0x11","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
343
|
+
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x24","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"B","kind":"Letter","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
344
344
|
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x25","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"C","kind":"Kind2","element":{"id":"0x11","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
|
|
345
345
|
const e2Aspects = iModelDb.elements.getAspects(e2, ExternalSourceAspect.classFullName);
|
|
346
346
|
assert.equal(e2Aspects.length, e2AspectProps.length);
|
|
347
347
|
e2Aspects.forEach((x) => {
|
|
348
348
|
assert.isTrue(findInProps(x, e2AspectProps));
|
|
349
349
|
});
|
|
350
|
-
assert.equal(JSON.stringify(e2Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x26","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
350
|
+
assert.equal(JSON.stringify(e2Aspects), `[{"classFullName":"BisCore:ExternalSourceAspect","id":"0x26","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"A","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}},
|
|
351
351
|
{"classFullName":"BisCore:ExternalSourceAspect","id":"0x27","scope":{"id":"0x1","relClassName":"BisCore.ElementScopesExternalSourceIdentifier"},"identifier":"C","kind":"Letter","element":{"id":"0x13","relClassName":"BisCore.ElementOwnsMultiAspects"}}]`.replace(/\s+/g, ""));
|
|
352
352
|
const allA = ExternalSourceAspect.findAllBySource(iModelDb, scopeId1, kind, "A");
|
|
353
353
|
assert.equal(allA.filter((x) => x.elementId === e1).length, 2, "there are two A's in scope 1 on e1");
|