@itwin/core-backend 5.13.0-dev.12 → 5.13.0-dev.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.js +3 -3
- package/lib/cjs/ChangesetReader.js.map +1 -1
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +25 -25
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PartialChangeUnifier.js +7 -7
- package/lib/cjs/PartialChangeUnifier.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.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.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- 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/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
- 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.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/ECSqlInstanceReshaper.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +33 -33
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.js +3 -3
- package/lib/esm/ChangesetReader.js.map +1 -1
- package/lib/esm/ChangesetReaderTypes.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +25 -25
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PartialChangeUnifier.js +7 -7
- package/lib/esm/PartialChangeUnifier.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.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.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- 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/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.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/ECSqlInstanceReshaper.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +33 -33
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.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/SchemaChangesetCanBeReversed.test.js +51 -51
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +4 -4
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.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/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/example-code/EditTxn.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelElements.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelModels.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelRelationships.test.js +44 -44
- package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -1
- package/lib/esm/test/imodel/IModelViews.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +32 -32
- package/lib/esm/test/internal/ECSqlInstanceReshaper.test.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/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +21 -21
- package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
- package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
- package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js +15 -15
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
- package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DeleteElements.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/EditTxn.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.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.map +1 -1
- package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
- package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.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/test/standalone/iModelDb.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelGeolocation.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelGeolocation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport {\r\n EcefLocation, GeoCoordinatesRequestProps, GeoCoordStatus, GeographicCRS, GeographicCRSProps, IModelCoordinatesRequestProps, PointWithStatus,\r\n} from \"@itwin/core-common\";\r\nimport { Geometry, Point3d, XYZProps } from \"@itwin/core-geometry\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport { SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { closeIfOpen, openReadonlySeedCopy } from \"./IModelTestFixtures\";\r\n\r\n\r\ndescribe(\"iModel geolocation\", () => {\r\n let mirukuruReadonly: SnapshotDb;\r\n let originalEnv: any;\r\n\r\n before(async () => {\r\n originalEnv = { ...process.env };\r\n\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend({ loadGcsWorkspaces: true });\r\n\r\n IModelTestUtils.registerTestBimSchema();\r\n\r\n mirukuruReadonly = await openReadonlySeedCopy(\"geolocation-mirukuru.ibim\", \"mirukuru.ibim\");\r\n });\r\n\r\n after(async () => {\r\n process.env = originalEnv;\r\n\r\n closeIfOpen(mirukuruReadonly);\r\n\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n it(\"ecefLocation for iModels\", () => {\r\n assert.isTrue(mirukuruReadonly.isGeoLocated);\r\n const center = { x: 289095, y: 3803860, z: 10 }; // near center of project extents, 10 meters above ground.\r\n const ecefPt = mirukuruReadonly.spatialToEcef(center);\r\n const pt = { x: -3575156.3661052254, y: 3873432.0891543664, z: 3578996.012643183 };\r\n assert.isTrue(ecefPt.isAlmostEqual(pt), \"spatialToEcef\");\r\n\r\n const z2 = mirukuruReadonly.ecefToSpatial(ecefPt);\r\n assert.isTrue(z2.isAlmostEqual(center), \"ecefToSpatial\");\r\n\r\n const carto = mirukuruReadonly.spatialToCartographicFromEcef(center);\r\n assert.approximately(carto.longitudeDegrees, 132.70683882277805, .1); // this data is in Japan\r\n assert.approximately(carto.latitudeDegrees, 34.35462768786055, .1);\r\n const c2 = { longitude: 2.3161712773709127, latitude: 0.5996013664499733, height: 10 };\r\n assert.isTrue(carto.equalsEpsilon(c2, .001), \"spatialToCartographic\");\r\n\r\n mirukuruReadonly.cartographicToSpatialFromEcef(carto, z2);\r\n assert.isTrue(z2.isAlmostEqual(center, .001), \"cartographicToSpatial\");\r\n\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS!.id === \"UTM84-53N\");\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id === \"ELLIPSOID\");\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by GCS\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const gcs = new GeographicCRS({\r\n horizontalCRS: {\r\n id: \"10TM115-27\",\r\n description: \"\",\r\n source: \"Mentor Software Client\",\r\n deprecated: false,\r\n datumId: \"NAD27\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 0.0,\r\n falseNorthing: 0.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n },\r\n verticalCRS: { id: \"GEOID\" },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 10.0,\r\n translationY: 15.0,\r\n translationZ: 0.02,\r\n rotDeg: 1.2,\r\n scale: 1.0001,\r\n },\r\n },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot2.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n let eventListenedTo = false;\r\n const gcsListener = (previousGCS: GeographicCRS | undefined) => {\r\n assert.equal(previousGCS, undefined);\r\n assert.isTrue(iModel.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(iModel.geographicCoordinateSystem!.equals(gcs));\r\n eventListenedTo = true;\r\n };\r\n iModel.onGeographicCoordinateSystemChanged.addListener(gcsListener);\r\n\r\n assert.isTrue(iModel.geographicCoordinateSystem === undefined);\r\n\r\n assert.isFalse(eventListenedTo);\r\n\r\n iModel.geographicCoordinateSystem = gcs;\r\n\r\n assert.isTrue(eventListenedTo);\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\r\n\r\n // The reloaded gcs will be different as the datum definition will have been expanded\r\n assert.isFalse(iModel2.geographicCoordinateSystem!.equals(gcs));\r\n\r\n // But other properties will be identical\r\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS!.equals(gcs.verticalCRS!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform!.equals(gcs.additionalTransform!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection!.equals(gcs.horizontalCRS!.projection!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id === gcs.horizontalCRS!.id!);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent!.equals(gcs.horizontalCRS!.extent!));\r\n\r\n // The following were not in initial definition but were completed after storage.\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths!.length >= 0);\r\n\r\n // When a gcs is present then the ECEF is automatically defined.\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n\r\n iModel2.close();\r\n });\r\n\r\n describe(\"async coordinate conversions\", () => {\r\n it(\"should output same number of points as input\", async () => {\r\n const iModelCoords: Point3d[] = [];\r\n const geoCoords: Point3d[] = [];\r\n for (let numPts = 0; numPts < 3; numPts++) {\r\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\r\n expect(geoResponse.geoCoords.length).to.equal(numPts);\r\n\r\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\r\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\r\n\r\n iModelCoords.push(new Point3d());\r\n geoCoords.push(new Point3d());\r\n }\r\n });\r\n\r\n it(\"should always have fromCache = 0\", async () => {\r\n const iModelCoords: Point3d[] = [];\r\n const geoCoords: Point3d[] = [];\r\n for (let numPts = 0; numPts < 3; numPts++) {\r\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\r\n expect(geoResponse.fromCache).to.equal(0);\r\n\r\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\r\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\r\n expect(iModelResponse.fromCache).to.equal(0);\r\n\r\n iModelCoords.push(new Point3d());\r\n geoCoords.push(new Point3d());\r\n }\r\n });\r\n\r\n it(\"should be able to reproject with iModel coordinates to or from any other GeographicCRS\", async () => {\r\n const convertTest = async (fileName: string, fileGCS: GeographicCRSProps, datum: string | GeographicCRSProps, inputCoord: XYZProps, outputCoord: PointWithStatus) => {\r\n\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test project\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 0.0, y: 0.0 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n let datumOrGCS: string;\r\n if (typeof datum === \"object\")\r\n datumOrGCS = JSON.stringify(datum);\r\n else\r\n datumOrGCS = datum;\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", fileName);\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n withEditTxn(iModel, (txn) => {\r\n iModel.setGeographicCoordinateSystem(fileGCS);\r\n txn.updateIModelProps();\r\n });\r\n\r\n const testPoint1: XYZProps[] = [];\r\n testPoint1.push(inputCoord);\r\n const requestProps1: GeoCoordinatesRequestProps = { target: datumOrGCS, iModelCoords: testPoint1 };\r\n const response1 = await iModel.getGeoCoordinatesFromIModelCoordinates(requestProps1);\r\n\r\n expect(response1.geoCoords[0].s === outputCoord.s).to.be.true;\r\n\r\n // If success or warning we compare result\r\n if (outputCoord.s === GeoCoordStatus.Success || outputCoord.s === GeoCoordStatus.OutOfUsefulRange) {\r\n\r\n const expectedPt1 = Point3d.fromJSON(outputCoord.p);\r\n const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);\r\n\r\n expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;\r\n expect(Math.abs(expectedPt1.z - outPt1.z) < 0.0001).to.be.true;\r\n\r\n // No point testing reversal when Out of useful range since reversibility is doubtful\r\n if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {\r\n const testPoint2: XYZProps[] = [];\r\n testPoint2.push(outputCoord.p);\r\n const requestProps2: IModelCoordinatesRequestProps = { source: datumOrGCS, geoCoords: testPoint2 };\r\n const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);\r\n\r\n const expectedPt2 = Point3d.fromJSON(inputCoord);\r\n const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);\r\n\r\n expect(expectedPt2.distanceXY(outPt2) < 0.001).to.be.true;\r\n expect(Math.abs(expectedPt2.z - outPt2.z) < 0.001).to.be.true;\r\n }\r\n }\r\n\r\n iModel.close();\r\n };\r\n\r\n const EWRGCS: GeographicCRSProps = {\r\n horizontalCRS: {\r\n id: \"EPSG:27700\",\r\n description: \"OSGB 1936 / British National Grid\",\r\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\r\n datumId: \"EPSG:6277\",\r\n datum: {\r\n id: \"EPSG:6277\",\r\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\r\n deprecated: true,\r\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\r\n ellipsoidId: \"EPSG:7001\",\r\n ellipsoid: {\r\n equatorialRadius: 6377563.396,\r\n polarRadius: 6356256.909237,\r\n id: \"EPSG:7001\",\r\n description: \"Airy 1830\",\r\n source: \"EPSG, Version 6 [EPSG]\",\r\n },\r\n transforms: [\r\n {\r\n method: \"PositionalVector\",\r\n sourceEllipsoid: {\r\n equatorialRadius: 6377563.396,\r\n polarRadius: 6356256.909237,\r\n id: \"EPSG:7001\",\r\n },\r\n targetEllipsoid: {\r\n equatorialRadius: 6378137,\r\n polarRadius: 6356752.3142,\r\n id: \"WGS84\",\r\n },\r\n positionalVector: {\r\n delta: {\r\n x: 446.448,\r\n y: -125.157,\r\n z: 542.06,\r\n },\r\n rotation: {\r\n x: 0.15,\r\n y: 0.247,\r\n z: 0.842,\r\n },\r\n scalePPM: -20.489,\r\n },\r\n }],\r\n },\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n falseEasting: 400000,\r\n falseNorthing: -100000,\r\n centralMeridian: -2,\r\n latitudeOfOrigin: 49,\r\n scaleFactor: 0.999601272737422,\r\n },\r\n extent: {\r\n southWest: {\r\n latitude: 49.96,\r\n longitude: -7.56,\r\n },\r\n northEast: {\r\n latitude: 60.84,\r\n longitude: 1.78,\r\n },\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"ELLIPSOID\",\r\n },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 284597.3343,\r\n translationY: 79859.4651,\r\n translationZ: 0,\r\n rotDeg: 0.5263624458992088,\r\n scale: 0.9996703340508721,\r\n },\r\n },\r\n };\r\n\r\n await convertTest(\"ExtonCampus1.bim\", { horizontalCRS: { id: \"EPSG:2272\" }, verticalCRS: { id: \"NAVD88\" } }, \"WGS84\", { x: 775970.3155166894, y: 83323.24543981979, z: 130.74977547686285 }, { p: { x: -75.68712011112366, y: 40.06524845273591, z: 95.9769083 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-EllipsoidHelmert1.bim\", EWRGCS, \"WGS84\", { x: 199247.08883859176, y: 150141.68625139236, z: 0.0 }, { p: { x: -0.80184489371471, y: 51.978341907041205, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid1.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid2.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"ETRF89\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2030365061523707, y: 49.960007477936202, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid3.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"OSGB\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid1.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid2.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"DHDN/3\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid3.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"WGS84\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.034215937440818, y: 50.573862480894853, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-1.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-2.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"NAD83\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-3.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"WGS84\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM27-10-Ellipsoid1.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58798236995744, y: 38.532616292207997, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM27-10-Ellipsoid2.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"NAD83\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58905088839697, y: 38.532522753851708, z: 0.0 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-4.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-5.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"GEOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.7621583779125531 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-6.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-7.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"GEOID\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-8.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-9.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { epsg: 26942 }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid4.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"HS2_Snake_2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101946692, y: 364048.01547843055, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid5.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } },\r\n {\r\n horizontalCRS: {\r\n id: \"HS2-MOCK\",\r\n description: \"USES CUSTOM DATUM\",\r\n source: \"Test\",\r\n deprecated: false,\r\n datumId: \"HS2SD_2015\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -1.5,\r\n latitudeOfOrigin: 52.30,\r\n scaleFactor: 1.0,\r\n falseEasting: 198873.0046,\r\n falseNorthing: 375064.3871,\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"GEOID\",\r\n },\r\n }\r\n , { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101952373, y: 364048.01548327296, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-12.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } },\r\n {\r\n horizontalCRS: {\r\n id: \"California2\",\r\n description: \"USES CUSTOM DATUM\",\r\n source: \"Test\",\r\n deprecated: false,\r\n datumId: \"NAD83\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"LambertConformalConicTwoParallels\",\r\n longitudeOfOrigin: -122,\r\n latitudeOfOrigin: 37.66666666667,\r\n standardParallel1: 39.833333333333336,\r\n standardParallel2: 38.333333333333336,\r\n falseEasting: 2000000.0,\r\n falseNorthing: 500000.0,\r\n },\r\n extent: {\r\n southWest: {\r\n latitude: 35,\r\n longitude: -125,\r\n },\r\n northEast: {\r\n latitude: 39.1,\r\n longitude: -120.45,\r\n },\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"GEOID\",\r\n },\r\n }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n\r\n // Do some test that return errors\r\n // First test uses one GCS in Eastern USA and the other in UK. This will produce a hard domain error\r\n await convertTest(\"Error1.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.OutOfMathematicalDomain });\r\n\r\n // This test performs conversion in a region outside normal use of GCS but still mathematically valid (soft domain error)\r\n await convertTest(\"Error2.bim\", { horizontalCRS: { id: \"DanishS34-S99\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: -6618.5925260757449, y: 36058.097489683532, z: 0.0 }, { p: { x: 13.53250346041385, y: 54.71216475341563, z: 0.0 }, s: GeoCoordStatus.OutOfUsefulRange });\r\n // -6618.5925260757449, 36058.097489683532\r\n // { x: -221748.034, y: -10012.784, z: 0.0 } { p: { x: 10.36481105, y: 54.38462506, z: 0.0 }\r\n // This test makes use of a GCS using a grid file that does not even exist and will return a datum conversion error.\r\n const userGCSWithinexistentGridFile: GeographicCRSProps = {\r\n horizontalCRS: {\r\n id: \"User1\",\r\n datumId: \"UserDatum1\",\r\n datum: {\r\n id: \"UserDatum1\",\r\n ellipsoidId: \"CLRK66\",\r\n transforms: [\r\n {\r\n method: \"GridFiles\",\r\n sourceEllipsoid: {\r\n id: \"CLRK66\",\r\n equatorialRadius: 6378160.0,\r\n polarRadius: 6356774.719195306,\r\n },\r\n targetEllipsoid: {\r\n id: \"WGS84\",\r\n equatorialRadius: 6378160.0,\r\n polarRadius: 6356774.719195306,\r\n },\r\n gridFile: {\r\n files: [\r\n { fileName: \"./user/inexistent.gdc\", format: \"NTv2\", direction: \"Direct\" },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 1.0,\r\n falseNorthing: 2.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n }, verticalCRS: { id: \"ELLIPSOID\" },\r\n };\r\n\r\n await convertTest(\"Error3.bim\", userGCSWithinexistentGridFile, \"WGS84\", { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoDatumConverter });\r\n\r\n // The model GCS is not valid\r\n await convertTest(\"Error4.bim\", { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\r\n\r\n // The given GCS is not valid\r\n await convertTest(\"Error5.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\r\n\r\n });\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 1, pitch: 1, roll: -1 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n assert.isTrue(iModel.ecefLocation === undefined);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel2.close();\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF with 0,0,0 rotation\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 0, pitch: 0, roll: 0 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3_000.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n assert.isTrue(iModel.ecefLocation === undefined);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel2.close();\r\n });\r\n\r\n it(\"presence of a GCS imposes the ecef value\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const gcs = new GeographicCRS({\r\n horizontalCRS: {\r\n id: \"10TM115-27\",\r\n description: \"\",\r\n source: \"Mentor Software Client\",\r\n deprecated: false,\r\n datumId: \"NAD27\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 0.0,\r\n falseNorthing: 0.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n },\r\n verticalCRS: { id: \"GEOID\" },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 10.0,\r\n translationY: 15.0,\r\n translationZ: 0.02,\r\n rotDeg: 1.2,\r\n scale: 1.0001,\r\n },\r\n },\r\n });\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 1, pitch: 1, roll: -1 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot4.bim\");\r\n\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openForApplyChangesets(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n assert.isTrue(iModel2.geographicCoordinateSystem === undefined);\r\n\r\n iModel2.geographicCoordinateSystem = gcs;\r\n\r\n withEditTxn(iModel2, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel2.close();\r\n\r\n const iModel3 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel3.geographicCoordinateSystem !== undefined);\r\n\r\n // When a gcs is present then ecef value is imposed by the gcs disregarding previous value.\r\n assert.isTrue(iModel3.ecefLocation !== undefined);\r\n assert.isFalse(iModel3.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel3.close();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelGeolocation.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelGeolocation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport {\n EcefLocation, GeoCoordinatesRequestProps, GeoCoordStatus, GeographicCRS, GeographicCRSProps, IModelCoordinatesRequestProps, PointWithStatus,\n} from \"@itwin/core-common\";\nimport { Geometry, Point3d, XYZProps } from \"@itwin/core-geometry\";\nimport { withEditTxn } from \"../../EditTxn\";\nimport { SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\nimport { closeIfOpen, openReadonlySeedCopy } from \"./IModelTestFixtures\";\n\n\ndescribe(\"iModel geolocation\", () => {\n let mirukuruReadonly: SnapshotDb;\n let originalEnv: any;\n\n before(async () => {\n originalEnv = { ...process.env };\n\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend({ loadGcsWorkspaces: true });\n\n IModelTestUtils.registerTestBimSchema();\n\n mirukuruReadonly = await openReadonlySeedCopy(\"geolocation-mirukuru.ibim\", \"mirukuru.ibim\");\n });\n\n after(async () => {\n process.env = originalEnv;\n\n closeIfOpen(mirukuruReadonly);\n\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n it(\"ecefLocation for iModels\", () => {\n assert.isTrue(mirukuruReadonly.isGeoLocated);\n const center = { x: 289095, y: 3803860, z: 10 }; // near center of project extents, 10 meters above ground.\n const ecefPt = mirukuruReadonly.spatialToEcef(center);\n const pt = { x: -3575156.3661052254, y: 3873432.0891543664, z: 3578996.012643183 };\n assert.isTrue(ecefPt.isAlmostEqual(pt), \"spatialToEcef\");\n\n const z2 = mirukuruReadonly.ecefToSpatial(ecefPt);\n assert.isTrue(z2.isAlmostEqual(center), \"ecefToSpatial\");\n\n const carto = mirukuruReadonly.spatialToCartographicFromEcef(center);\n assert.approximately(carto.longitudeDegrees, 132.70683882277805, .1); // this data is in Japan\n assert.approximately(carto.latitudeDegrees, 34.35462768786055, .1);\n const c2 = { longitude: 2.3161712773709127, latitude: 0.5996013664499733, height: 10 };\n assert.isTrue(carto.equalsEpsilon(c2, .001), \"spatialToCartographic\");\n\n mirukuruReadonly.cartographicToSpatialFromEcef(carto, z2);\n assert.isTrue(z2.isAlmostEqual(center, .001), \"cartographicToSpatial\");\n\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem !== undefined);\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS !== undefined);\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS !== undefined);\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id !== undefined);\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS!.id === \"UTM84-53N\");\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id === \"ELLIPSOID\");\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by GCS\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const gcs = new GeographicCRS({\n horizontalCRS: {\n id: \"10TM115-27\",\n description: \"\",\n source: \"Mentor Software Client\",\n deprecated: false,\n datumId: \"NAD27\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 0.0,\n falseNorthing: 0.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n },\n verticalCRS: { id: \"GEOID\" },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 10.0,\n translationY: 15.0,\n translationZ: 0.02,\n rotDeg: 1.2,\n scale: 1.0001,\n },\n },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot2.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n let eventListenedTo = false;\n const gcsListener = (previousGCS: GeographicCRS | undefined) => {\n assert.equal(previousGCS, undefined);\n assert.isTrue(iModel.geographicCoordinateSystem !== undefined);\n assert.isTrue(iModel.geographicCoordinateSystem!.equals(gcs));\n eventListenedTo = true;\n };\n iModel.onGeographicCoordinateSystemChanged.addListener(gcsListener);\n\n assert.isTrue(iModel.geographicCoordinateSystem === undefined);\n\n assert.isFalse(eventListenedTo);\n\n iModel.geographicCoordinateSystem = gcs;\n\n assert.isTrue(eventListenedTo);\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\n\n // The reloaded gcs will be different as the datum definition will have been expanded\n assert.isFalse(iModel2.geographicCoordinateSystem!.equals(gcs));\n\n // But other properties will be identical\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS!.equals(gcs.verticalCRS!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform!.equals(gcs.additionalTransform!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection!.equals(gcs.horizontalCRS!.projection!));\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id === gcs.horizontalCRS!.id!);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent!.equals(gcs.horizontalCRS!.extent!));\n\n // The following were not in initial definition but were completed after storage.\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths !== undefined);\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths!.length >= 0);\n\n // When a gcs is present then the ECEF is automatically defined.\n assert.isTrue(iModel2.ecefLocation !== undefined);\n\n iModel2.close();\n });\n\n describe(\"async coordinate conversions\", () => {\n it(\"should output same number of points as input\", async () => {\n const iModelCoords: Point3d[] = [];\n const geoCoords: Point3d[] = [];\n for (let numPts = 0; numPts < 3; numPts++) {\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\n expect(geoResponse.geoCoords.length).to.equal(numPts);\n\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\n\n iModelCoords.push(new Point3d());\n geoCoords.push(new Point3d());\n }\n });\n\n it(\"should always have fromCache = 0\", async () => {\n const iModelCoords: Point3d[] = [];\n const geoCoords: Point3d[] = [];\n for (let numPts = 0; numPts < 3; numPts++) {\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\n expect(geoResponse.fromCache).to.equal(0);\n\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\n expect(iModelResponse.fromCache).to.equal(0);\n\n iModelCoords.push(new Point3d());\n geoCoords.push(new Point3d());\n }\n });\n\n it(\"should be able to reproject with iModel coordinates to or from any other GeographicCRS\", async () => {\n const convertTest = async (fileName: string, fileGCS: GeographicCRSProps, datum: string | GeographicCRSProps, inputCoord: XYZProps, outputCoord: PointWithStatus) => {\n\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test project\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 0.0, y: 0.0 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n let datumOrGCS: string;\n if (typeof datum === \"object\")\n datumOrGCS = JSON.stringify(datum);\n else\n datumOrGCS = datum;\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", fileName);\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n withEditTxn(iModel, (txn) => {\n iModel.setGeographicCoordinateSystem(fileGCS);\n txn.updateIModelProps();\n });\n\n const testPoint1: XYZProps[] = [];\n testPoint1.push(inputCoord);\n const requestProps1: GeoCoordinatesRequestProps = { target: datumOrGCS, iModelCoords: testPoint1 };\n const response1 = await iModel.getGeoCoordinatesFromIModelCoordinates(requestProps1);\n\n expect(response1.geoCoords[0].s === outputCoord.s).to.be.true;\n\n // If success or warning we compare result\n if (outputCoord.s === GeoCoordStatus.Success || outputCoord.s === GeoCoordStatus.OutOfUsefulRange) {\n\n const expectedPt1 = Point3d.fromJSON(outputCoord.p);\n const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);\n\n expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;\n expect(Math.abs(expectedPt1.z - outPt1.z) < 0.0001).to.be.true;\n\n // No point testing reversal when Out of useful range since reversibility is doubtful\n if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {\n const testPoint2: XYZProps[] = [];\n testPoint2.push(outputCoord.p);\n const requestProps2: IModelCoordinatesRequestProps = { source: datumOrGCS, geoCoords: testPoint2 };\n const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);\n\n const expectedPt2 = Point3d.fromJSON(inputCoord);\n const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);\n\n expect(expectedPt2.distanceXY(outPt2) < 0.001).to.be.true;\n expect(Math.abs(expectedPt2.z - outPt2.z) < 0.001).to.be.true;\n }\n }\n\n iModel.close();\n };\n\n const EWRGCS: GeographicCRSProps = {\n horizontalCRS: {\n id: \"EPSG:27700\",\n description: \"OSGB 1936 / British National Grid\",\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n datumId: \"EPSG:6277\",\n datum: {\n id: \"EPSG:6277\",\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n deprecated: true,\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n ellipsoidId: \"EPSG:7001\",\n ellipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n description: \"Airy 1830\",\n source: \"EPSG, Version 6 [EPSG]\",\n },\n transforms: [\n {\n method: \"PositionalVector\",\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n polarRadius: 6356752.3142,\n id: \"WGS84\",\n },\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n }],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n falseEasting: 400000,\n falseNorthing: -100000,\n centralMeridian: -2,\n latitudeOfOrigin: 49,\n scaleFactor: 0.999601272737422,\n },\n extent: {\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n },\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 284597.3343,\n translationY: 79859.4651,\n translationZ: 0,\n rotDeg: 0.5263624458992088,\n scale: 0.9996703340508721,\n },\n },\n };\n\n await convertTest(\"ExtonCampus1.bim\", { horizontalCRS: { id: \"EPSG:2272\" }, verticalCRS: { id: \"NAVD88\" } }, \"WGS84\", { x: 775970.3155166894, y: 83323.24543981979, z: 130.74977547686285 }, { p: { x: -75.68712011112366, y: 40.06524845273591, z: 95.9769083 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-EllipsoidHelmert1.bim\", EWRGCS, \"WGS84\", { x: 199247.08883859176, y: 150141.68625139236, z: 0.0 }, { p: { x: -0.80184489371471, y: 51.978341907041205, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid1.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid2.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"ETRF89\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2030365061523707, y: 49.960007477936202, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"BritishNatGrid-Ellipsoid3.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"OSGB\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid1.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid2.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"DHDN/3\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"GermanyDHDN-3-Ellipsoid3.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"WGS84\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.034215937440818, y: 50.573862480894853, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-1.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-2.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"NAD83\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-3.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"WGS84\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM27-10-Ellipsoid1.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58798236995744, y: 38.532616292207997, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM27-10-Ellipsoid2.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"NAD83\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58905088839697, y: 38.532522753851708, z: 0.0 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-4.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-5.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"GEOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.7621583779125531 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-6.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-7.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"GEOID\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-8.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.0 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-9.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { epsg: 26942 }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.0006774162750405877 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid4.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"HS2_Snake_2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101946692, y: 364048.01547843055, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid5.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } },\n {\n horizontalCRS: {\n id: \"HS2-MOCK\",\n description: \"USES CUSTOM DATUM\",\n source: \"Test\",\n deprecated: false,\n datumId: \"HS2SD_2015\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -1.5,\n latitudeOfOrigin: 52.30,\n scaleFactor: 1.0,\n falseEasting: 198873.0046,\n falseNorthing: 375064.3871,\n },\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n }\n , { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101952373, y: 364048.01548327296, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"BritishNatGrid-Ellipsoid.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.Success });\n\n await convertTest(\"UTM83-10-NGVD29-12.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } },\n {\n horizontalCRS: {\n id: \"California2\",\n description: \"USES CUSTOM DATUM\",\n source: \"Test\",\n deprecated: false,\n datumId: \"NAD83\",\n unit: \"Meter\",\n projection: {\n method: \"LambertConformalConicTwoParallels\",\n longitudeOfOrigin: -122,\n latitudeOfOrigin: 37.66666666667,\n standardParallel1: 39.833333333333336,\n standardParallel2: 38.333333333333336,\n falseEasting: 2000000.0,\n falseNorthing: 500000.0,\n },\n extent: {\n southWest: {\n latitude: 35,\n longitude: -125,\n },\n northEast: {\n latitude: 39.1,\n longitude: -120.45,\n },\n },\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\n\n // Do some test that return errors\n // First test uses one GCS in Eastern USA and the other in UK. This will produce a hard domain error\n await convertTest(\"Error1.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.OutOfMathematicalDomain });\n\n // This test performs conversion in a region outside normal use of GCS but still mathematically valid (soft domain error)\n await convertTest(\"Error2.bim\", { horizontalCRS: { id: \"DanishS34-S99\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: -6618.5925260757449, y: 36058.097489683532, z: 0.0 }, { p: { x: 13.53250346041385, y: 54.71216475341563, z: 0.0 }, s: GeoCoordStatus.OutOfUsefulRange });\n // -6618.5925260757449, 36058.097489683532\n // { x: -221748.034, y: -10012.784, z: 0.0 } { p: { x: 10.36481105, y: 54.38462506, z: 0.0 }\n // This test makes use of a GCS using a grid file that does not even exist and will return a datum conversion error.\n const userGCSWithinexistentGridFile: GeographicCRSProps = {\n horizontalCRS: {\n id: \"User1\",\n datumId: \"UserDatum1\",\n datum: {\n id: \"UserDatum1\",\n ellipsoidId: \"CLRK66\",\n transforms: [\n {\n method: \"GridFiles\",\n sourceEllipsoid: {\n id: \"CLRK66\",\n equatorialRadius: 6378160.0,\n polarRadius: 6356774.719195306,\n },\n targetEllipsoid: {\n id: \"WGS84\",\n equatorialRadius: 6378160.0,\n polarRadius: 6356774.719195306,\n },\n gridFile: {\n files: [\n { fileName: \"./user/inexistent.gdc\", format: \"NTv2\", direction: \"Direct\" },\n ],\n },\n },\n ],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 1.0,\n falseNorthing: 2.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n }, verticalCRS: { id: \"ELLIPSOID\" },\n };\n\n await convertTest(\"Error3.bim\", userGCSWithinexistentGridFile, \"WGS84\", { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoDatumConverter });\n\n // The model GCS is not valid\n await convertTest(\"Error4.bim\", { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\n\n // The given GCS is not valid\n await convertTest(\"Error5.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\n\n });\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 1, pitch: 1, roll: -1 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n assert.isTrue(iModel.ecefLocation === undefined);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n iModel2.close();\n });\n\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF with 0,0,0 rotation\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 0, pitch: 0, roll: 0 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3_000.bim\");\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n assert.isTrue(iModel.ecefLocation === undefined);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n iModel2.close();\n });\n\n it(\"presence of a GCS imposes the ecef value\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const gcs = new GeographicCRS({\n horizontalCRS: {\n id: \"10TM115-27\",\n description: \"\",\n source: \"Mentor Software Client\",\n deprecated: false,\n datumId: \"NAD27\",\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n centralMeridian: -115,\n latitudeOfOrigin: 0,\n scaleFactor: 0.9992,\n falseEasting: 0.0,\n falseNorthing: 0.0,\n },\n extent: {\n southWest: { latitude: 48, longitude: -120.5 },\n northEast: { latitude: 84, longitude: -109.5 },\n },\n },\n verticalCRS: { id: \"GEOID\" },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 10.0,\n translationY: 15.0,\n translationZ: 0.02,\n rotDeg: 1.2,\n scale: 1.0001,\n },\n },\n });\n\n const ecef = new EcefLocation({\n origin: [42, 21, 0],\n orientation: { yaw: 1, pitch: 1, roll: -1 },\n });\n\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot4.bim\");\n\n const iModel = SnapshotDb.createEmpty(testFile, args);\n\n iModel.ecefLocation = ecef;\n\n withEditTxn(iModel, (txn) => {\n txn.updateIModelProps();\n });\n iModel.close();\n\n const iModel2 = SnapshotDb.openForApplyChangesets(testFile);\n\n assert.isTrue(iModel2.ecefLocation !== undefined);\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\n\n assert.isTrue(iModel2.geographicCoordinateSystem === undefined);\n\n iModel2.geographicCoordinateSystem = gcs;\n\n withEditTxn(iModel2, (txn) => {\n txn.updateIModelProps();\n });\n iModel2.close();\n\n const iModel3 = SnapshotDb.openFile(testFile);\n\n assert.isTrue(iModel3.geographicCoordinateSystem !== undefined);\n\n // When a gcs is present then ecef value is imposed by the gcs disregarding previous value.\n assert.isTrue(iModel3.ecefLocation !== undefined);\n assert.isFalse(iModel3.ecefLocation!.isAlmostEqual(ecef));\n\n iModel3.close();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelLifecycle.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport * as semver from \"semver\";\r\nimport * as sinon from \"sinon\";\r\nimport { DbResult, Guid, GuidString, Id64, IModelStatus, Logger, OpenMode } from \"@itwin/core-bentley\";\r\nimport { BriefcaseIdValue, ChangesetIdWithIndex, Code, EcefLocation, FilePropertyProps, GeometricElementProps, IModel, IModelError, SchemaState, SubCategoryAppearance, TypeDefinitionElementProps } from \"@itwin/core-common\";\r\nimport { ECVersion } from \"@itwin/ecschema-metadata\";\r\nimport { V2CheckpointAccessProps } from \"../../BackendHubAccess\";\r\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\nimport { GenericGraphicalType2d, IModelDb, IModelHost, IModelJsFs, PhysicalModel, PhysicalObject, SnapshotDb, SpatialCategory, StandaloneDb, Subject } from \"../../core-backend\";\r\nimport { BriefcaseDb, SnapshotDbOpenArgs } from \"../../IModelDb\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { _cache, _hubAccess, _instanceKeyCache, _nativeDb } from \"../../internal/Symbols\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { performance } from \"perf_hooks\";\r\nimport { createIModelFromSeed, expectIModelError, getIModelError, importTestBim } from \"./IModelTestFixtures\";\r\n\r\n\r\ndescribe(\"iModel lifecycle\", () => {\r\n let originalEnv: NodeJS.ProcessEnv;\r\n\r\n before(async () => {\r\n originalEnv = { ...process.env };\r\n await TestUtils.startBackend();\r\n IModelTestUtils.registerTestBimSchema();\r\n });\r\n\r\n after(() => {\r\n process.env = originalEnv;\r\n });\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n });\r\n\r\n function hasClassView(db: IModelDb, name: string): boolean {\r\n try {\r\n return db.withSqliteStatement(`SELECT ECInstanceId FROM [${name}]`, (): boolean => true, false);\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n it(\"should be able to create a snapshot IModel\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot.bim\"), args);\r\n assert.equal(iModel.iModelId, args.guid);\r\n assert.equal(iModel.rootSubject.name, args.rootSubject.name);\r\n assert.equal(iModel.rootSubject.description, args.rootSubject.description);\r\n assert.equal(iModel.projectExtents.low.x, args.projectExtents.low.x);\r\n assert.equal(iModel.projectExtents.low.y, args.projectExtents.low.y);\r\n assert.equal(iModel.projectExtents.low.z, args.projectExtents.low.z);\r\n assert.equal(iModel.globalOrigin.x, args.globalOrigin.x);\r\n assert.equal(iModel.globalOrigin.y, args.globalOrigin.y);\r\n assert.equal(iModel.globalOrigin.z, 0);\r\n\r\n const client = iModel.queryFilePropertyString({ name: \"Client\", namespace: \"dgn_Db\" });\r\n assert.equal(client, args.client, \"query Client property\");\r\n\r\n const dbguid = iModel.queryFilePropertyBlob({ name: \"DbGuid\", namespace: \"be_Db\" });\r\n assert.equal(dbguid!.byteLength, 16, \"query guid property\");\r\n\r\n const myPropsStr: FilePropertyProps = { name: \"MyProp\", namespace: \"test1\", id: 1, subId: 1 };\r\n const myStrVal = \"this is a test\";\r\n const myPropsBlob: FilePropertyProps = { name: \"MyBlob\", namespace: \"test1\", id: 10 };\r\n const testRange = new Uint8Array(500);\r\n testRange.fill(11);\r\n withEditTxn(iModel, (txn) => {\r\n txn.saveFileProperty(myPropsStr, myStrVal);\r\n const readFromDb = iModel.queryFilePropertyString(myPropsStr);\r\n assert.equal(readFromDb, myStrVal, \"query string after save\");\r\n\r\n txn.saveFileProperty(myPropsBlob, undefined, testRange);\r\n const blobFromDb = iModel.queryFilePropertyBlob(myPropsBlob);\r\n assert.deepEqual(blobFromDb, testRange, \"query blob after save\");\r\n\r\n let next = iModel.queryNextAvailableFileProperty(myPropsBlob);\r\n assert.equal(11, next, \"queryNextAvailableFileProperty blob\");\r\n\r\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\r\n assert.equal(2, next, \"queryNextAvailableFileProperty str\");\r\n txn.deleteFileProperty(myPropsStr);\r\n assert.isUndefined(iModel.queryFilePropertyString(myPropsStr), \"property was deleted\");\r\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\r\n assert.equal(0, next, \"queryNextAvailableFileProperty, should return 0 when none present\");\r\n });\r\n\r\n const testLocal = \"TestLocal\";\r\n const testValue = \"this is a test\";\r\n const nativeDb = iModel[_nativeDb];\r\n assert.isUndefined(nativeDb.queryLocalValue(testLocal));\r\n nativeDb.saveLocalValue(testLocal, testValue);\r\n assert.equal(nativeDb.queryLocalValue(testLocal), testValue);\r\n\r\n iModel.close();\r\n });\r\n it(\"should be able to open checkpoints for RPC\", async () => {\r\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\r\n const iTwinId = \"fakeIModelId\";\r\n const iModelId = \"fakeIModelId\";\r\n const cloudContainer = { accessToken: \"sas\" };\r\n const fakeSnapshotDb: any =\r\n {\r\n cloudContainer,\r\n isReadonly: () => true,\r\n isOpen: () => true,\r\n getIModelId: () => iModelId,\r\n getITwinId: () => iTwinId,\r\n getCurrentChangeset: () => changeset,\r\n hasUnsavedChanges: () => false,\r\n setIModelDb: () => { },\r\n closeFile: () => { },\r\n clearECDbCache: () => { },\r\n };\r\n\r\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\r\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\r\n\r\n // Mock iModelHub\r\n const mockCheckpointV2: V2CheckpointAccessProps = {\r\n accountName: \"testAccount\",\r\n containerId: \"imodelblocks-123\",\r\n sasToken: \"testSAS\",\r\n dbName: \"testDb\",\r\n storageType: \"azure?sas=1\",\r\n };\r\n\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\r\n return { dbName: \"fakeDb\", container: { accessToken: \"sas\" } as any };\r\n });\r\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\r\n\r\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\r\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\r\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\r\n\r\n const accessToken = \"token\";\r\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId, iModelId, changeset });\r\n expect(openDgnDbStub.calledOnce).to.be.true;\r\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\r\n\r\n const props = checkpoint.getRpcProps();\r\n assert.equal(props.iModelId, iModelId);\r\n assert.equal(props.iTwinId, iTwinId);\r\n assert.equal(props.changeset?.id, changeset.id);\r\n assert.equal(errorLogStub.callCount, 1);\r\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\r\n\r\n errorLogStub.resetHistory();\r\n expect(cloudContainer.accessToken).equal(\"sas\");\r\n await checkpoint.refreshContainerForRpc(accessToken);\r\n expect(cloudContainer.accessToken).equal(\"testSAS\");\r\n\r\n assert.equal(errorLogStub.callCount, 1);\r\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\r\n assert.equal(infoLogStub.callCount, 2);\r\n assert.include(infoLogStub.args[0][1], \"attempting to refresh\");\r\n assert.include(infoLogStub.args[1][1], \"refreshed checkpoint\");\r\n\r\n errorLogStub.resetHistory();\r\n queryStub.callsFake(async () => {\r\n throw new Error(\"no checkpoint\");\r\n });\r\n await expect(checkpoint.refreshContainerForRpc(accessToken)).to.eventually.be.rejectedWith(\"no checkpoint\");\r\n\r\n checkpoint.close();\r\n });\r\n it(\"should throw for missing/invalid checkpoint in hub\", async () => {\r\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => undefined);\r\n\r\n const accessToken = \"token\";\r\n const error = await getIModelError(SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId: Guid.createValue(), iModelId: Guid.createValue(), changeset: IModelTestUtils.generateChangeSetId() }));\r\n expectIModelError(IModelStatus.NotFound, error);\r\n });\r\n it(\"attempting to re-attach a non-checkpoint snapshot should be a no-op\", async () => {\r\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\r\n const accessToken = \"token\";\r\n const imodel = await importTestBim(createIModelFromSeed(\"reattachNonCheckpoint.bim\", \"test.bim\"));\r\n try {\r\n await imodel.refreshContainerForRpc(accessToken);\r\n } finally {\r\n imodel.close();\r\n }\r\n });\r\n it(\"Check busyTimeout option\", () => {\r\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\r\n const tryOpen = (fileName: string, options?: SnapshotDbOpenArgs) => {\r\n const start = performance.now();\r\n let didThrow = false;\r\n try {\r\n StandaloneDb.openFile(fileName, OpenMode.ReadWrite, options);\r\n } catch (e: any) {\r\n assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, \"Expect error 'Db is busy'\");\r\n didThrow = true;\r\n }\r\n assert.isTrue(didThrow);\r\n return performance.now() - start;\r\n };\r\n const seconds = (s: number) => s * 1000;\r\n\r\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\r\n const txn = new EditTxn(db, \"busy timeout test\");\r\n txn.start();\r\n // lock db so another connection cannot write to it.\r\n txn.saveFileProperty({ name: \"test\", namespace: \"test\" }, \"\");\r\n\r\n assert.isAtMost(tryOpen(standaloneFile, { busyTimeout: seconds(0) }), seconds(1), \"open should fail with busy error instantly\");\r\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(1) }), seconds(1), \"open should fail with atleast 1 sec delay due to retry\");\r\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(2) }), seconds(2), \"open should fail with atleast 2 sec delay due to retry\");\r\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(3) }), seconds(3), \"open should fail with atleast 3 sec delay due to retry\");\r\n\r\n txn.end(\"abandon\");\r\n db.close();\r\n });\r\n it(\"Cache cleared on abandonChanges\", () => {\r\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\r\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\r\n const txn = new EditTxn(db, \"cache cleared on abandonChanges\");\r\n txn.start();\r\n\r\n const code = Code.createEmpty();\r\n code.value = \"foo\";\r\n const props: TypeDefinitionElementProps = {\r\n classFullName: GenericGraphicalType2d.classFullName,\r\n model: IModel.dictionaryId,\r\n code,\r\n };\r\n const id = txn.insertElement(props);\r\n const element1 = db.elements.getElementProps(id);\r\n txn.end(\"abandon\");\r\n\r\n code.value = \"bar\";\r\n const props2: TypeDefinitionElementProps = {\r\n classFullName: GenericGraphicalType2d.classFullName,\r\n model: IModel.dictionaryId,\r\n code,\r\n };\r\n const retryTxn = new EditTxn(db, \"cache cleared on abandonChanges retry\");\r\n retryTxn.start();\r\n const id2 = retryTxn.insertElement(props2);\r\n expect(id2).to.equal(id);\r\n const element2 = db.elements.getElementProps(id2);\r\n expect(element2).to.not.equal(element1);\r\n\r\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\r\n\r\n // Make sure that the statement caches are not cleared\r\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\r\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\r\n\r\n retryTxn.end(\"abandon\");\r\n db.close();\r\n });\r\n it(\"Only instance caches should be cleared with clearCaches instanceCachesOnly parameter\", () => {\r\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\r\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\r\n const txn = new EditTxn(db, \"clearCaches instanceCachesOnly\");\r\n txn.start();\r\n\r\n const code = Code.createEmpty();\r\n code.value = \"foo\";\r\n const props: TypeDefinitionElementProps = {\r\n classFullName: GenericGraphicalType2d.classFullName,\r\n model: IModel.dictionaryId,\r\n code,\r\n };\r\n const id = txn.insertElement(props);\r\n db.elements.getElementProps(id);\r\n db.models.getModelProps(IModel.dictionaryId);\r\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\r\n\r\n expect(db.elements[_cache].size).to.be.greaterThan(0);\r\n expect(db.models[_cache].size).to.be.greaterThan(0);\r\n expect(db.elements[_instanceKeyCache].size).to.be.greaterThan(0);\r\n expect(db.models[_instanceKeyCache].size).to.be.greaterThan(0);\r\n\r\n db.clearCaches({ instanceCachesOnly: true });\r\n\r\n expect(db.elements[_cache].size).to.equal(0);\r\n expect(db.models[_cache].size).to.equal(0);\r\n expect(db.elements[_instanceKeyCache].size).to.equal(0);\r\n expect(db.models[_instanceKeyCache].size).to.equal(0);\r\n\r\n // Make sure that the statement caches are not cleared\r\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\r\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\r\n\r\n txn.end(\"abandon\");\r\n db.close();\r\n });\r\n it(\"inserting a second element with an empty code must not evict the first from the element props cache\", () => {\r\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"EmptyCodeCacheCollision.bim\");\r\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"EmptyCodeCacheCollision\" } });\r\n\r\n withEditTxn(db, (txn) => {\r\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\r\n const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\r\n\r\n const emptyCodeProps: GeometricElementProps = {\r\n classFullName: PhysicalObject.classFullName,\r\n model: modelId,\r\n category: categoryId,\r\n code: Code.createEmpty(),\r\n };\r\n\r\n // Insert the first element\r\n const id1 = txn.insertElement({ ...emptyCodeProps });\r\n db.elements.getElementProps(id1); // populate the element props cache\r\n const cacheSizeAfterFirstInsertAndRead = db.elements[_cache].size;\r\n expect(cacheSizeAfterFirstInsertAndRead).to.be.greaterThan(0, \"cache should be populated after getElementProps\");\r\n\r\n // Insert a second element with the same empty code\r\n const id2 = txn.insertElement({ ...emptyCodeProps });\r\n\r\n // The first element must still be in the cache.\r\n const cached1 = db.elements[_cache].get({ id: id1 });\r\n expect(cached1, \"first element should still be in cache after inserting second element with the same empty code\").to.not.be.undefined;\r\n expect(cached1!.elProps.id).to.equal(id1);\r\n\r\n expect(Id64.isValidId64(id1)).to.be.true;\r\n expect(Id64.isValidId64(id2)).to.be.true;\r\n expect(id1).to.not.equal(id2);\r\n });\r\n\r\n db.close();\r\n });\r\n it(\"Standalone iModel properties\", () => {\r\n const standaloneRootSubjectName = \"Standalone\";\r\n const standaloneFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Standalone1.bim\");\r\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });\r\n const geographicCoordinateSystem = {\r\n horizontalCRS: { id: \"10TM115-27\" },\r\n };\r\n let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });\r\n assert.isTrue(standaloneDb1.isStandaloneDb());\r\n assert.isTrue(standaloneDb1.isStandalone);\r\n assert.isFalse(standaloneDb1.isReadonly, \"Expect standalone iModels to be read-write during create\");\r\n assert.equal(standaloneDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\r\n assert.equal(standaloneDb1.pathName, standaloneFile1);\r\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key), \"Should be in the list of open StandaloneDbs\");\r\n assert.equal(standaloneDb1.elements.getRootSubject().code.value, standaloneRootSubjectName);\r\n assert.isTrue(standaloneDb1.isOpen);\r\n assert.isTrue(Guid.isV4Guid(standaloneDb1.iModelId));\r\n assert.equal(standaloneDb1.iTwinId, Guid.empty);\r\n assert.strictEqual(\"\", standaloneDb1.changeset.id);\r\n assert.strictEqual(0, standaloneDb1.changeset.index);\r\n assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, \"standalone ecefLocation should be set\");\r\n assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"standalone coordinate system should be set\");\r\n assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);\r\n standaloneDb1.close();\r\n assert.isFalse(standaloneDb1.isOpen);\r\n standaloneDb1.close(); // calling `close()` a second time is a no-op\r\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\r\n standaloneDb1 = StandaloneDb.openFile(standaloneFile1);\r\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key));\r\n assert.isFalse(standaloneDb1.isReadonly, \"By default, StandaloneDbs are opened read/write\");\r\n standaloneDb1.close();\r\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\r\n });\r\n it(\"Snapshot iModel properties\", async () => {\r\n const snapshotRootSubjectName = \"Snapshot\";\r\n const snapshotFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot1.bim\");\r\n const snapshotFile2 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot2.bim\");\r\n const snapshotFile3 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot3.bim\");\r\n const imodel = await importTestBim(createIModelFromSeed(\"test_for_snapshot.bim\", \"test.bim\"));\r\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });\r\n const geographicCoordinateSystem = {\r\n horizontalCRS: { id: \"10TM115-27\" },\r\n };\r\n let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });\r\n let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);\r\n let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });\r\n assert.isTrue(snapshotDb1.isSnapshotDb());\r\n assert.isTrue(snapshotDb2.isSnapshotDb());\r\n assert.isTrue(snapshotDb3.isSnapshotDb());\r\n assert.isTrue(snapshotDb1.isSnapshot);\r\n assert.isTrue(snapshotDb2.isSnapshot);\r\n assert.isTrue(snapshotDb3.isSnapshot);\r\n assert.isFalse(snapshotDb1.isReadonly, \"Expect snapshots to be read-write during create\");\r\n assert.isFalse(snapshotDb2.isReadonly, \"Expect snapshots to be read-write during create\");\r\n assert.isFalse(snapshotDb3.isReadonly, \"Expect snapshots to be read-write during create\");\r\n assert.equal(snapshotDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\r\n assert.equal(snapshotDb2.getBriefcaseId(), BriefcaseIdValue.Unassigned);\r\n assert.equal(snapshotDb3.getBriefcaseId(), BriefcaseIdValue.Unassigned);\r\n assert.equal(imodel.getBriefcaseId(), BriefcaseIdValue.Unassigned);\r\n assert.equal(snapshotDb1.pathName, snapshotFile1);\r\n assert.equal(snapshotDb2.pathName, snapshotFile2);\r\n assert.equal(snapshotDb3.pathName, snapshotFile3);\r\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\r\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\r\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\r\n const iModelGuid1: GuidString = snapshotDb1.iModelId;\r\n const iModelGuid2: GuidString = snapshotDb2.iModelId;\r\n const iModelGuid3: GuidString = snapshotDb3.iModelId;\r\n assert.notEqual(iModelGuid1, iModelGuid2, \"Expect different iModel GUIDs for each snapshot\");\r\n assert.notEqual(iModelGuid2, iModelGuid3, \"Expect different iModel GUIDs for each snapshot\");\r\n const rootSubjectName1 = snapshotDb1.elements.getRootSubject().code.value;\r\n const rootSubjectName2 = snapshotDb2.elements.getRootSubject().code.value;\r\n const rootSubjectName3 = snapshotDb3.elements.getRootSubject().code.value;\r\n const imodelRootSubjectName = imodel.elements.getRootSubject().code.value;\r\n assert.equal(rootSubjectName1, snapshotRootSubjectName);\r\n assert.equal(rootSubjectName1, rootSubjectName2, \"Expect a snapshot to maintain the root Subject name from its seed\");\r\n assert.equal(rootSubjectName3, imodelRootSubjectName, \"Expect a snapshot to maintain the root Subject name from its seed\");\r\n assert.isTrue(snapshotDb1.isOpen);\r\n assert.isTrue(snapshotDb2.isOpen);\r\n assert.isTrue(snapshotDb3.isOpen);\r\n assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, \"snapshot ecefLocation should be set\");\r\n assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"snapshot coordinate system should be set\");\r\n snapshotDb1.close();\r\n snapshotDb2.close();\r\n snapshotDb3.close();\r\n assert.isFalse(snapshotDb1.isOpen);\r\n assert.isFalse(snapshotDb2.isOpen);\r\n assert.isFalse(snapshotDb3.isOpen);\r\n snapshotDb1.close(); // calling `close()` a second time is a no-op\r\n snapshotDb2.close(); // calling `close()` a second time is a no-op\r\n snapshotDb3.close(); // calling `close()` a second time is a no-op\r\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\r\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\r\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\r\n snapshotDb1 = SnapshotDb.openFile(snapshotFile1);\r\n snapshotDb2 = SnapshotDb.openFile(snapshotFile2);\r\n snapshotDb3 = SnapshotDb.openFile(snapshotFile3);\r\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\r\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\r\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\r\n assert.equal(snapshotDb3, SnapshotDb.findByKey(snapshotDb3.key));\r\n assert.equal(snapshotDb3, IModelDb.findByKey(snapshotDb3.key));\r\n assert.throws(() => BriefcaseDb.findByKey(snapshotDb1.key)); // lookup of key for SnapshotDb via BriefcaseDb should throw\r\n assert.throws(() => StandaloneDb.findByKey(snapshotDb1.key)); // likewise for StandaloneDb\r\n assert.isTrue(snapshotDb1.isReadonly, \"Expect snapshots to be read-only after open\");\r\n assert.isTrue(snapshotDb2.isReadonly, \"Expect snapshots to be read-only after open\");\r\n assert.isTrue(snapshotDb3.isReadonly, \"Expect snapshots to be read-only after open\");\r\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Element\"));\r\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementAspect\"));\r\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Model\"));\r\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementRefersToElements\"));\r\n assert.isFalse(hasClassView(snapshotDb2, \"bis.Element\"));\r\n assert.isTrue(hasClassView(snapshotDb3, \"bis.Element\"));\r\n\r\n imodel.close();\r\n snapshotDb1.close();\r\n snapshotDb2.close();\r\n snapshotDb3.close();\r\n\r\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\r\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\r\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\r\n });\r\n it(\"upgrade the domain schema in a StandaloneDb\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"UpgradeIModel\", \"testImodel.bim\");\r\n const seedFileName = IModelTestUtils.resolveAssetFile(\"testImodel.bim\");\r\n IModelJsFs.copySync(seedFileName, testFileName);\r\n\r\n let iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\r\n const beforeVersion = iModel.querySchemaVersion(\"BisCore\");\r\n assert.isTrue(semver.satisfies(beforeVersion!, \"= 1.0.0\"));\r\n iModel.close();\r\n\r\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\r\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\r\n\r\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\r\n\r\n iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\r\n const afterVersion = iModel.querySchemaVersion(\"BisCore\");\r\n assert.isTrue(semver.satisfies(afterVersion!, \">= 1.0.10\"));\r\n iModel.close();\r\n });\r\n it(\"throws NotFound when attempting to access element props after closing the iModel\", () => {\r\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"accessAfterClose.bim\");\r\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"accessAfterClose\" } });\r\n\r\n const elem = imodel.elements.getElement<Subject>(IModel.rootSubjectId);\r\n expect(elem.id).to.equal(IModel.rootSubjectId);\r\n\r\n imodel.close();\r\n\r\n expect(() => imodel.elements.getElement<Subject>(IModel.rootSubjectId)).to.throw(IModelError, \"Element=0x1\", \"Not Found\");\r\n });\r\n it(\"should provide meaningful error when querying a closed iModel\", () => {\r\n const testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"QueryingClosedImodel.bim\"), { rootSubject: { name: \"QueryClosedTest\" } });\r\n assert.isTrue(testImodel.isOpen);\r\n\r\n // Close the iModel for the tests\r\n testImodel.close();\r\n assert.isFalse(testImodel.isOpen);\r\n\r\n const closedDbError = \"db not open\";\r\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\r\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\r\n expect(() => testImodel.prepareSqliteStatement(\"SELECT 1\")).to.throw(closedDbError);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(() => testImodel.prepareStatement(\"SELECT 1\")).to.throw(closedDbError);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n expect(() => testImodel.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { })).to.throw(closedDbError);\r\n expect(() => testImodel.elements.queryChildren(IModel.rootSubjectId)).to.throw(closedDbError);\r\n expect(() => testImodel.elements.getAspects(\"0x1\", \"WrongSchema:WrongClass\")).to.throw(closedDbError);\r\n expect(() => testImodel.createQueryReader(\"SELECT 1\")).to.throw(closedDbError);\r\n });\r\n});\r\n\r\ndescribe(\"IModelDb.requireMinimumSchemaVersion\", () => {\r\n let imodel: SnapshotDb;\r\n\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n imodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"MinSchemaVer.bim\"), { rootSubject: { name: \"MinSchemaVer\" } });\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"throws if the schema does not exist\", () => {\r\n expect(\r\n () => imodel.requireMinimumSchemaVersion(\"FakeSchema\", new ECVersion(1, 0, 0), \"Scrobbles\")\r\n ).to.throw(\"Scrobbles requires FakeSchema v01.00.00 or newer\");\r\n });\r\n\r\n it(\"throws IFF the schema version is older than the minimum\", () => {\r\n function test(minVer: ECVersion, expectError: boolean): void {\r\n expect(imodel.meetsMinimumSchemaVersion(\"BisCore\", minVer)).to.equal(!expectError);\r\n const require = () => imodel.requireMinimumSchemaVersion(\"BisCore\", minVer, \"Scrobbles\");\r\n if (expectError) {\r\n expect(require).to.throw(`Scrobbles requires BisCore v${minVer.toString()} or newer`);\r\n } else {\r\n require();\r\n }\r\n }\r\n\r\n const bisVer = imodel.querySchemaVersionNumbers(\"BisCore\")!;\r\n expect(bisVer.read).to.equal(1);\r\n expect(bisVer.write).to.equal(0);\r\n expect(bisVer.minor).to.least(24);\r\n\r\n test(bisVer, false);\r\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor - 1), false);\r\n test(new ECVersion(0, 0, 1), false);\r\n\r\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\r\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\r\n test(new ECVersion(bisVer.read + 1, bisVer.write + 1, bisVer.minor), true);\r\n });\r\n});"]}
|
|
1
|
+
{"version":3,"file":"IModelLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelLifecycle.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert, expect } from \"chai\";\nimport * as semver from \"semver\";\nimport * as sinon from \"sinon\";\nimport { DbResult, Guid, GuidString, Id64, IModelStatus, Logger, OpenMode } from \"@itwin/core-bentley\";\nimport { BriefcaseIdValue, ChangesetIdWithIndex, Code, EcefLocation, FilePropertyProps, GeometricElementProps, IModel, IModelError, SchemaState, SubCategoryAppearance, TypeDefinitionElementProps } from \"@itwin/core-common\";\nimport { ECVersion } from \"@itwin/ecschema-metadata\";\nimport { V2CheckpointAccessProps } from \"../../BackendHubAccess\";\nimport { V2CheckpointManager } from \"../../CheckpointManager\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport { GenericGraphicalType2d, IModelDb, IModelHost, IModelJsFs, PhysicalModel, PhysicalObject, SnapshotDb, SpatialCategory, StandaloneDb, Subject } from \"../../core-backend\";\nimport { BriefcaseDb, SnapshotDbOpenArgs } from \"../../IModelDb\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { _cache, _hubAccess, _instanceKeyCache, _nativeDb } from \"../../internal/Symbols\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\nimport { performance } from \"perf_hooks\";\nimport { createIModelFromSeed, expectIModelError, getIModelError, importTestBim } from \"./IModelTestFixtures\";\n\n\ndescribe(\"iModel lifecycle\", () => {\n let originalEnv: NodeJS.ProcessEnv;\n\n before(async () => {\n originalEnv = { ...process.env };\n await TestUtils.startBackend();\n IModelTestUtils.registerTestBimSchema();\n });\n\n after(() => {\n process.env = originalEnv;\n });\n\n afterEach(() => {\n sinon.restore();\n });\n\n function hasClassView(db: IModelDb, name: string): boolean {\n try {\n return db.withSqliteStatement(`SELECT ECInstanceId FROM [${name}]`, (): boolean => true, false);\n } catch {\n return false;\n }\n }\n\n it(\"should be able to create a snapshot IModel\", async () => {\n const args = {\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\n client: \"ABC Engineering\",\n globalOrigin: { x: 10, y: 10 },\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\n guid: Guid.createValue(),\n };\n\n const iModel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot.bim\"), args);\n assert.equal(iModel.iModelId, args.guid);\n assert.equal(iModel.rootSubject.name, args.rootSubject.name);\n assert.equal(iModel.rootSubject.description, args.rootSubject.description);\n assert.equal(iModel.projectExtents.low.x, args.projectExtents.low.x);\n assert.equal(iModel.projectExtents.low.y, args.projectExtents.low.y);\n assert.equal(iModel.projectExtents.low.z, args.projectExtents.low.z);\n assert.equal(iModel.globalOrigin.x, args.globalOrigin.x);\n assert.equal(iModel.globalOrigin.y, args.globalOrigin.y);\n assert.equal(iModel.globalOrigin.z, 0);\n\n const client = iModel.queryFilePropertyString({ name: \"Client\", namespace: \"dgn_Db\" });\n assert.equal(client, args.client, \"query Client property\");\n\n const dbguid = iModel.queryFilePropertyBlob({ name: \"DbGuid\", namespace: \"be_Db\" });\n assert.equal(dbguid!.byteLength, 16, \"query guid property\");\n\n const myPropsStr: FilePropertyProps = { name: \"MyProp\", namespace: \"test1\", id: 1, subId: 1 };\n const myStrVal = \"this is a test\";\n const myPropsBlob: FilePropertyProps = { name: \"MyBlob\", namespace: \"test1\", id: 10 };\n const testRange = new Uint8Array(500);\n testRange.fill(11);\n withEditTxn(iModel, (txn) => {\n txn.saveFileProperty(myPropsStr, myStrVal);\n const readFromDb = iModel.queryFilePropertyString(myPropsStr);\n assert.equal(readFromDb, myStrVal, \"query string after save\");\n\n txn.saveFileProperty(myPropsBlob, undefined, testRange);\n const blobFromDb = iModel.queryFilePropertyBlob(myPropsBlob);\n assert.deepEqual(blobFromDb, testRange, \"query blob after save\");\n\n let next = iModel.queryNextAvailableFileProperty(myPropsBlob);\n assert.equal(11, next, \"queryNextAvailableFileProperty blob\");\n\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\n assert.equal(2, next, \"queryNextAvailableFileProperty str\");\n txn.deleteFileProperty(myPropsStr);\n assert.isUndefined(iModel.queryFilePropertyString(myPropsStr), \"property was deleted\");\n next = iModel.queryNextAvailableFileProperty(myPropsStr);\n assert.equal(0, next, \"queryNextAvailableFileProperty, should return 0 when none present\");\n });\n\n const testLocal = \"TestLocal\";\n const testValue = \"this is a test\";\n const nativeDb = iModel[_nativeDb];\n assert.isUndefined(nativeDb.queryLocalValue(testLocal));\n nativeDb.saveLocalValue(testLocal, testValue);\n assert.equal(nativeDb.queryLocalValue(testLocal), testValue);\n\n iModel.close();\n });\n it(\"should be able to open checkpoints for RPC\", async () => {\n const changeset: ChangesetIdWithIndex = { id: \"fakeChangeSetId\", index: 10 };\n const iTwinId = \"fakeIModelId\";\n const iModelId = \"fakeIModelId\";\n const cloudContainer = { accessToken: \"sas\" };\n const fakeSnapshotDb: any =\n {\n cloudContainer,\n isReadonly: () => true,\n isOpen: () => true,\n getIModelId: () => iModelId,\n getITwinId: () => iTwinId,\n getCurrentChangeset: () => changeset,\n hasUnsavedChanges: () => false,\n setIModelDb: () => { },\n closeFile: () => { },\n clearECDbCache: () => { },\n };\n\n const errorLogStub = sinon.stub(Logger, \"logError\").callsFake(() => { });\n const infoLogStub = sinon.stub(Logger, \"logInfo\").callsFake(() => { });\n\n // Mock iModelHub\n const mockCheckpointV2: V2CheckpointAccessProps = {\n accountName: \"testAccount\",\n containerId: \"imodelblocks-123\",\n sasToken: \"testSAS\",\n dbName: \"testDb\",\n storageType: \"azure?sas=1\",\n };\n\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(V2CheckpointManager, \"attach\").callsFake(async () => {\n return { dbName: \"fakeDb\", container: { accessToken: \"sas\" } as any };\n });\n const queryStub = sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => mockCheckpointV2);\n\n const openDgnDbStub = sinon.stub(SnapshotDb, \"openDgnDb\").returns(fakeSnapshotDb);\n sinon.stub(IModelDb.prototype, \"initializeIModelDb\" as any);\n sinon.stub(IModelDb.prototype, \"loadIModelSettings\" as any);\n\n const accessToken = \"token\";\n const checkpoint = await SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId, iModelId, changeset });\n expect(openDgnDbStub.calledOnce).to.be.true;\n expect(openDgnDbStub.firstCall.firstArg.path).to.equal(\"fakeDb\");\n\n const props = checkpoint.getRpcProps();\n assert.equal(props.iModelId, iModelId);\n assert.equal(props.iTwinId, iTwinId);\n assert.equal(props.changeset?.id, changeset.id);\n assert.equal(errorLogStub.callCount, 1);\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\n\n errorLogStub.resetHistory();\n expect(cloudContainer.accessToken).equal(\"sas\");\n await checkpoint.refreshContainerForRpc(accessToken);\n expect(cloudContainer.accessToken).equal(\"testSAS\");\n\n assert.equal(errorLogStub.callCount, 1);\n assert.include(errorLogStub.args[0][1], \"attached with timestamp that expires before\");\n assert.equal(infoLogStub.callCount, 2);\n assert.include(infoLogStub.args[0][1], \"attempting to refresh\");\n assert.include(infoLogStub.args[1][1], \"refreshed checkpoint\");\n\n errorLogStub.resetHistory();\n queryStub.callsFake(async () => {\n throw new Error(\"no checkpoint\");\n });\n await expect(checkpoint.refreshContainerForRpc(accessToken)).to.eventually.be.rejectedWith(\"no checkpoint\");\n\n checkpoint.close();\n });\n it(\"should throw for missing/invalid checkpoint in hub\", async () => {\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => undefined);\n\n const accessToken = \"token\";\n const error = await getIModelError(SnapshotDb.openCheckpointFromRpc({ accessToken, iTwinId: Guid.createValue(), iModelId: Guid.createValue(), changeset: IModelTestUtils.generateChangeSetId() }));\n expectIModelError(IModelStatus.NotFound, error);\n });\n it(\"attempting to re-attach a non-checkpoint snapshot should be a no-op\", async () => {\n process.env.CHECKPOINT_CACHE_DIR = \"/foo/\";\n const accessToken = \"token\";\n const imodel = await importTestBim(createIModelFromSeed(\"reattachNonCheckpoint.bim\", \"test.bim\"));\n try {\n await imodel.refreshContainerForRpc(accessToken);\n } finally {\n imodel.close();\n }\n });\n it(\"Check busyTimeout option\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const tryOpen = (fileName: string, options?: SnapshotDbOpenArgs) => {\n const start = performance.now();\n let didThrow = false;\n try {\n StandaloneDb.openFile(fileName, OpenMode.ReadWrite, options);\n } catch (e: any) {\n assert.strictEqual(e.errorNumber, DbResult.BE_SQLITE_BUSY, \"Expect error 'Db is busy'\");\n didThrow = true;\n }\n assert.isTrue(didThrow);\n return performance.now() - start;\n };\n const seconds = (s: number) => s * 1000;\n\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"busy timeout test\");\n txn.start();\n // lock db so another connection cannot write to it.\n txn.saveFileProperty({ name: \"test\", namespace: \"test\" }, \"\");\n\n assert.isAtMost(tryOpen(standaloneFile, { busyTimeout: seconds(0) }), seconds(1), \"open should fail with busy error instantly\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(1) }), seconds(1), \"open should fail with atleast 1 sec delay due to retry\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(2) }), seconds(2), \"open should fail with atleast 2 sec delay due to retry\");\n assert.isAtLeast(tryOpen(standaloneFile, { busyTimeout: seconds(3) }), seconds(3), \"open should fail with atleast 3 sec delay due to retry\");\n\n txn.end(\"abandon\");\n db.close();\n });\n it(\"Cache cleared on abandonChanges\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"cache cleared on abandonChanges\");\n txn.start();\n\n const code = Code.createEmpty();\n code.value = \"foo\";\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const id = txn.insertElement(props);\n const element1 = db.elements.getElementProps(id);\n txn.end(\"abandon\");\n\n code.value = \"bar\";\n const props2: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const retryTxn = new EditTxn(db, \"cache cleared on abandonChanges retry\");\n retryTxn.start();\n const id2 = retryTxn.insertElement(props2);\n expect(id2).to.equal(id);\n const element2 = db.elements.getElementProps(id2);\n expect(element2).to.not.equal(element1);\n\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\n\n // Make sure that the statement caches are not cleared\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\n\n retryTxn.end(\"abandon\");\n db.close();\n });\n it(\"Only instance caches should be cleared with clearCaches instanceCachesOnly parameter\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"StandaloneReadWrite.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"Standalone\" } });\n const txn = new EditTxn(db, \"clearCaches instanceCachesOnly\");\n txn.start();\n\n const code = Code.createEmpty();\n code.value = \"foo\";\n const props: TypeDefinitionElementProps = {\n classFullName: GenericGraphicalType2d.classFullName,\n model: IModel.dictionaryId,\n code,\n };\n const id = txn.insertElement(props);\n db.elements.getElementProps(id);\n db.models.getModelProps(IModel.dictionaryId);\n // Exercise the ECSqlStatement cache directly - nothing in the normal insert/read path above uses it anymore.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n db.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { });\n\n expect(db.elements[_cache].size).to.be.greaterThan(0);\n expect(db.models[_cache].size).to.be.greaterThan(0);\n expect(db.elements[_instanceKeyCache].size).to.be.greaterThan(0);\n expect(db.models[_instanceKeyCache].size).to.be.greaterThan(0);\n\n db.clearCaches({ instanceCachesOnly: true });\n\n expect(db.elements[_cache].size).to.equal(0);\n expect(db.models[_cache].size).to.equal(0);\n expect(db.elements[_instanceKeyCache].size).to.equal(0);\n expect(db.models[_instanceKeyCache].size).to.equal(0);\n\n // Make sure that the statement caches are not cleared\n expect((db as any)._sqliteStatementCache.size).to.be.greaterThan(0);\n expect((db as any)._statementCache.size).to.be.greaterThan(0);\n\n txn.end(\"abandon\");\n db.close();\n });\n it(\"inserting a second element with an empty code must not evict the first from the element props cache\", () => {\n const standaloneFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"EmptyCodeCacheCollision.bim\");\n const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: \"EmptyCodeCacheCollision\" } });\n\n withEditTxn(db, (txn) => {\n const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, \"TestCategory\", new SubCategoryAppearance());\n const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, \"TestModel\");\n\n const emptyCodeProps: GeometricElementProps = {\n classFullName: PhysicalObject.classFullName,\n model: modelId,\n category: categoryId,\n code: Code.createEmpty(),\n };\n\n // Insert the first element\n const id1 = txn.insertElement({ ...emptyCodeProps });\n db.elements.getElementProps(id1); // populate the element props cache\n const cacheSizeAfterFirstInsertAndRead = db.elements[_cache].size;\n expect(cacheSizeAfterFirstInsertAndRead).to.be.greaterThan(0, \"cache should be populated after getElementProps\");\n\n // Insert a second element with the same empty code\n const id2 = txn.insertElement({ ...emptyCodeProps });\n\n // The first element must still be in the cache.\n const cached1 = db.elements[_cache].get({ id: id1 });\n expect(cached1, \"first element should still be in cache after inserting second element with the same empty code\").to.not.be.undefined;\n expect(cached1!.elProps.id).to.equal(id1);\n\n expect(Id64.isValidId64(id1)).to.be.true;\n expect(Id64.isValidId64(id2)).to.be.true;\n expect(id1).to.not.equal(id2);\n });\n\n db.close();\n });\n it(\"Standalone iModel properties\", () => {\n const standaloneRootSubjectName = \"Standalone\";\n const standaloneFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Standalone1.bim\");\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });\n const geographicCoordinateSystem = {\n horizontalCRS: { id: \"10TM115-27\" },\n };\n let standaloneDb1 = StandaloneDb.createEmpty(standaloneFile1, { rootSubject: { name: standaloneRootSubjectName }, ecefLocation, geographicCoordinateSystem });\n assert.isTrue(standaloneDb1.isStandaloneDb());\n assert.isTrue(standaloneDb1.isStandalone);\n assert.isFalse(standaloneDb1.isReadonly, \"Expect standalone iModels to be read-write during create\");\n assert.equal(standaloneDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(standaloneDb1.pathName, standaloneFile1);\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key), \"Should be in the list of open StandaloneDbs\");\n assert.equal(standaloneDb1.elements.getRootSubject().code.value, standaloneRootSubjectName);\n assert.isTrue(standaloneDb1.isOpen);\n assert.isTrue(Guid.isV4Guid(standaloneDb1.iModelId));\n assert.equal(standaloneDb1.iTwinId, Guid.empty);\n assert.strictEqual(\"\", standaloneDb1.changeset.id);\n assert.strictEqual(0, standaloneDb1.changeset.index);\n assert.deepEqual(standaloneDb1.ecefLocation?.origin, ecefLocation.origin, \"standalone ecefLocation should be set\");\n assert.strictEqual(standaloneDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"standalone coordinate system should be set\");\n assert.equal(standaloneDb1.openMode, OpenMode.ReadWrite);\n standaloneDb1.close();\n assert.isFalse(standaloneDb1.isOpen);\n standaloneDb1.close(); // calling `close()` a second time is a no-op\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\n standaloneDb1 = StandaloneDb.openFile(standaloneFile1);\n assert.equal(standaloneDb1, StandaloneDb.tryFindByKey(standaloneDb1.key));\n assert.isFalse(standaloneDb1.isReadonly, \"By default, StandaloneDbs are opened read/write\");\n standaloneDb1.close();\n assert.isUndefined(StandaloneDb.tryFindByKey(standaloneDb1.key));\n });\n it(\"Snapshot iModel properties\", async () => {\n const snapshotRootSubjectName = \"Snapshot\";\n const snapshotFile1 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot1.bim\");\n const snapshotFile2 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot2.bim\");\n const snapshotFile3 = IModelTestUtils.prepareOutputFile(\"IModel\", \"Snapshot3.bim\");\n const imodel = await importTestBim(createIModelFromSeed(\"test_for_snapshot.bim\", \"test.bim\"));\n const ecefLocation = new EcefLocation({ origin: [1, 2, 3], orientation: { yaw: 0, pitch: 0, roll: 0 } });\n const geographicCoordinateSystem = {\n horizontalCRS: { id: \"10TM115-27\" },\n };\n let snapshotDb1 = SnapshotDb.createEmpty(snapshotFile1, { rootSubject: { name: snapshotRootSubjectName }, createClassViews: true, ecefLocation, geographicCoordinateSystem });\n let snapshotDb2 = SnapshotDb.createFrom(snapshotDb1, snapshotFile2);\n let snapshotDb3 = SnapshotDb.createFrom(imodel, snapshotFile3, { createClassViews: true });\n assert.isTrue(snapshotDb1.isSnapshotDb());\n assert.isTrue(snapshotDb2.isSnapshotDb());\n assert.isTrue(snapshotDb3.isSnapshotDb());\n assert.isTrue(snapshotDb1.isSnapshot);\n assert.isTrue(snapshotDb2.isSnapshot);\n assert.isTrue(snapshotDb3.isSnapshot);\n assert.isFalse(snapshotDb1.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.isFalse(snapshotDb2.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.isFalse(snapshotDb3.isReadonly, \"Expect snapshots to be read-write during create\");\n assert.equal(snapshotDb1.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb2.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb3.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(imodel.getBriefcaseId(), BriefcaseIdValue.Unassigned);\n assert.equal(snapshotDb1.pathName, snapshotFile1);\n assert.equal(snapshotDb2.pathName, snapshotFile2);\n assert.equal(snapshotDb3.pathName, snapshotFile3);\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\n const iModelGuid1: GuidString = snapshotDb1.iModelId;\n const iModelGuid2: GuidString = snapshotDb2.iModelId;\n const iModelGuid3: GuidString = snapshotDb3.iModelId;\n assert.notEqual(iModelGuid1, iModelGuid2, \"Expect different iModel GUIDs for each snapshot\");\n assert.notEqual(iModelGuid2, iModelGuid3, \"Expect different iModel GUIDs for each snapshot\");\n const rootSubjectName1 = snapshotDb1.elements.getRootSubject().code.value;\n const rootSubjectName2 = snapshotDb2.elements.getRootSubject().code.value;\n const rootSubjectName3 = snapshotDb3.elements.getRootSubject().code.value;\n const imodelRootSubjectName = imodel.elements.getRootSubject().code.value;\n assert.equal(rootSubjectName1, snapshotRootSubjectName);\n assert.equal(rootSubjectName1, rootSubjectName2, \"Expect a snapshot to maintain the root Subject name from its seed\");\n assert.equal(rootSubjectName3, imodelRootSubjectName, \"Expect a snapshot to maintain the root Subject name from its seed\");\n assert.isTrue(snapshotDb1.isOpen);\n assert.isTrue(snapshotDb2.isOpen);\n assert.isTrue(snapshotDb3.isOpen);\n assert.deepEqual(snapshotDb1.ecefLocation?.origin, ecefLocation.origin, \"snapshot ecefLocation should be set\");\n assert.strictEqual(snapshotDb1.geographicCoordinateSystem?.horizontalCRS?.id, \"10TM115-27\", \"snapshot coordinate system should be set\");\n snapshotDb1.close();\n snapshotDb2.close();\n snapshotDb3.close();\n assert.isFalse(snapshotDb1.isOpen);\n assert.isFalse(snapshotDb2.isOpen);\n assert.isFalse(snapshotDb3.isOpen);\n snapshotDb1.close(); // calling `close()` a second time is a no-op\n snapshotDb2.close(); // calling `close()` a second time is a no-op\n snapshotDb3.close(); // calling `close()` a second time is a no-op\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\n snapshotDb1 = SnapshotDb.openFile(snapshotFile1);\n snapshotDb2 = SnapshotDb.openFile(snapshotFile2);\n snapshotDb3 = SnapshotDb.openFile(snapshotFile3);\n assert.equal(snapshotDb1, SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.equal(snapshotDb2, SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.equal(snapshotDb3, SnapshotDb.tryFindByKey(snapshotDb3.key));\n assert.equal(snapshotDb3, SnapshotDb.findByKey(snapshotDb3.key));\n assert.equal(snapshotDb3, IModelDb.findByKey(snapshotDb3.key));\n assert.throws(() => BriefcaseDb.findByKey(snapshotDb1.key)); // lookup of key for SnapshotDb via BriefcaseDb should throw\n assert.throws(() => StandaloneDb.findByKey(snapshotDb1.key)); // likewise for StandaloneDb\n assert.isTrue(snapshotDb1.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(snapshotDb2.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(snapshotDb3.isReadonly, \"Expect snapshots to be read-only after open\");\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Element\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementAspect\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.Model\"));\n assert.isTrue(hasClassView(snapshotDb1, \"bis.ElementRefersToElements\"));\n assert.isFalse(hasClassView(snapshotDb2, \"bis.Element\"));\n assert.isTrue(hasClassView(snapshotDb3, \"bis.Element\"));\n\n imodel.close();\n snapshotDb1.close();\n snapshotDb2.close();\n snapshotDb3.close();\n\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb1.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb2.key));\n assert.isUndefined(SnapshotDb.tryFindByKey(snapshotDb3.key));\n });\n it(\"upgrade the domain schema in a StandaloneDb\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"UpgradeIModel\", \"testImodel.bim\");\n const seedFileName = IModelTestUtils.resolveAssetFile(\"testImodel.bim\");\n IModelJsFs.copySync(seedFileName, testFileName);\n\n let iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n const beforeVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(beforeVersion!, \"= 1.0.0\"));\n iModel.close();\n\n const schemaState: SchemaState = StandaloneDb.validateSchemas(testFileName, true);\n assert.strictEqual(schemaState, SchemaState.UpgradeRecommended);\n\n StandaloneDb.upgradeStandaloneSchemas(testFileName);\n\n iModel = StandaloneDb.openFile(testFileName, OpenMode.ReadWrite);\n const afterVersion = iModel.querySchemaVersion(\"BisCore\");\n assert.isTrue(semver.satisfies(afterVersion!, \">= 1.0.10\"));\n iModel.close();\n });\n it(\"throws NotFound when attempting to access element props after closing the iModel\", () => {\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"accessAfterClose.bim\");\n const imodel = SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"accessAfterClose\" } });\n\n const elem = imodel.elements.getElement<Subject>(IModel.rootSubjectId);\n expect(elem.id).to.equal(IModel.rootSubjectId);\n\n imodel.close();\n\n expect(() => imodel.elements.getElement<Subject>(IModel.rootSubjectId)).to.throw(IModelError, \"Element=0x1\", \"Not Found\");\n });\n it(\"should provide meaningful error when querying a closed iModel\", () => {\n const testImodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"QueryingClosedImodel.bim\"), { rootSubject: { name: \"QueryClosedTest\" } });\n assert.isTrue(testImodel.isOpen);\n\n // Close the iModel for the tests\n testImodel.close();\n assert.isFalse(testImodel.isOpen);\n\n const closedDbError = \"db not open\";\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.withPreparedSqliteStatement(\"SELECT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.prepareSqliteStatement(\"SELECT 1\")).to.throw(closedDbError);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testImodel.prepareStatement(\"SELECT 1\")).to.throw(closedDbError);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n expect(() => testImodel.withPreparedStatement(\"SELECT ECInstanceId FROM BisCore:Element LIMIT 1\", () => { })).to.throw(closedDbError);\n expect(() => testImodel.elements.queryChildren(IModel.rootSubjectId)).to.throw(closedDbError);\n expect(() => testImodel.elements.getAspects(\"0x1\", \"WrongSchema:WrongClass\")).to.throw(closedDbError);\n expect(() => testImodel.createQueryReader(\"SELECT 1\")).to.throw(closedDbError);\n });\n});\n\ndescribe(\"IModelDb.requireMinimumSchemaVersion\", () => {\n let imodel: SnapshotDb;\n\n before(async () => {\n await TestUtils.startBackend();\n imodel = SnapshotDb.createEmpty(IModelTestUtils.prepareOutputFile(\"IModel\", \"MinSchemaVer.bim\"), { rootSubject: { name: \"MinSchemaVer\" } });\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"throws if the schema does not exist\", () => {\n expect(\n () => imodel.requireMinimumSchemaVersion(\"FakeSchema\", new ECVersion(1, 0, 0), \"Scrobbles\")\n ).to.throw(\"Scrobbles requires FakeSchema v01.00.00 or newer\");\n });\n\n it(\"throws IFF the schema version is older than the minimum\", () => {\n function test(minVer: ECVersion, expectError: boolean): void {\n expect(imodel.meetsMinimumSchemaVersion(\"BisCore\", minVer)).to.equal(!expectError);\n const require = () => imodel.requireMinimumSchemaVersion(\"BisCore\", minVer, \"Scrobbles\");\n if (expectError) {\n expect(require).to.throw(`Scrobbles requires BisCore v${minVer.toString()} or newer`);\n } else {\n require();\n }\n }\n\n const bisVer = imodel.querySchemaVersionNumbers(\"BisCore\")!;\n expect(bisVer.read).to.equal(1);\n expect(bisVer.write).to.equal(0);\n expect(bisVer.minor).to.least(24);\n\n test(bisVer, false);\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor - 1), false);\n test(new ECVersion(0, 0, 1), false);\n\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\n test(new ECVersion(bisVer.read, bisVer.write, bisVer.minor + 1), true);\n test(new ECVersion(bisVer.read + 1, bisVer.write + 1, bisVer.minor), true);\n });\n});"]}
|