@itwin/core-backend 5.1.0-dev.5 → 5.1.0-dev.51
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 +122 -1
- package/lib/cjs/BackendHubAccess.d.ts +1 -1
- package/lib/cjs/BackendHubAccess.js +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.d.ts +10 -2
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +16 -0
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js +4 -4
- 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 +67 -8
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +490 -275
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +1 -1
- package/lib/cjs/ClassRegistry.js +6 -6
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +1 -1
- package/lib/cjs/CodeSpecs.js +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.d.ts +4 -4
- package/lib/cjs/DisplayStyle.js +3 -3
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +4 -4
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +4 -4
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts +15 -6
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +18 -4
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.d.ts +51 -51
- package/lib/cjs/Element.js +52 -52
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +8 -8
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +8 -8
- 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.d.ts +3 -3
- package/lib/cjs/Entity.js +2 -2
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.d.ts +54 -8
- package/lib/cjs/ExportGraphics.d.ts.map +1 -1
- package/lib/cjs/ExportGraphics.js +158 -59
- 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 +6 -2
- package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
- package/lib/cjs/GeographicCRSServices.js +1 -1
- 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 +29 -23
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +102 -49
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +2 -3
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +2 -3
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- 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.d.ts +1 -1
- package/lib/cjs/Material.js +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +22 -22
- package/lib/cjs/Model.js +22 -22
- 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/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.d.ts +1 -1
- package/lib/cjs/SQLiteDb.js +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.js.map +1 -1
- package/lib/cjs/SqliteStatement.d.ts +1 -1
- package/lib/cjs/SqliteStatement.d.ts.map +1 -1
- package/lib/cjs/SqliteStatement.js +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +4 -4
- package/lib/cjs/TxnManager.js +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +40 -14
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +42 -14
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.d.ts +52 -0
- package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -0
- package/lib/cjs/annotations/FrameGeometry.js +250 -0
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -0
- package/lib/cjs/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -0
- package/lib/cjs/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +20 -26
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +31 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.js +132 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -0
- package/lib/cjs/annotations/TextBlockGeometry.d.ts +16 -0
- package/lib/cjs/annotations/TextBlockGeometry.d.ts.map +1 -0
- package/lib/cjs/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +13 -69
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -0
- package/lib/cjs/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +22 -8
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -0
- package/lib/cjs/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +51 -9
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -0
- 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 +5 -3
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +25 -6
- 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.d.ts +23 -0
- package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js +167 -3
- 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/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +1 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +2 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/cross-package.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.d.ts +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +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.d.ts +2 -2
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.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.d.ts +1 -1
- package/lib/esm/BackendHubAccess.js +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +10 -2
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +17 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js +4 -4
- 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 +67 -8
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +490 -275
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.d.ts +1 -1
- package/lib/esm/ClassRegistry.js +6 -6
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +1 -1
- package/lib/esm/CodeSpecs.js +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.d.ts +4 -4
- package/lib/esm/DisplayStyle.js +3 -3
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.d.ts +4 -4
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +4 -4
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts +15 -6
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +18 -4
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.d.ts +51 -51
- package/lib/esm/Element.js +52 -52
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +8 -8
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +8 -8
- 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.d.ts +3 -3
- package/lib/esm/Entity.js +2 -2
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.d.ts +54 -8
- package/lib/esm/ExportGraphics.d.ts.map +1 -1
- package/lib/esm/ExportGraphics.js +156 -58
- 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 +6 -2
- package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
- package/lib/esm/GeographicCRSServices.js +1 -1
- 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 +29 -23
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +105 -52
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/esm/IModelElementCloneContext.js +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +2 -3
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +2 -3
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- 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.d.ts +1 -1
- package/lib/esm/Material.js +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +22 -22
- package/lib/esm/Model.js +22 -22
- 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/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.d.ts +1 -1
- package/lib/esm/SQLiteDb.js +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.js.map +1 -1
- package/lib/esm/SqliteStatement.d.ts +1 -1
- package/lib/esm/SqliteStatement.d.ts.map +1 -1
- package/lib/esm/SqliteStatement.js +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +4 -4
- package/lib/esm/TxnManager.js +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +40 -14
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +42 -14
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.d.ts +52 -0
- package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -0
- package/lib/esm/annotations/FrameGeometry.js +245 -0
- package/lib/esm/annotations/FrameGeometry.js.map +1 -0
- package/lib/esm/{TextAnnotationElement.d.ts → annotations/TextAnnotationElement.d.ts} +6 -11
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -0
- package/lib/esm/{TextAnnotationElement.js → annotations/TextAnnotationElement.js} +22 -28
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts +31 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -0
- package/lib/esm/annotations/TextAnnotationGeometry.js +129 -0
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -0
- package/lib/esm/annotations/TextBlockGeometry.d.ts +16 -0
- package/lib/esm/annotations/TextBlockGeometry.d.ts.map +1 -0
- package/lib/esm/{TextAnnotationGeometry.js → annotations/TextBlockGeometry.js} +13 -69
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -0
- package/lib/esm/{TextAnnotationLayout.d.ts → annotations/TextBlockLayout.d.ts} +22 -8
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -0
- package/lib/esm/{TextAnnotationLayout.js → annotations/TextBlockLayout.js} +51 -9
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -0
- package/lib/esm/core-backend.d.ts +5 -3
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +25 -3
- 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.d.ts +23 -0
- package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js +165 -2
- 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/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +1 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +1 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/cross-package.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.d.ts +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js +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.d.ts +2 -2
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.d.ts +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js +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/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js +224 -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.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- 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/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.d.ts +1 -1
- package/lib/esm/test/TestUtils.d.ts.map +1 -1
- package/lib/esm/test/TestUtils.js +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +190 -1025
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.d.ts +2 -0
- package/lib/esm/test/annotations/TextBlock.test.d.ts.map +1 -0
- package/lib/esm/test/annotations/TextBlock.test.js +1105 -0
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -0
- 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.d.ts +2 -0
- package/lib/esm/test/ecdb/ConcurrentQuery.test.d.ts.map +1 -0
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +164 -0
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -0
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +35 -45
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +86 -65
- 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 +0 -55
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +484 -292
- package/lib/esm/test/ecdb/ECSqlStatement.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.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 +139 -139
- 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/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/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/imageData.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 +228 -5
- 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.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 +23 -9
- 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 +71 -71
- 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.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 +479 -164
- 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/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.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 +67 -15
- 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 +49 -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.d.ts +2 -0
- package/lib/esm/test/standalone/IModelLimits.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/IModelLimits.test.js +103 -0
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -0
- 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/InlineGeometryPartReferences.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/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 +19 -1
- package/lib/esm/test/standalone/SnapshotDb.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.map +1 -1
- 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/workspace/Settings.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 +12 -12
- package/lib/cjs/TextAnnotationElement.d.ts.map +0 -1
- package/lib/cjs/TextAnnotationElement.js.map +0 -1
- package/lib/cjs/TextAnnotationGeometry.d.ts +0 -32
- package/lib/cjs/TextAnnotationGeometry.d.ts.map +0 -1
- package/lib/cjs/TextAnnotationGeometry.js.map +0 -1
- package/lib/cjs/TextAnnotationLayout.d.ts.map +0 -1
- package/lib/cjs/TextAnnotationLayout.js.map +0 -1
- package/lib/esm/TextAnnotationElement.d.ts.map +0 -1
- package/lib/esm/TextAnnotationElement.js.map +0 -1
- package/lib/esm/TextAnnotationGeometry.d.ts +0 -32
- package/lib/esm/TextAnnotationGeometry.d.ts.map +0 -1
- package/lib/esm/TextAnnotationGeometry.js.map +0 -1
- package/lib/esm/TextAnnotationLayout.d.ts.map +0 -1
- package/lib/esm/TextAnnotationLayout.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementTreeWalker.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ElementTreeWalker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { Code, GeometricElement2dProps, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Point2d } from \"@itwin/core-geometry\";\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { DefinitionContainer, DefinitionModel, DocumentListModel, Drawing, DrawingCategory, DrawingGraphic, ElementGroupsMembers, ElementOwnsChildElements, ExternalSource, ExternalSourceGroup, IModelDb, Model, PhysicalPartition, SnapshotDb, SpatialCategory, SubCategory, Subject } from \"../../core-backend\";\nimport { deleteElementSubTrees, deleteElementTree, ElementTreeBottomUp, ElementTreeWalkerScope } from \"../../ElementTreeWalker\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\n\n// Test class that collects the results of a bottom-up tree walk\nclass ElementTreeCollector extends ElementTreeBottomUp {\n public subModels: Id64Array = [];\n public definitionModels: Id64Array = [];\n public elements: Id64Array = [];\n public definitions: Id64Array = [];\n\n public constructor(iModel: IModelDb) { super(iModel); }\n\n public visitModel(model: Model, _scope: ElementTreeWalkerScope): void {\n if (model instanceof DefinitionModel)\n this.definitionModels.push(model.id);\n else\n this.subModels.push(model.id);\n }\n\n public visitElement(elementId: Id64String, scope: ElementTreeWalkerScope): void {\n if (scope.inDefinitionModel)\n this.definitions.push(elementId); // may be some other kind of InformationContentElement - that's OK.\n else\n this.elements.push(elementId);\n }\n\n public collect(topElement: Id64String): void {\n this.processElementTree(topElement, ElementTreeWalkerScope.createTopScope(this._iModel, topElement));\n }\n}\n\nclass SelectedElementCollector extends ElementTreeCollector {\n public constructor(iModel: IModelDb, private _elementsToReport: Id64Array) { super(iModel); }\n public override shouldExploreModel(_model: Model): boolean { return true; }\n public override shouldVisitModel(_model: Model): boolean { return false; }\n public override shouldVisitElement(elementId: Id64String): boolean { return this._elementsToReport.includes(elementId); }\n}\n\nfunction doesElementExist(iModel: IModelDb, elementId: Id64String): boolean {\n return iModel.elements.tryGetElementProps(elementId) !== undefined;\n}\n\nfunction doesModelExist(iModel: IModelDb, mid: Id64String): boolean {\n return iModel.models.tryGetModelProps(mid) !== undefined;\n}\n\nfunction doesGroupRelationshipExist(iModel: IModelDb, source: Id64String, target: Id64String): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(`select count(*) from ${ElementGroupsMembers.classFullName} where sourceecinstanceid=? and targetecinstanceid=?`, (stmt) => {\n stmt.bindId(1, source);\n stmt.bindId(2, target);\n stmt.step();\n return stmt.getValue(0).getInteger() !== 0;\n });\n}\n\ndescribe(\"ElementTreeWalker\", () => {\n let iModel: SnapshotDb;\n let originalEnv: any;\n\n let repositoryLinkId: Id64String;\n let jobSubjectId: Id64String;\n let childSubject: Id64String;\n let definitionModelId: Id64String;\n let definitionContainerId: Id64String;\n let drawingDefinitionModelId: Id64String;\n let spatialCategoryId: Id64String;\n let nestedSpatialCategoryId: Id64String;\n let drawingCategoryId: Id64String;\n let drawingSubCategory1Id: Id64String;\n let drawingSubCategory2Id: Id64String;\n let xsGroup: Id64String;\n let xsElement: Id64String;\n let documentListModelId: Id64String;\n let drawingModelId: Id64String;\n let drawingGraphicId1: Id64String;\n let physicalModelId: Id64String;\n let physicalObjectId1: Id64String;\n let physicalObjectId2: Id64String;\n let physicalObjectId3: Id64String;\n\n before(async () => {\n originalEnv = { ...process.env };\n\n IModelTestUtils.registerTestBimSchema();\n });\n\n after(() => {\n process.env = originalEnv;\n });\n\n beforeEach(async () => {\n // Uncomment the following two lines to debug test failures\n // Logger.initializeToConsole();\n // Logger.setLevel(\"core-backend.IModelDb.ElementTreeWalker\", LogLevel.Trace);\n\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ElementTreeWalker\", \"Test.bim\");\n iModel = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ElementTreeWalker Test\" } });\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await iModel.importSchemas([schemaPathname]); // will throw an exception if import fails\n\n /*\n [RepositoryModel]\n RepositoryLink\n Job Subject\n +- DefinitionParitition -- [DefinitionModel]\n | DrawingCategory\n | default SubCategory + 2 non-default SubCategories\n | ExternalSourceGroup\n | ExternalSource child1\n +- DefinitionParitition -- [DefinitionModel]\n | SpatialCategory\n | DefinitionContainer\n | SpatialCategory\n |\n +- DocumentList -- [DocumentListModel]\n | Drawing -- [DrawingModel]\n | DrawingGraphic\n +- Child Subject\n |\n +- PhysicalPartition -- [PhysicalModel]\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\n */\n\n repositoryLinkId = IModelTestUtils.insertRepositoryLink(iModel, \"test link\", \"foo\", \"bar\");\n jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, \"Job\").insert();\n\n childSubject = Subject.insert(iModel, jobSubjectId, \"Child Subject\");\n\n definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"Definition\");\n spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, \"SpatialCategory\", new SubCategoryAppearance());\n drawingDefinitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"DrawingDefinition\");\n drawingCategoryId = DrawingCategory.insert(iModel, drawingDefinitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\n drawingSubCategory1Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory1\", new SubCategoryAppearance());\n drawingSubCategory2Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory2\", new SubCategoryAppearance());\n\n definitionContainerId = DefinitionContainer.insert(iModel, definitionModelId, Code.createEmpty());\n nestedSpatialCategoryId = SpatialCategory.insert(iModel, definitionContainerId, \"nested\", {});\n\n xsGroup = iModel.elements.insertElement({ classFullName: ExternalSourceGroup.classFullName, model: drawingDefinitionModelId, code: Code.createEmpty() });\n xsElement = iModel.elements.insertElement({ classFullName: ExternalSource.classFullName, model: drawingDefinitionModelId, parent: new ElementOwnsChildElements(xsGroup), code: Code.createEmpty() });\n\n documentListModelId = DocumentListModel.insert(iModel, jobSubjectId, \"Document\");\n assert.isTrue(Id64.isValidId64(documentListModelId));\n drawingModelId = Drawing.insert(iModel, documentListModelId, \"Drawing\");\n const drawingGraphicProps1: GeometricElement2dProps = {\n classFullName: DrawingGraphic.classFullName,\n model: drawingModelId,\n category: drawingCategoryId,\n code: Code.createEmpty(),\n userLabel: \"DrawingGraphic1\",\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\n placement: { origin: Point2d.create(2, 2), angle: 0 },\n };\n drawingGraphicId1 = iModel.elements.insertElement(drawingGraphicProps1);\n\n [, physicalModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, PhysicalPartition.createCode(iModel, childSubject, \"Physical\"), false, childSubject);\n const elementProps: GeometricElementProps = {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: physicalModelId,\n category: spatialCategoryId,\n code: Code.createEmpty(),\n };\n const elementProps2: GeometricElementProps = {\n classFullName: \"TestBim:TestPhysicalObject\",\n model: physicalModelId,\n category: nestedSpatialCategoryId,\n code: Code.createEmpty(),\n };\n physicalObjectId1 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\n physicalObjectId2 = iModel.elements.insertElement(iModel.elements.createElement(elementProps2).toJSON());\n physicalObjectId3 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId2).insert();\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId3).insert();\n\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\n assert.equal(iModel.elements.getElement(jobSubjectId).parent?.id, IModel.rootSubjectId);\n assert.equal(iModel.elements.getElement(definitionModelId).parent?.id, jobSubjectId);\n assert.equal(iModel.elements.getElement(definitionContainerId).model, definitionModelId);\n assert.equal(iModel.elements.getElement(spatialCategoryId).model, definitionModelId);\n assert.equal(iModel.elements.getElement(nestedSpatialCategoryId).model, definitionContainerId);\n assert.equal(iModel.elements.getElement(drawingDefinitionModelId).parent?.id, jobSubjectId);\n assert.equal(iModel.elements.getElement(drawingCategoryId).model, drawingDefinitionModelId);\n assert.equal(iModel.elements.getElement(drawingSubCategory1Id).parent?.id, drawingCategoryId);\n assert.equal(iModel.elements.getElement(drawingSubCategory2Id).parent?.id, drawingCategoryId);\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\n assert.equal(iModel.elements.getElement(documentListModelId).parent?.id, jobSubjectId);\n assert.equal(iModel.elements.getElement(drawingModelId).model, documentListModelId);\n assert.equal(iModel.elements.getElement(drawingGraphicId1).model, drawingModelId);\n assert.equal(iModel.elements.getElement(physicalModelId).parent?.id, childSubject);\n assert.equal(iModel.elements.getElement(physicalObjectId1).model, physicalModelId);\n assert.equal(iModel.elements.getElement(physicalObjectId2).model, physicalModelId);\n assert.equal(iModel.elements.getElement(physicalObjectId3).model, physicalModelId);\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n assert.isTrue(doesModelExist(iModel, definitionModelId));\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isTrue(doesModelExist(iModel, drawingModelId));\n assert.isTrue(doesModelExist(iModel, physicalModelId));\n });\n\n afterEach(() => {\n sinon.restore();\n iModel.close();\n });\n\n it(\"DFS search and deleteElementTree\", () => {\n // First, check that DFS search visits elements and models in expected bottom-up order\n {\n const collector1 = new ElementTreeCollector(iModel);\n collector1.collect(jobSubjectId);\n assert.isTrue(collector1.subModels.includes(physicalModelId));\n assert.isTrue(collector1.subModels.includes(drawingModelId));\n assert.isTrue(collector1.subModels.includes(documentListModelId));\n assert.isTrue(collector1.subModels.indexOf(drawingModelId) < collector1.subModels.indexOf(documentListModelId), \"in bottom-up search, a child model should be visited before its parent model\");\n assert.isFalse(collector1.subModels.includes(definitionModelId));\n assert.isTrue(collector1.definitionModels.includes(definitionModelId));\n assert.isFalse(collector1.subModels.includes(definitionContainerId));\n assert.isTrue(collector1.definitionModels.includes(definitionContainerId));\n assert.isFalse(collector1.subModels.includes(drawingDefinitionModelId));\n assert.isTrue(collector1.definitionModels.includes(drawingDefinitionModelId));\n assert.isTrue(collector1.definitions.includes(drawingCategoryId));\n assert.isTrue(collector1.definitions.includes(spatialCategoryId));\n assert.isTrue(collector1.definitions.includes(nestedSpatialCategoryId));\n assert.isFalse(collector1.elements.includes(drawingCategoryId));\n assert.isFalse(collector1.elements.includes(spatialCategoryId));\n assert.isFalse(collector1.elements.includes(nestedSpatialCategoryId));\n assert.isTrue(collector1.elements.indexOf(physicalObjectId1) < collector1.elements.indexOf(physicalModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\n assert.isTrue(collector1.elements.indexOf(drawingGraphicId1) < collector1.elements.indexOf(drawingModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\n assert.isTrue(collector1.elements.indexOf(drawingModelId) < collector1.elements.indexOf(documentListModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\n assert.isTrue(collector1.elements.indexOf(documentListModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(definitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(definitionContainerId) < collector1.elements.indexOf(definitionModelId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(drawingDefinitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(childSubject) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\n assert.isTrue(collector1.elements.indexOf(physicalModelId) < collector1.elements.indexOf(childSubject), \"in bottom-up search, a child element should be visited before its parent element\");\n }\n\n // Exercise the search filters\n {\n const collector2 = new SelectedElementCollector(iModel, [drawingGraphicId1, spatialCategoryId, nestedSpatialCategoryId, physicalObjectId3]);\n collector2.collect(jobSubjectId);\n assert.isTrue(collector2.definitions.length === 2);\n assert.isTrue(collector2.definitions.includes(spatialCategoryId));\n assert.isTrue(collector2.definitions.includes(nestedSpatialCategoryId));\n assert.isTrue(collector2.elements.length === 2);\n assert.isTrue(collector2.elements.includes(drawingGraphicId1));\n assert.isTrue(collector2.elements.includes(physicalObjectId3));\n }\n\n // Test the deleteElementTree function\n deleteElementTree(iModel, jobSubjectId);\n\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\n assert.isTrue(doesElementExist(iModel, repositoryLinkId), \"RepositoryLink should not have been deleted, since it is not under Job Subject\");\n assert.isFalse(doesElementExist(iModel, definitionModelId));\n assert.isFalse(doesElementExist(iModel, definitionContainerId));\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesElementExist(iModel, spatialCategoryId));\n assert.isFalse(doesElementExist(iModel, nestedSpatialCategoryId));\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\n assert.isFalse(doesElementExist(iModel, xsGroup));\n assert.isFalse(doesElementExist(iModel, xsElement));\n assert.isFalse(doesElementExist(iModel, documentListModelId));\n assert.isFalse(doesElementExist(iModel, drawingModelId));\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\n assert.isFalse(doesElementExist(iModel, physicalModelId));\n assert.isFalse(doesElementExist(iModel, physicalObjectId1));\n assert.isFalse(doesElementExist(iModel, physicalObjectId2));\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n assert.isFalse(doesElementExist(iModel, jobSubjectId));\n assert.isFalse(doesModelExist(iModel, definitionModelId));\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesModelExist(iModel, drawingModelId));\n assert.isFalse(doesModelExist(iModel, physicalModelId));\n });\n\n it(\"deleteElementSubTrees\", () => {\n /*\n [RepositoryModel]\n RepositoryLink\n Job Subject\n +- DefinitionParitition -- [DefinitionModel]\n | DrawingCategory <-- PRUNE\n | default SubCategory + 2 non-default SubCategories\n | ExternalSourceGroup\n | ExternalSource child1\n +- DefinitionParitition -- [DefinitionModel]\n | SpatialCategory\n | DefinitionContainer\n | SpatialCategory\n |\n +- DocumentList -- [DocumentListModel]\n | Drawing -- [DrawingModel] <-- PRUNE\n | DrawingGraphic \"\n +- Child Subject\n |\n +- PhysicalPartition -- [PhysicalModel]\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\n ^-- PRUNE\n */\n\n const toPrune = new Set<string>();\n toPrune.add(drawingModelId);\n toPrune.add(drawingCategoryId);\n toPrune.add(physicalObjectId3);\n\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\n\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\n assert.isFalse(doesElementExist(iModel, drawingModelId));\n assert.isFalse(doesModelExist(iModel, drawingModelId));\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1)); // contents of drawing model should be gone\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\n assert.isTrue(doesElementExist(iModel, definitionModelId));\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\n assert.isTrue(doesElementExist(iModel, drawingDefinitionModelId));\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\n assert.isTrue(doesElementExist(iModel, documentListModelId));\n assert.isTrue(doesElementExist(iModel, physicalModelId));\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\n assert.isTrue(doesModelExist(iModel, definitionModelId));\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isTrue(doesModelExist(iModel, physicalModelId));\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\n });\n\n it(\"deleteDefinitionPartition\", () => {\n /*\n [RepositoryModel]\n RepositoryLink\n Job Subject\n +- DefinitionParitition -- [DefinitionModel] <-- PRUNE\n | DrawingCategory\n | default SubCategory + 2 non-default SubCategories\n | ExternalSourceGroup\n | ExternalSource child1\n +- DefinitionParitition -- [DefinitionModel]\n | SpatialCategory\n | DefinitionContainer\n | SpatialCategory |\n +- DocumentList -- [DocumentListModel]\n | Drawing -- [DrawingModel]\n | DrawingGraphic\n +- Child Subject\n |\n +- PhysicalPartition -- [PhysicalModel]\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\n */\n\n const toPrune = new Set<string>();\n toPrune.add(drawingDefinitionModelId);\n toPrune.add(documentListModelId); // (also get rid of the elements that use the definitions)\n\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\n\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\n assert.isFalse(doesElementExist(iModel, xsGroup));\n assert.isFalse(doesElementExist(iModel, xsElement));\n assert.isFalse(doesElementExist(iModel, documentListModelId));\n assert.isFalse(doesModelExist(iModel, documentListModelId));\n assert.isFalse(doesElementExist(iModel, drawingModelId));\n assert.isFalse(doesModelExist(iModel, drawingModelId));\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\n\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\n assert.isTrue(doesElementExist(iModel, definitionModelId));\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\n assert.isTrue(doesElementExist(iModel, physicalModelId));\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\n assert.isTrue(doesElementExist(iModel, physicalObjectId3));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\n assert.isTrue(doesModelExist(iModel, definitionModelId));\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\n assert.isTrue(doesModelExist(iModel, physicalModelId));\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ElementTreeWalker.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ElementTreeWalker.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,IAAI,EAAyB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAkD,MAAM,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,cAAc,EAAE,mBAAmB,EAAmB,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnT,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAChI,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,gEAAgE;AAChE,MAAM,oBAAqB,SAAQ,mBAAmB;IAC7C,SAAS,GAAc,EAAE,CAAC;IAC1B,gBAAgB,GAAc,EAAE,CAAC;IACjC,QAAQ,GAAc,EAAE,CAAC;IACzB,WAAW,GAAc,EAAE,CAAC;IAEnC,YAAmB,MAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEhD,UAAU,CAAC,KAAY,EAAE,MAA8B;QAC5D,IAAI,KAAK,YAAY,eAAe;YAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;YAErC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAEM,YAAY,CAAC,SAAqB,EAAE,KAA6B;QACtE,IAAI,KAAK,CAAC,iBAAiB;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mEAAmE;;YAErG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEM,OAAO,CAAC,UAAsB;QACnC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACvG,CAAC;CACF;AAED,MAAM,wBAAyB,SAAQ,oBAAoB;IACZ;IAA7C,YAAmB,MAAgB,EAAU,iBAA4B;QAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAA9C,sBAAiB,GAAjB,iBAAiB,CAAW;IAAmB,CAAC;IAC7E,kBAAkB,CAAC,MAAa,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;IAC3D,gBAAgB,CAAC,MAAa,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;IAC1D,kBAAkB,CAAC,SAAqB,IAAa,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CAC1H;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,SAAqB;IAC/D,OAAO,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AACrE,CAAC;AAED,SAAS,cAAc,CAAC,MAAgB,EAAE,GAAe;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAgB,EAAE,MAAkB,EAAE,MAAkB;IAC1F,4DAA4D;IAC5D,OAAO,MAAM,CAAC,qBAAqB,CAAC,wBAAwB,oBAAoB,CAAC,aAAa,sDAAsD,EAAE,CAAC,IAAI,EAAE,EAAE;QAC7J,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,MAAkB,CAAC;IACvB,IAAI,WAAgB,CAAC;IAErB,IAAI,gBAA4B,CAAC;IACjC,IAAI,YAAwB,CAAC;IAC7B,IAAI,YAAwB,CAAC;IAC7B,IAAI,iBAA6B,CAAC;IAClC,IAAI,qBAAiC,CAAC;IACtC,IAAI,wBAAoC,CAAC;IACzC,IAAI,iBAA6B,CAAC;IAClC,IAAI,uBAAmC,CAAC;IACxC,IAAI,iBAA6B,CAAC;IAClC,IAAI,qBAAiC,CAAC;IACtC,IAAI,qBAAiC,CAAC;IACtC,IAAI,OAAmB,CAAC;IACxB,IAAI,SAAqB,CAAC;IAC1B,IAAI,mBAA+B,CAAC;IACpC,IAAI,cAA0B,CAAC;IAC/B,IAAI,iBAA6B,CAAC;IAClC,IAAI,eAA2B,CAAC;IAChC,IAAI,iBAA6B,CAAC;IAClC,IAAI,iBAA6B,CAAC;IAClC,IAAI,iBAA6B,CAAC;IAElC,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAEjC,eAAe,CAAC,qBAAqB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE;QACT,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,2DAA2D;QAC3D,gCAAgC;QAChC,8EAA8E;QAE9E,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAC1F,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACrG,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACvF,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAExF;;;;;;;;;;;;;;;;;;;;;UAqBE;QAEF,gBAAgB,GAAG,eAAe,CAAC,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3F,YAAY,GAAG,eAAe,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAE/E,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAErE,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAC/E,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACtH,wBAAwB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAC7F,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAC7H,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACnH,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAEnH,qBAAqB,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAClG,uBAAuB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE9F,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,mBAAmB,CAAC,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACzJ,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAErM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACrD,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;QACxE,MAAM,oBAAoB,GAA4B;YACpD,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,iBAAiB;YAC5B,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3D,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACtD,CAAC;QACF,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAExE,CAAC,EAAE,eAAe,CAAC,GAAG,eAAe,CAAC,wCAAwC,CAAC,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5K,MAAM,YAAY,GAA0B;YAC1C,aAAa,EAAE,4BAA4B;YAC3C,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACzB,CAAC;QACF,MAAM,aAAa,GAA0B;YAC3C,aAAa,EAAE,4BAA4B;YAC3C,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,uBAAuB;YACjC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;SACzB,CAAC;QACF,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;QACnF,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;QAEnF,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAC/F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QAC5F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAC5F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAClF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAClF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,sFAAsF;QACtF,CAAC;YACC,MAAM,UAAU,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACpD,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,8EAA8E,CAAC,CAAC;YAChM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,yFAAyF,CAAC,CAAC;YACxM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,yFAAyF,CAAC,CAAC;YACvM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,yFAAyF,CAAC,CAAC;YACzM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,kFAAkF,CAAC,CAAC;YAChM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,kFAAkF,CAAC,CAAC;YAC9L,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,kFAAkF,CAAC,CAAC;YACvM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,kFAAkF,CAAC,CAAC;YACrM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,kFAAkF,CAAC,CAAC;YACzL,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,kFAAkF,CAAC,CAAC;QAC9L,CAAC;QAED,8BAA8B;QAC9B,CAAC;YACC,MAAM,UAAU,GAAG,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC5I,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,sCAAsC;QACtC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,gFAAgF,CAAC,CAAC;QAC5I,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B;;;;;;;;;;;;;;;;;;;;;;UAsBE;QAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAE/B,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,2CAA2C;QACxG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAEzF,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAClF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC;;;;;;;;;;;;;;;;;;;;UAoBE;QAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,0DAA0D;QAE5F,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, GeometricElement2dProps, GeometricElementProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { DefinitionContainer, DefinitionModel, DocumentListModel, Drawing, DrawingCategory, DrawingGraphic, ElementGroupsMembers, ElementOwnsChildElements, ExternalSource, ExternalSourceGroup, IModelDb, Model, PhysicalPartition, SnapshotDb, SpatialCategory, SubCategory, Subject } from \"../../core-backend\";\r\nimport { deleteElementSubTrees, deleteElementTree, ElementTreeBottomUp, ElementTreeWalkerScope } from \"../../ElementTreeWalker\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\n\r\n// Test class that collects the results of a bottom-up tree walk\r\nclass ElementTreeCollector extends ElementTreeBottomUp {\r\n public subModels: Id64Array = [];\r\n public definitionModels: Id64Array = [];\r\n public elements: Id64Array = [];\r\n public definitions: Id64Array = [];\r\n\r\n public constructor(iModel: IModelDb) { super(iModel); }\r\n\r\n public visitModel(model: Model, _scope: ElementTreeWalkerScope): void {\r\n if (model instanceof DefinitionModel)\r\n this.definitionModels.push(model.id);\r\n else\r\n this.subModels.push(model.id);\r\n }\r\n\r\n public visitElement(elementId: Id64String, scope: ElementTreeWalkerScope): void {\r\n if (scope.inDefinitionModel)\r\n this.definitions.push(elementId); // may be some other kind of InformationContentElement - that's OK.\r\n else\r\n this.elements.push(elementId);\r\n }\r\n\r\n public collect(topElement: Id64String): void {\r\n this.processElementTree(topElement, ElementTreeWalkerScope.createTopScope(this._iModel, topElement));\r\n }\r\n}\r\n\r\nclass SelectedElementCollector extends ElementTreeCollector {\r\n public constructor(iModel: IModelDb, private _elementsToReport: Id64Array) { super(iModel); }\r\n public override shouldExploreModel(_model: Model): boolean { return true; }\r\n public override shouldVisitModel(_model: Model): boolean { return false; }\r\n public override shouldVisitElement(elementId: Id64String): boolean { return this._elementsToReport.includes(elementId); }\r\n}\r\n\r\nfunction doesElementExist(iModel: IModelDb, elementId: Id64String): boolean {\r\n return iModel.elements.tryGetElementProps(elementId) !== undefined;\r\n}\r\n\r\nfunction doesModelExist(iModel: IModelDb, mid: Id64String): boolean {\r\n return iModel.models.tryGetModelProps(mid) !== undefined;\r\n}\r\n\r\nfunction doesGroupRelationshipExist(iModel: IModelDb, source: Id64String, target: Id64String): boolean {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(`select count(*) from ${ElementGroupsMembers.classFullName} where sourceecinstanceid=? and targetecinstanceid=?`, (stmt) => {\r\n stmt.bindId(1, source);\r\n stmt.bindId(2, target);\r\n stmt.step();\r\n return stmt.getValue(0).getInteger() !== 0;\r\n });\r\n}\r\n\r\ndescribe(\"ElementTreeWalker\", () => {\r\n let iModel: SnapshotDb;\r\n let originalEnv: any;\r\n\r\n let repositoryLinkId: Id64String;\r\n let jobSubjectId: Id64String;\r\n let childSubject: Id64String;\r\n let definitionModelId: Id64String;\r\n let definitionContainerId: Id64String;\r\n let drawingDefinitionModelId: Id64String;\r\n let spatialCategoryId: Id64String;\r\n let nestedSpatialCategoryId: Id64String;\r\n let drawingCategoryId: Id64String;\r\n let drawingSubCategory1Id: Id64String;\r\n let drawingSubCategory2Id: Id64String;\r\n let xsGroup: Id64String;\r\n let xsElement: Id64String;\r\n let documentListModelId: Id64String;\r\n let drawingModelId: Id64String;\r\n let drawingGraphicId1: Id64String;\r\n let physicalModelId: Id64String;\r\n let physicalObjectId1: Id64String;\r\n let physicalObjectId2: Id64String;\r\n let physicalObjectId3: Id64String;\r\n\r\n before(async () => {\r\n originalEnv = { ...process.env };\r\n\r\n IModelTestUtils.registerTestBimSchema();\r\n });\r\n\r\n after(() => {\r\n process.env = originalEnv;\r\n });\r\n\r\n beforeEach(async () => {\r\n // Uncomment the following two lines to debug test failures\r\n // Logger.initializeToConsole();\r\n // Logger.setLevel(\"core-backend.IModelDb.ElementTreeWalker\", LogLevel.Trace);\r\n\r\n const iModelFileName = IModelTestUtils.prepareOutputFile(\"ElementTreeWalker\", \"Test.bim\");\r\n iModel = SnapshotDb.createEmpty(iModelFileName, { rootSubject: { name: \"ElementTreeWalker Test\" } });\r\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\r\n await iModel.importSchemas([schemaPathname]); // will throw an exception if import fails\r\n\r\n /*\r\n [RepositoryModel]\r\n RepositoryLink\r\n Job Subject\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | DrawingCategory\r\n | default SubCategory + 2 non-default SubCategories\r\n | ExternalSourceGroup\r\n | ExternalSource child1\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | SpatialCategory\r\n | DefinitionContainer\r\n | SpatialCategory\r\n |\r\n +- DocumentList -- [DocumentListModel]\r\n | Drawing -- [DrawingModel]\r\n | DrawingGraphic\r\n +- Child Subject\r\n |\r\n +- PhysicalPartition -- [PhysicalModel]\r\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\r\n */\r\n\r\n repositoryLinkId = IModelTestUtils.insertRepositoryLink(iModel, \"test link\", \"foo\", \"bar\");\r\n jobSubjectId = IModelTestUtils.createJobSubjectElement(iModel, \"Job\").insert();\r\n\r\n childSubject = Subject.insert(iModel, jobSubjectId, \"Child Subject\");\r\n\r\n definitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"Definition\");\r\n spatialCategoryId = SpatialCategory.insert(iModel, definitionModelId, \"SpatialCategory\", new SubCategoryAppearance());\r\n drawingDefinitionModelId = DefinitionModel.insert(iModel, jobSubjectId, \"DrawingDefinition\");\r\n drawingCategoryId = DrawingCategory.insert(iModel, drawingDefinitionModelId, \"DrawingCategory\", new SubCategoryAppearance());\r\n drawingSubCategory1Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory1\", new SubCategoryAppearance());\r\n drawingSubCategory2Id = SubCategory.insert(iModel, drawingCategoryId, \"SubCategory2\", new SubCategoryAppearance());\r\n\r\n definitionContainerId = DefinitionContainer.insert(iModel, definitionModelId, Code.createEmpty());\r\n nestedSpatialCategoryId = SpatialCategory.insert(iModel, definitionContainerId, \"nested\", {});\r\n\r\n xsGroup = iModel.elements.insertElement({ classFullName: ExternalSourceGroup.classFullName, model: drawingDefinitionModelId, code: Code.createEmpty() });\r\n xsElement = iModel.elements.insertElement({ classFullName: ExternalSource.classFullName, model: drawingDefinitionModelId, parent: new ElementOwnsChildElements(xsGroup), code: Code.createEmpty() });\r\n\r\n documentListModelId = DocumentListModel.insert(iModel, jobSubjectId, \"Document\");\r\n assert.isTrue(Id64.isValidId64(documentListModelId));\r\n drawingModelId = Drawing.insert(iModel, documentListModelId, \"Drawing\");\r\n const drawingGraphicProps1: GeometricElement2dProps = {\r\n classFullName: DrawingGraphic.classFullName,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n userLabel: \"DrawingGraphic1\",\r\n geom: IModelTestUtils.createRectangle(Point2d.create(1, 1)),\r\n placement: { origin: Point2d.create(2, 2), angle: 0 },\r\n };\r\n drawingGraphicId1 = iModel.elements.insertElement(drawingGraphicProps1);\r\n\r\n [, physicalModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, PhysicalPartition.createCode(iModel, childSubject, \"Physical\"), false, childSubject);\r\n const elementProps: GeometricElementProps = {\r\n classFullName: \"TestBim:TestPhysicalObject\",\r\n model: physicalModelId,\r\n category: spatialCategoryId,\r\n code: Code.createEmpty(),\r\n };\r\n const elementProps2: GeometricElementProps = {\r\n classFullName: \"TestBim:TestPhysicalObject\",\r\n model: physicalModelId,\r\n category: nestedSpatialCategoryId,\r\n code: Code.createEmpty(),\r\n };\r\n physicalObjectId1 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\r\n physicalObjectId2 = iModel.elements.insertElement(iModel.elements.createElement(elementProps2).toJSON());\r\n physicalObjectId3 = iModel.elements.insertElement(iModel.elements.createElement(elementProps).toJSON());\r\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId2).insert();\r\n ElementGroupsMembers.create(iModel, physicalObjectId1, physicalObjectId3).insert();\r\n\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\r\n assert.equal(iModel.elements.getElement(jobSubjectId).parent?.id, IModel.rootSubjectId);\r\n assert.equal(iModel.elements.getElement(definitionModelId).parent?.id, jobSubjectId);\r\n assert.equal(iModel.elements.getElement(definitionContainerId).model, definitionModelId);\r\n assert.equal(iModel.elements.getElement(spatialCategoryId).model, definitionModelId);\r\n assert.equal(iModel.elements.getElement(nestedSpatialCategoryId).model, definitionContainerId);\r\n assert.equal(iModel.elements.getElement(drawingDefinitionModelId).parent?.id, jobSubjectId);\r\n assert.equal(iModel.elements.getElement(drawingCategoryId).model, drawingDefinitionModelId);\r\n assert.equal(iModel.elements.getElement(drawingSubCategory1Id).parent?.id, drawingCategoryId);\r\n assert.equal(iModel.elements.getElement(drawingSubCategory2Id).parent?.id, drawingCategoryId);\r\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\r\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\r\n assert.equal(iModel.elements.getElement(documentListModelId).parent?.id, jobSubjectId);\r\n assert.equal(iModel.elements.getElement(drawingModelId).model, documentListModelId);\r\n assert.equal(iModel.elements.getElement(drawingGraphicId1).model, drawingModelId);\r\n assert.equal(iModel.elements.getElement(physicalModelId).parent?.id, childSubject);\r\n assert.equal(iModel.elements.getElement(physicalObjectId1).model, physicalModelId);\r\n assert.equal(iModel.elements.getElement(physicalObjectId2).model, physicalModelId);\r\n assert.equal(iModel.elements.getElement(physicalObjectId3).model, physicalModelId);\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n assert.isTrue(doesModelExist(iModel, definitionModelId));\r\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\r\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isTrue(doesModelExist(iModel, drawingModelId));\r\n assert.isTrue(doesModelExist(iModel, physicalModelId));\r\n });\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n iModel.close();\r\n });\r\n\r\n it(\"DFS search and deleteElementTree\", () => {\r\n // First, check that DFS search visits elements and models in expected bottom-up order\r\n {\r\n const collector1 = new ElementTreeCollector(iModel);\r\n collector1.collect(jobSubjectId);\r\n assert.isTrue(collector1.subModels.includes(physicalModelId));\r\n assert.isTrue(collector1.subModels.includes(drawingModelId));\r\n assert.isTrue(collector1.subModels.includes(documentListModelId));\r\n assert.isTrue(collector1.subModels.indexOf(drawingModelId) < collector1.subModels.indexOf(documentListModelId), \"in bottom-up search, a child model should be visited before its parent model\");\r\n assert.isFalse(collector1.subModels.includes(definitionModelId));\r\n assert.isTrue(collector1.definitionModels.includes(definitionModelId));\r\n assert.isFalse(collector1.subModels.includes(definitionContainerId));\r\n assert.isTrue(collector1.definitionModels.includes(definitionContainerId));\r\n assert.isFalse(collector1.subModels.includes(drawingDefinitionModelId));\r\n assert.isTrue(collector1.definitionModels.includes(drawingDefinitionModelId));\r\n assert.isTrue(collector1.definitions.includes(drawingCategoryId));\r\n assert.isTrue(collector1.definitions.includes(spatialCategoryId));\r\n assert.isTrue(collector1.definitions.includes(nestedSpatialCategoryId));\r\n assert.isFalse(collector1.elements.includes(drawingCategoryId));\r\n assert.isFalse(collector1.elements.includes(spatialCategoryId));\r\n assert.isFalse(collector1.elements.includes(nestedSpatialCategoryId));\r\n assert.isTrue(collector1.elements.indexOf(physicalObjectId1) < collector1.elements.indexOf(physicalModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\r\n assert.isTrue(collector1.elements.indexOf(drawingGraphicId1) < collector1.elements.indexOf(drawingModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\r\n assert.isTrue(collector1.elements.indexOf(drawingModelId) < collector1.elements.indexOf(documentListModelId), \"in bottom-up search, an element in a model should be visited before its model's element\");\r\n assert.isTrue(collector1.elements.indexOf(documentListModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(definitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(definitionContainerId) < collector1.elements.indexOf(definitionModelId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(drawingDefinitionModelId) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(childSubject) < collector1.elements.indexOf(jobSubjectId), \"in bottom-up search, a child element should be visited before its parent element\");\r\n assert.isTrue(collector1.elements.indexOf(physicalModelId) < collector1.elements.indexOf(childSubject), \"in bottom-up search, a child element should be visited before its parent element\");\r\n }\r\n\r\n // Exercise the search filters\r\n {\r\n const collector2 = new SelectedElementCollector(iModel, [drawingGraphicId1, spatialCategoryId, nestedSpatialCategoryId, physicalObjectId3]);\r\n collector2.collect(jobSubjectId);\r\n assert.isTrue(collector2.definitions.length === 2);\r\n assert.isTrue(collector2.definitions.includes(spatialCategoryId));\r\n assert.isTrue(collector2.definitions.includes(nestedSpatialCategoryId));\r\n assert.isTrue(collector2.elements.length === 2);\r\n assert.isTrue(collector2.elements.includes(drawingGraphicId1));\r\n assert.isTrue(collector2.elements.includes(physicalObjectId3));\r\n }\r\n\r\n // Test the deleteElementTree function\r\n deleteElementTree(iModel, jobSubjectId);\r\n\r\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId), \"RepositoryLink should not have been deleted, since it is not under Job Subject\");\r\n assert.isFalse(doesElementExist(iModel, definitionModelId));\r\n assert.isFalse(doesElementExist(iModel, definitionContainerId));\r\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesElementExist(iModel, spatialCategoryId));\r\n assert.isFalse(doesElementExist(iModel, nestedSpatialCategoryId));\r\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\r\n assert.isFalse(doesElementExist(iModel, xsGroup));\r\n assert.isFalse(doesElementExist(iModel, xsElement));\r\n assert.isFalse(doesElementExist(iModel, documentListModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\r\n assert.isFalse(doesElementExist(iModel, physicalModelId));\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId1));\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId2));\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\r\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n assert.isFalse(doesElementExist(iModel, jobSubjectId));\r\n assert.isFalse(doesModelExist(iModel, definitionModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingModelId));\r\n assert.isFalse(doesModelExist(iModel, physicalModelId));\r\n });\r\n\r\n it(\"deleteElementSubTrees\", () => {\r\n /*\r\n [RepositoryModel]\r\n RepositoryLink\r\n Job Subject\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | DrawingCategory <-- PRUNE\r\n | default SubCategory + 2 non-default SubCategories\r\n | ExternalSourceGroup\r\n | ExternalSource child1\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | SpatialCategory\r\n | DefinitionContainer\r\n | SpatialCategory\r\n |\r\n +- DocumentList -- [DocumentListModel]\r\n | Drawing -- [DrawingModel] <-- PRUNE\r\n | DrawingGraphic \"\r\n +- Child Subject\r\n |\r\n +- PhysicalPartition -- [PhysicalModel]\r\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\r\n ^-- PRUNE\r\n */\r\n\r\n const toPrune = new Set<string>();\r\n toPrune.add(drawingModelId);\r\n toPrune.add(drawingCategoryId);\r\n toPrune.add(physicalObjectId3);\r\n\r\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\r\n\r\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\r\n assert.isFalse(doesElementExist(iModel, drawingModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1)); // contents of drawing model should be gone\r\n assert.isFalse(doesElementExist(iModel, physicalObjectId3));\r\n assert.isFalse(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\r\n assert.isTrue(doesElementExist(iModel, definitionModelId));\r\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\r\n assert.isTrue(doesElementExist(iModel, drawingDefinitionModelId));\r\n assert.equal(iModel.elements.getElement(xsGroup).model, drawingDefinitionModelId);\r\n assert.equal(iModel.elements.getElement(xsElement).parent?.id, xsGroup);\r\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, documentListModelId));\r\n assert.isTrue(doesElementExist(iModel, physicalModelId));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\r\n assert.isTrue(doesModelExist(iModel, definitionModelId));\r\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\r\n assert.isTrue(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isTrue(doesModelExist(iModel, physicalModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\r\n });\r\n\r\n it(\"deleteDefinitionPartition\", () => {\r\n /*\r\n [RepositoryModel]\r\n RepositoryLink\r\n Job Subject\r\n +- DefinitionParitition -- [DefinitionModel] <-- PRUNE\r\n | DrawingCategory\r\n | default SubCategory + 2 non-default SubCategories\r\n | ExternalSourceGroup\r\n | ExternalSource child1\r\n +- DefinitionParitition -- [DefinitionModel]\r\n | SpatialCategory\r\n | DefinitionContainer\r\n | SpatialCategory |\r\n +- DocumentList -- [DocumentListModel]\r\n | Drawing -- [DrawingModel]\r\n | DrawingGraphic\r\n +- Child Subject\r\n |\r\n +- PhysicalPartition -- [PhysicalModel]\r\n PhysicalObject, PhysicalObject, PhysicalObject (grouped)\r\n */\r\n\r\n const toPrune = new Set<string>();\r\n toPrune.add(drawingDefinitionModelId);\r\n toPrune.add(documentListModelId); // (also get rid of the elements that use the definitions)\r\n\r\n deleteElementSubTrees(iModel, jobSubjectId, (elementId) => toPrune.has(elementId));\r\n\r\n assert.isFalse(doesElementExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingDefinitionModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingCategoryId));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory1Id));\r\n assert.isFalse(doesElementExist(iModel, drawingSubCategory2Id));\r\n assert.isFalse(doesElementExist(iModel, xsGroup));\r\n assert.isFalse(doesElementExist(iModel, xsElement));\r\n assert.isFalse(doesElementExist(iModel, documentListModelId));\r\n assert.isFalse(doesModelExist(iModel, documentListModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingModelId));\r\n assert.isFalse(doesModelExist(iModel, drawingModelId));\r\n assert.isFalse(doesElementExist(iModel, drawingGraphicId1));\r\n\r\n assert.isTrue(doesElementExist(iModel, repositoryLinkId));\r\n assert.isTrue(doesElementExist(iModel, definitionModelId));\r\n assert.isTrue(doesElementExist(iModel, definitionContainerId));\r\n assert.isTrue(doesElementExist(iModel, spatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, nestedSpatialCategoryId));\r\n assert.isTrue(doesElementExist(iModel, physicalModelId));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId1));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId2));\r\n assert.isTrue(doesElementExist(iModel, physicalObjectId3));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId2));\r\n assert.isTrue(doesGroupRelationshipExist(iModel, physicalObjectId1, physicalObjectId3));\r\n assert.isTrue(doesElementExist(iModel, jobSubjectId));\r\n assert.isTrue(doesModelExist(iModel, definitionModelId));\r\n assert.isTrue(doesModelExist(iModel, definitionContainerId));\r\n assert.isTrue(doesModelExist(iModel, physicalModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.repositoryModelId));\r\n assert.isTrue(doesModelExist(iModel, IModel.dictionaryId));\r\n });\r\n});\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetTextureImage.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/GetTextureImage.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5K,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE5B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACxI,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACpH,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACtL,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACpJ,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;QACvJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 { expect } from \"chai\";\nimport { TextureLoadProps } from \"@itwin/core-common\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ndescribe(\"IModelDb.queryTextureData\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"ElementGraphics\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\n });\n\n after(() => imodel.close());\n\n it(\"returns undefined if texture not found\", async () => {\n expect(await imodel.queryTextureData({ name: \"0x123\" })).to.be.undefined;\n });\n\n describe(\"throws\", () => {\n it(\"if name is not a valid Id\", async () => {\n await expect(imodel.queryTextureData({} as unknown as TextureLoadProps)).to.be.rejectedWith(\"name property must be a valid Id64String\");\n await expect(imodel.queryTextureData({ name: \"0\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\n await expect(imodel.queryTextureData({ name: \"NotAnId\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\n });\n\n it(\"if max size is not a positive number\", async () => {\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: \"25\" } as unknown as TextureLoadProps)).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: 0 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: -1 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"GetTextureImage.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/GetTextureImage.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,MAAkB,CAAC;IAEvB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,eAAe,CAAC,sBAAsB,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5K,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE5B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACxI,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;YACpH,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACtL,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;YACpJ,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mDAAmD,CAAC,CAAC;QACvJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 { expect } from \"chai\";\r\nimport { TextureLoadProps } from \"@itwin/core-common\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ndescribe(\"IModelDb.queryTextureData\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(() => {\r\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"ElementGraphics\", \"mirukuru.ibim\"), IModelTestUtils.resolveAssetFile(\"mirukuru.ibim\"));\r\n });\r\n\r\n after(() => imodel.close());\r\n\r\n it(\"returns undefined if texture not found\", async () => {\r\n expect(await imodel.queryTextureData({ name: \"0x123\" })).to.be.undefined;\r\n });\r\n\r\n describe(\"throws\", () => {\r\n it(\"if name is not a valid Id\", async () => {\r\n await expect(imodel.queryTextureData({} as unknown as TextureLoadProps)).to.be.rejectedWith(\"name property must be a valid Id64String\");\r\n await expect(imodel.queryTextureData({ name: \"0\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\r\n await expect(imodel.queryTextureData({ name: \"NotAnId\" })).to.be.rejectedWith(\"name property must be a valid Id64String\");\r\n });\r\n\r\n it(\"if max size is not a positive number\", async () => {\r\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: \"25\" } as unknown as TextureLoadProps)).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\r\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: 0 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\r\n await expect(imodel.queryTextureData({ name: \"0x123\", maxTextureSize: -1 })).to.be.rejectedWith(\"maxTextureSize property must be a positive number\");\r\n });\r\n });\r\n});\r\n"]}
|
|
@@ -62,7 +62,7 @@ import { DbResult, Guid, Id64, IModelStatus, Logger, OpenMode, ProcessDetector }
|
|
|
62
62
|
import { BisCodeSpec, BriefcaseIdValue, Code, CodeScopeSpec, CodeSpec, ColorByName, ColorDef, DisplayStyleSettings, EcefLocation, FontMap, FontType, GeoCoordStatus, GeographicCRS, GeometryParams, GeometryStreamBuilder, ImageSourceFormat, IModel, IModelError, RelatedElement, RenderMode, SchemaState, SubCategoryAppearance, TextureMapping, TextureMapUnits, ViewFlags, } from "@itwin/core-common";
|
|
63
63
|
import { Geometry, LineString3d, Loop, Matrix4d, Point3d, PolyfaceBuilder, Range3d, StrokeOptions, Transform, YawPitchRollAngles, } from "@itwin/core-geometry";
|
|
64
64
|
import { V2CheckpointManager } from "../../CheckpointManager";
|
|
65
|
-
import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
|
|
65
|
+
import { _nativeDb, BisCoreSchema, Category, ClassRegistry, DefinitionContainer, DefinitionGroup, DefinitionGroupGroupsDefinitions, DefinitionModel, DefinitionPartition, DictionaryModel, DisplayStyle3d, DocumentPartition, DrawingGraphic, Element, ElementDrivesElement, ElementGroupsMembers, ElementOwnsChildElements, GenericGraphicalType2d, GeometricElement2d, GeometricElement3d, GeometricModel, GroupInformationPartition, IModelDb, IModelHost, IModelJsFs, InformationPartitionElement, InformationRecordElement, LinkPartition, Model, PhysicalElement, PhysicalModel, PhysicalObject, PhysicalPartition, RenderMaterialElement, SnapshotDb, SpatialCategory, SqliteValueType, StandaloneDb, SubCategory, Subject, Texture, } from "../../core-backend";
|
|
66
66
|
import { BriefcaseDb } from "../../IModelDb";
|
|
67
67
|
import { HubMock } from "../../internal/HubMock";
|
|
68
68
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
@@ -1301,12 +1301,15 @@ describe("iModel", () => {
|
|
|
1301
1301
|
// Delete the model
|
|
1302
1302
|
testImodel.models.deleteModel(newModelId);
|
|
1303
1303
|
// Test insertModel error handling
|
|
1304
|
-
|
|
1304
|
+
try {
|
|
1305
1305
|
testImodel.models.insertModel({
|
|
1306
1306
|
classFullName: DefinitionModel.classFullName,
|
|
1307
1307
|
modeledElement: { id: "0x10000000bad" },
|
|
1308
1308
|
});
|
|
1309
|
-
}
|
|
1309
|
+
}
|
|
1310
|
+
catch (error) {
|
|
1311
|
+
assert.isTrue(error instanceof IModelError || error.iTwinErrorId !== undefined);
|
|
1312
|
+
}
|
|
1310
1313
|
});
|
|
1311
1314
|
it("should create model with custom relationship to modeled element", async () => {
|
|
1312
1315
|
const testImodel = imodel1;
|
|
@@ -2086,10 +2089,41 @@ describe("iModel", () => {
|
|
|
2086
2089
|
db.abandonChanges();
|
|
2087
2090
|
db.close();
|
|
2088
2091
|
});
|
|
2092
|
+
it("Cache cleared on abandonChanges", () => {
|
|
2093
|
+
const standaloneFile = IModelTestUtils.prepareOutputFile("IModel", "StandaloneReadWrite.bim");
|
|
2094
|
+
const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: "Standalone" } });
|
|
2095
|
+
db.saveChanges();
|
|
2096
|
+
const code = Code.createEmpty();
|
|
2097
|
+
code.value = "foo";
|
|
2098
|
+
const props = {
|
|
2099
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2100
|
+
model: IModel.dictionaryId,
|
|
2101
|
+
code,
|
|
2102
|
+
};
|
|
2103
|
+
const id = db.elements.insertElement(props);
|
|
2104
|
+
const element1 = db.elements.getElementProps(id);
|
|
2105
|
+
db.abandonChanges();
|
|
2106
|
+
code.value = "bar";
|
|
2107
|
+
const props2 = {
|
|
2108
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2109
|
+
model: IModel.dictionaryId,
|
|
2110
|
+
code,
|
|
2111
|
+
};
|
|
2112
|
+
const id2 = db.elements.insertElement(props2);
|
|
2113
|
+
expect(id2).to.equal(id);
|
|
2114
|
+
const element2 = db.elements.getElementProps(id2);
|
|
2115
|
+
expect(element2).to.not.equal(element1);
|
|
2116
|
+
db.abandonChanges();
|
|
2117
|
+
db.close();
|
|
2118
|
+
});
|
|
2089
2119
|
it("Standalone iModel properties", () => {
|
|
2090
2120
|
const standaloneRootSubjectName = "Standalone";
|
|
2091
2121
|
const standaloneFile1 = IModelTestUtils.prepareOutputFile("IModel", "Standalone1.bim");
|
|
2092
|
-
|
|
2122
|
+
const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
|
|
2123
|
+
const geographicCoordinateSystem = {
|
|
2124
|
+
horizontalCRS: { id: "10TM115-27" },
|
|
2125
|
+
};
|
|
2126
|
+
let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });
|
|
2093
2127
|
assert.isTrue(standaloneDb1.isStandaloneDb());
|
|
2094
2128
|
assert.isTrue(standaloneDb1.isStandalone);
|
|
2095
2129
|
assert.isFalse(standaloneDb1.isReadonly, "Expect standalone iModels to be read-write during create");
|
|
@@ -2102,6 +2136,8 @@ describe("iModel", () => {
|
|
|
2102
2136
|
assert.equal(standaloneDb1.iTwinId, Guid.empty);
|
|
2103
2137
|
assert.strictEqual("", standaloneDb1.changeset.id);
|
|
2104
2138
|
assert.strictEqual(0, standaloneDb1.changeset.index);
|
|
2139
|
+
assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, "standalone ecefLocation should be set");
|
|
2140
|
+
assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "standalone coordinate system should be set");
|
|
2105
2141
|
assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);
|
|
2106
2142
|
standaloneDb1.close();
|
|
2107
2143
|
assert.isFalse(standaloneDb1.isOpen);
|
|
@@ -2119,7 +2155,11 @@ describe("iModel", () => {
|
|
|
2119
2155
|
const snapshotFile2 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot2.bim");
|
|
2120
2156
|
const snapshotFile3 = IModelTestUtils.prepareOutputFile("IModel", "Snapshot3.bim");
|
|
2121
2157
|
const imodel = await generateTestSnapshot("test_for_snapshot.bim", "test.bim");
|
|
2122
|
-
|
|
2158
|
+
const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });
|
|
2159
|
+
const geographicCoordinateSystem = {
|
|
2160
|
+
horizontalCRS: { id: "10TM115-27" },
|
|
2161
|
+
};
|
|
2162
|
+
let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });
|
|
2123
2163
|
let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);
|
|
2124
2164
|
let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });
|
|
2125
2165
|
assert.isTrue(snapshotDb1.isSnapshotDb());
|
|
@@ -2156,6 +2196,8 @@ describe("iModel", () => {
|
|
|
2156
2196
|
assert.isTrue(snapshotDb1.isOpen);
|
|
2157
2197
|
assert.isTrue(snapshotDb2.isOpen);
|
|
2158
2198
|
assert.isTrue(snapshotDb3.isOpen);
|
|
2199
|
+
assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, "snapshot ecefLocation should be set");
|
|
2200
|
+
assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, "10TM115-27", "snapshot coordinate system should be set");
|
|
2159
2201
|
snapshotDb1.close();
|
|
2160
2202
|
snapshotDb2.close();
|
|
2161
2203
|
snapshotDb3.close();
|
|
@@ -2587,6 +2629,32 @@ describe("iModel", () => {
|
|
|
2587
2629
|
expect(categ3.code.value).to.equal(code3.trimmedCodeVal);
|
|
2588
2630
|
imodel.close();
|
|
2589
2631
|
});
|
|
2632
|
+
it("should throw iTwinErrors on element CRUD opertion fails", async () => {
|
|
2633
|
+
const code = Code.createEmpty();
|
|
2634
|
+
code.value = "foo";
|
|
2635
|
+
const props = {
|
|
2636
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2637
|
+
model: IModel.dictionaryId,
|
|
2638
|
+
code,
|
|
2639
|
+
};
|
|
2640
|
+
imodel1.elements.insertElement(props);
|
|
2641
|
+
expect(() => imodel1.elements.insertElement(props)).throws("Error inserting element [duplicate code]").to.have.property("iTwinErrorId");
|
|
2642
|
+
const updateProps = {
|
|
2643
|
+
id: Id64.fromString("0x111111"),
|
|
2644
|
+
classFullName: GenericGraphicalType2d.classFullName,
|
|
2645
|
+
model: IModel.dictionaryId,
|
|
2646
|
+
code,
|
|
2647
|
+
};
|
|
2648
|
+
expect(() => imodel1.elements.updateElement(updateProps)).throws(`Error updating element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
|
|
2649
|
+
expect(() => imodel1.elements.deleteElement(updateProps.id)).throws(`Error deleting element [missing id], id: ${updateProps.id}`).to.have.property("iTwinErrorId");
|
|
2650
|
+
expect(() => imodel1.models.insertModel({ classFullName: DefinitionModel.classFullName, modeledElement: { id: "0x10000000bad" } })).throws("Error inserting model [error=10004], class=BisCore:DefinitionModel").to.have.property("iTwinErrorId");
|
|
2651
|
+
expect(() => imodel1.models.updateModel({
|
|
2652
|
+
id: Id64.fromString("0x111111"),
|
|
2653
|
+
modeledElement: { id: Id64.fromString("0x111111") },
|
|
2654
|
+
classFullName: ""
|
|
2655
|
+
})).throws(`Error updating model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
|
|
2656
|
+
expect(() => imodel1.models.deleteModel(Id64.fromString("0x111111"))).throws(`Error deleting model [missing id], id: ${Id64.fromString("0x111111")}`).to.have.property("iTwinErrorId");
|
|
2657
|
+
});
|
|
2590
2658
|
it("throws NotFound when attempting to access element props after closing the iModel", () => {
|
|
2591
2659
|
const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "accessAfterClose.bim");
|
|
2592
2660
|
const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "accessAfterClose" } });
|
|
@@ -2622,5 +2690,160 @@ describe("iModel", () => {
|
|
|
2622
2690
|
expect(() => imodel.relationships.insertInstance(props)).to.throw(`Failed to insert relationship [${imodelPath}]: rc=2067, constraint failed (BE_SQLITE_CONSTRAINT_UNIQUE)`);
|
|
2623
2691
|
imodel.close();
|
|
2624
2692
|
});
|
|
2693
|
+
function createElemProps(_imodel, modId, catId, className) {
|
|
2694
|
+
// Create props
|
|
2695
|
+
const elementProps = {
|
|
2696
|
+
classFullName: className,
|
|
2697
|
+
model: modId,
|
|
2698
|
+
category: catId,
|
|
2699
|
+
code: Code.createEmpty(),
|
|
2700
|
+
};
|
|
2701
|
+
return elementProps;
|
|
2702
|
+
}
|
|
2703
|
+
function insertElement(imodel, mId, cId, cName, propName) {
|
|
2704
|
+
const elementProps = createElemProps(imodel, mId, cId, cName);
|
|
2705
|
+
const geomElement = imodel.elements.createElement(elementProps);
|
|
2706
|
+
geomElement.name = propName; // Add a custom property to the element
|
|
2707
|
+
const id = imodel.elements.insertElement(geomElement.toJSON());
|
|
2708
|
+
assert.isTrue(Id64.isValidId64(id), "insert failed");
|
|
2709
|
+
return id;
|
|
2710
|
+
}
|
|
2711
|
+
function validateADrivesBRowCount(imodel, expectedRows) {
|
|
2712
|
+
const reader = IModelTestUtils.executeQuery(imodel, `select * from trs.ADrivesB`);
|
|
2713
|
+
assert.strictEqual(reader.length, expectedRows, `Expected ${expectedRows} rows in trs.ADrivesB table`);
|
|
2714
|
+
}
|
|
2715
|
+
function validateNavProp(imodel, expectedNavPropValue) {
|
|
2716
|
+
const reader = IModelTestUtils.executeQuery(imodel, `select NavPropChildB from trs.ChildA`);
|
|
2717
|
+
assert.strictEqual(reader.length, 1);
|
|
2718
|
+
assert.deepEqual(reader[0].navPropChildB, expectedNavPropValue, `Expected NavPropChildB to be "${expectedNavPropValue}"`);
|
|
2719
|
+
}
|
|
2720
|
+
it("Validate invalid relationship classes being inserted/updated", async () => {
|
|
2721
|
+
const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "invalidRelationshipClass.bim");
|
|
2722
|
+
if (IModelJsFs.existsSync(imodelPath))
|
|
2723
|
+
IModelJsFs.unlinkSync(imodelPath);
|
|
2724
|
+
const testImodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "invalidRelationshipClass" } });
|
|
2725
|
+
await testImodel.importSchemaStrings([
|
|
2726
|
+
`<?xml version="1.0" encoding="UTF-8"?>
|
|
2727
|
+
<ECSchema schemaName="TestRelationSchema" alias="trs" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
2728
|
+
<ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
|
|
2729
|
+
<ECEntityClass typeName="TestElement">
|
|
2730
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
2731
|
+
<ECProperty propertyName="Name" typeName="string" />
|
|
2732
|
+
</ECEntityClass>
|
|
2733
|
+
|
|
2734
|
+
<ECEntityClass typeName="ChildA" >
|
|
2735
|
+
<BaseClass>TestElement</BaseClass>
|
|
2736
|
+
<ECNavigationProperty propertyName="NavPropChildB" relationshipName="ADrivesB" direction="Forward" readOnly="True">
|
|
2737
|
+
</ECNavigationProperty>
|
|
2738
|
+
</ECEntityClass>
|
|
2739
|
+
|
|
2740
|
+
<ECEntityClass typeName="ChildB" >
|
|
2741
|
+
<BaseClass>TestElement</BaseClass>
|
|
2742
|
+
</ECEntityClass>
|
|
2743
|
+
|
|
2744
|
+
<ECRelationshipClass typeName="ADrivesB" strengthDirection="Backward" strength="referencing" modifier="Sealed">
|
|
2745
|
+
<Source multiplicity="(0..*)" polymorphic="true" roleLabel="drives">
|
|
2746
|
+
<Class class="ChildA"/>
|
|
2747
|
+
</Source>
|
|
2748
|
+
<Target multiplicity="(0..1)" polymorphic="true" roleLabel="is driven by">
|
|
2749
|
+
<Class class="ChildB"/>
|
|
2750
|
+
</Target>
|
|
2751
|
+
</ECRelationshipClass>
|
|
2752
|
+
|
|
2753
|
+
<ECEntityClass typeName="ChildC">
|
|
2754
|
+
<BaseClass>TestElement</BaseClass>
|
|
2755
|
+
</ECEntityClass>
|
|
2756
|
+
|
|
2757
|
+
<ECEntityClass typeName="ChildD">
|
|
2758
|
+
<BaseClass>TestElement</BaseClass>
|
|
2759
|
+
</ECEntityClass>
|
|
2760
|
+
|
|
2761
|
+
<ECRelationshipClass typeName="CIsRelatedToD" strength="referencing" modifier="Sealed">
|
|
2762
|
+
<BaseClass>bis:ElementRefersToElements</BaseClass>
|
|
2763
|
+
<Source multiplicity="(0..*)" roleLabel="IsRelatedTo" polymorphic="true">
|
|
2764
|
+
<Class class="ChildC"/>
|
|
2765
|
+
</Source>
|
|
2766
|
+
<Target multiplicity="(0..*)" roleLabel="IsRelatedTo (Reversed)" polymorphic="true">
|
|
2767
|
+
<Class class="ChildD"/>
|
|
2768
|
+
</Target>
|
|
2769
|
+
</ECRelationshipClass>
|
|
2770
|
+
</ECSchema>`
|
|
2771
|
+
]);
|
|
2772
|
+
// Enable ECSQL write validation and verify it's set
|
|
2773
|
+
const pragmaRows = IModelTestUtils.executeQuery(testImodel, `PRAGMA validate_ecsql_writes=true`);
|
|
2774
|
+
assert.exists(pragmaRows);
|
|
2775
|
+
assert.strictEqual(pragmaRows[0].validate_ecsql_writes, true);
|
|
2776
|
+
// Ensure ADrivesB table is empty before test
|
|
2777
|
+
validateADrivesBRowCount(testImodel, 0);
|
|
2778
|
+
// Create a physical model and spatial category if needed
|
|
2779
|
+
const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(testImodel, Code.createEmpty(), true);
|
|
2780
|
+
let spatialCategoryId = SpatialCategory.queryCategoryIdByName(testImodel, IModel.dictionaryId, "MySpatialCategory");
|
|
2781
|
+
if (!spatialCategoryId) {
|
|
2782
|
+
spatialCategoryId = SpatialCategory.insert(testImodel, IModel.dictionaryId, "MySpatialCategory", new SubCategoryAppearance({ color: ColorDef.fromString("rgb(255,0,0)").toJSON() }));
|
|
2783
|
+
}
|
|
2784
|
+
// Insert a ChildB element to be referenced by ChildA
|
|
2785
|
+
const idB = insertElement(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildB", "ChildBElement");
|
|
2786
|
+
assert.isTrue(Id64.isValidId64(idB), "Insert ChildBElement failed");
|
|
2787
|
+
testImodel.saveChanges();
|
|
2788
|
+
// Prepare base props for ChildA
|
|
2789
|
+
const elementProps = createElemProps(testImodel, newModelId, spatialCategoryId, "TestRelationSchema:ChildA");
|
|
2790
|
+
// Test various relationship class names for navigation property
|
|
2791
|
+
const testCases = [
|
|
2792
|
+
{ name: "trs:ADrivesB", shouldSucceed: true, expectedRows: 1 },
|
|
2793
|
+
{ name: "trs.FakeClass", shouldSucceed: true, expectedRows: 0 },
|
|
2794
|
+
{ name: "trs:ChildA", shouldSucceed: false, expectedRows: 0 },
|
|
2795
|
+
{ name: "trs:ChildB", shouldSucceed: false, expectedRows: 0 },
|
|
2796
|
+
{ name: "trs:CIsRelatedToD", shouldSucceed: false, expectedRows: 0 },
|
|
2797
|
+
];
|
|
2798
|
+
for (const { name, shouldSucceed, expectedRows } of testCases) {
|
|
2799
|
+
const elemRef = new RelatedElement({ id: idB, relClassName: name });
|
|
2800
|
+
elementProps.navPropChildB = elemRef;
|
|
2801
|
+
elementProps.name = "ChildAElement";
|
|
2802
|
+
const geomElement = testImodel.elements.createElement(elementProps);
|
|
2803
|
+
let idA;
|
|
2804
|
+
try {
|
|
2805
|
+
idA = testImodel.elements.insertElement(geomElement.toJSON());
|
|
2806
|
+
if (shouldSucceed)
|
|
2807
|
+
assert.isTrue(Id64.isValidId64(idA), `Insert should have succeeded for ${name}.`);
|
|
2808
|
+
else
|
|
2809
|
+
assert.fail(`Insert should have failed for ${name}.`);
|
|
2810
|
+
}
|
|
2811
|
+
catch (err) {
|
|
2812
|
+
if (shouldSucceed)
|
|
2813
|
+
assert.fail(`Insert should have succeeded for ${name}. Error: ${err.message}`);
|
|
2814
|
+
// If should not succeed, error is expected
|
|
2815
|
+
}
|
|
2816
|
+
// Validate row count in ADrivesB table
|
|
2817
|
+
validateADrivesBRowCount(testImodel, expectedRows);
|
|
2818
|
+
// If insert succeeded, test update and delete scenarios
|
|
2819
|
+
if (expectedRows === 1 && idA !== undefined) {
|
|
2820
|
+
validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
|
|
2821
|
+
const editElem = testImodel.elements.getElement(idA);
|
|
2822
|
+
editElem.navPropChildB = new RelatedElement({ id: idB, relClassName: "trs.FakeClass" });
|
|
2823
|
+
editElem.name = "ChildAElementUpdated";
|
|
2824
|
+
testImodel.elements.updateElement(editElem);
|
|
2825
|
+
validateADrivesBRowCount(testImodel, 1);
|
|
2826
|
+
validateNavProp(testImodel, { id: idB, relClassName: "TestRelationSchema.ADrivesB" });
|
|
2827
|
+
const editedElem = testImodel.elements.getElement(idA);
|
|
2828
|
+
assert.equal(editedElem.name, "ChildAElementUpdated", `Expected name to be "ChildAElementUpdated" after update, but got "${editedElem.name}"`);
|
|
2829
|
+
assert.strictEqual(editedElem.navPropChildB.relClassName, "TestRelationSchema.ADrivesB", `Expected navPropChildB to be "TestRelationSchema.ADrivesB" after update, but got "${editedElem.navPropChildB}"`);
|
|
2830
|
+
// Set the nav prop value to null
|
|
2831
|
+
editElem.name = "ChildAElementNulled";
|
|
2832
|
+
editElem.navPropChildB = null;
|
|
2833
|
+
testImodel.elements.updateElement(editElem);
|
|
2834
|
+
validateADrivesBRowCount(testImodel, 0);
|
|
2835
|
+
const nulledElem = testImodel.elements.getElement(idA);
|
|
2836
|
+
assert.equal(nulledElem.name, "ChildAElementNulled", `Expected name to be "ChildAElementNulled" after nulling, but got "${nulledElem.name}"`);
|
|
2837
|
+
assert.isUndefined(nulledElem.navPropChildB, `Expected navPropChildB to be undefined after nulling, but got "${nulledElem.navPropChildB}"`);
|
|
2838
|
+
if (shouldSucceed) {
|
|
2839
|
+
// Delete the element
|
|
2840
|
+
testImodel.elements.deleteElement(idA);
|
|
2841
|
+
assert.isUndefined(testImodel.elements.tryGetElement(idA), `Expected element with id ${idA} to be deleted, but it still exists.`);
|
|
2842
|
+
}
|
|
2843
|
+
}
|
|
2844
|
+
testImodel.abandonChanges();
|
|
2845
|
+
}
|
|
2846
|
+
testImodel.close();
|
|
2847
|
+
});
|
|
2625
2848
|
});
|
|
2626
2849
|
//# sourceMappingURL=IModel.test.js.map
|