@itwin/core-backend 5.13.0-dev.11 → 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.d.ts +2 -0
- package/lib/esm/test/imodel/IModelECSql.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelECSql.test.js +367 -0
- package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.js +969 -0
- package/lib/esm/test/imodel/IModelElements.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js +539 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js +498 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js +274 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.js +357 -0
- package/lib/esm/test/imodel/IModelModels.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js +407 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts +53 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js +107 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.js +199 -0
- package/lib/esm/test/imodel/IModelViews.test.js.map +1 -0
- 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 +14 -14
- package/lib/esm/test/imodel/IModel.test.d.ts +0 -2
- package/lib/esm/test/imodel/IModel.test.d.ts.map +0 -1
- package/lib/esm/test/imodel/IModel.test.js +0 -3338
- package/lib/esm/test/imodel/IModel.test.js.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { assert, expect } from "chai";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
import { IModelError } from "@itwin/core-common";
|
|
8
|
+
import { SnapshotDb } from "../../core-backend";
|
|
9
|
+
import { KnownTestLocations } from "../KnownTestLocations";
|
|
10
|
+
import { IModelTestUtils } from "../IModelTestUtils";
|
|
11
|
+
/**
|
|
12
|
+
* Awaits `promise` and returns the {@link IModelError} it rejected with, or `undefined` if it resolved.
|
|
13
|
+
*
|
|
14
|
+
* A rejection that is not an {@link IModelError} is rethrown rather than swallowed, so an unexpected
|
|
15
|
+
* failure surfaces with its original message and stack trace instead of being misreported as
|
|
16
|
+
* "no error was thrown". This means `undefined` unambiguously means the promise resolved.
|
|
17
|
+
*/
|
|
18
|
+
export async function getIModelError(promise) {
|
|
19
|
+
try {
|
|
20
|
+
await promise;
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
if (err instanceof IModelError)
|
|
25
|
+
return err;
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Asserts that `error` is an {@link IModelError} carrying the expected error number. */
|
|
30
|
+
export function expectIModelError(expectedErrorNumber, error) {
|
|
31
|
+
if (error === undefined)
|
|
32
|
+
expect.fail(`Expected an IModelError with errorNumber ${expectedErrorNumber}, but the call resolved without throwing.`);
|
|
33
|
+
expect(error.errorNumber).to.equal(expectedErrorNumber);
|
|
34
|
+
}
|
|
35
|
+
/** Roundtrip an entity through a JSON string and back to a new entity, asserting the serialization is stable. */
|
|
36
|
+
export function roundtripThroughJson(entity1) {
|
|
37
|
+
const string1 = JSON.stringify(entity1);
|
|
38
|
+
const props1 = JSON.parse(string1);
|
|
39
|
+
const entity2 = new entity1.constructor(props1, entity1.iModel); // create a new entity from the EntityProps
|
|
40
|
+
const string2 = JSON.stringify(entity2);
|
|
41
|
+
assert.equal(string1, string2);
|
|
42
|
+
return entity2;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a fresh writable snapshot copied from a seed asset. This is the single creation path for
|
|
46
|
+
* mutating tests (hybrid isolation) so state never leaks between tests. Compose with
|
|
47
|
+
* {@link importTestBim} when the test also needs the `TestBim` schema.
|
|
48
|
+
*/
|
|
49
|
+
export function createIModelFromSeed(targetFileName, seedAssetName) {
|
|
50
|
+
const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);
|
|
51
|
+
const snapshotFile = IModelTestUtils.prepareOutputFile("IModel", targetFileName);
|
|
52
|
+
return IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Import the `TestBim` schema into `imodel` and return it, so this can wrap a creation call:
|
|
56
|
+
* `await importTestBim(createIModelFromSeed(target, seed))`.
|
|
57
|
+
*/
|
|
58
|
+
export async function importTestBim(imodel) {
|
|
59
|
+
const schemaPathname = path.join(KnownTestLocations.assetsDir, "TestBim.ecschema.xml");
|
|
60
|
+
await imodel.importSchemas([schemaPathname]);
|
|
61
|
+
return imodel;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a fresh writable copy from a seed asset, close it, and reopen it read-only.
|
|
65
|
+
*
|
|
66
|
+
* This is the canonical way to build a shared, per-file read-only fixture under the hybrid
|
|
67
|
+
* isolation policy: the read-only handle can be shared safely across tests in a file because
|
|
68
|
+
* nothing can mutate it, while each mutating test still gets its own writable copy elsewhere.
|
|
69
|
+
* When `importTestBim` is set, the `TestBim` schema is imported into the writable copy before
|
|
70
|
+
* it is reopened read-only.
|
|
71
|
+
*/
|
|
72
|
+
export async function openReadonlySeedCopy(targetFileName, seedAssetName, opts) {
|
|
73
|
+
const writable = createIModelFromSeed(targetFileName, seedAssetName);
|
|
74
|
+
if (opts?.importTestBim)
|
|
75
|
+
await importTestBim(writable);
|
|
76
|
+
const pathName = writable.pathName;
|
|
77
|
+
writable.close();
|
|
78
|
+
return SnapshotDb.openFile(pathName);
|
|
79
|
+
}
|
|
80
|
+
/** Close each provided database that is still open. Guards against `undefined` and already-closed handles. */
|
|
81
|
+
export function closeIfOpen(...dbs) {
|
|
82
|
+
for (const db of dbs) {
|
|
83
|
+
if (db !== undefined && db.isOpen)
|
|
84
|
+
db.close();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create a tracker for the writable iModels a test file opens, so they are all closed during teardown.
|
|
89
|
+
*
|
|
90
|
+
* This is the mechanism that enforces the hybrid isolation policy for mutating tests: each test wraps
|
|
91
|
+
* its freshly-created writable copy in `trackMutableIModel(...)`, and the file's `afterEach`/`after`
|
|
92
|
+
* calls `closeTrackedIModels()` to close and forget them. `closeTrackedIModels` is idempotent, so it is
|
|
93
|
+
* safe to call from both hooks.
|
|
94
|
+
*/
|
|
95
|
+
export function createMutableIModelTracker() {
|
|
96
|
+
const tracked = [];
|
|
97
|
+
return {
|
|
98
|
+
trackMutableIModel: (imodel) => {
|
|
99
|
+
tracked.push(imodel);
|
|
100
|
+
return imodel;
|
|
101
|
+
},
|
|
102
|
+
closeTrackedIModels: () => {
|
|
103
|
+
closeIfOpen(...tracked.splice(0));
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=IModelTestFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelTestFixtures.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelTestFixtures.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 path from \"node:path\";\nimport { DbResult, IModelStatus } from \"@itwin/core-bentley\";\nimport { EntityProps, IModelError } from \"@itwin/core-common\";\nimport { Entity, IModelDb, SnapshotDb } from \"../../core-backend\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\n/**\n * Awaits `promise` and returns the {@link IModelError} it rejected with, or `undefined` if it resolved.\n *\n * A rejection that is not an {@link IModelError} is rethrown rather than swallowed, so an unexpected\n * failure surfaces with its original message and stack trace instead of being misreported as\n * \"no error was thrown\". This means `undefined` unambiguously means the promise resolved.\n */\nexport async function getIModelError<T>(promise: Promise<T>): Promise<IModelError | undefined> {\n try {\n await promise;\n return undefined;\n } catch (err) {\n if (err instanceof IModelError)\n return err;\n throw err;\n }\n}\n\n/** Asserts that `error` is an {@link IModelError} carrying the expected error number. */\nexport function expectIModelError(expectedErrorNumber: IModelStatus | DbResult, error: IModelError | undefined): void {\n if (error === undefined)\n expect.fail(`Expected an IModelError with errorNumber ${expectedErrorNumber}, but the call resolved without throwing.`);\n expect(error.errorNumber).to.equal(expectedErrorNumber);\n}\n\n/** Roundtrip an entity through a JSON string and back to a new entity, asserting the serialization is stable. */\nexport function roundtripThroughJson(entity1: Entity): Entity {\n const string1 = JSON.stringify(entity1);\n const props1 = JSON.parse(string1) as EntityProps;\n const entity2 = new (entity1.constructor as any)(props1, entity1.iModel); // create a new entity from the EntityProps\n const string2 = JSON.stringify(entity2);\n assert.equal(string1, string2);\n return entity2;\n}\n\n/**\n * Create a fresh writable snapshot copied from a seed asset. This is the single creation path for\n * mutating tests (hybrid isolation) so state never leaks between tests. Compose with\n * {@link importTestBim} when the test also needs the `TestBim` schema.\n */\nexport function createIModelFromSeed(targetFileName: string, seedAssetName: string): SnapshotDb {\n const seedFile = IModelTestUtils.resolveAssetFile(seedAssetName);\n const snapshotFile = IModelTestUtils.prepareOutputFile(\"IModel\", targetFileName);\n return IModelTestUtils.createSnapshotFromSeed(snapshotFile, seedFile);\n}\n\n/**\n * Import the `TestBim` schema into `imodel` and return it, so this can wrap a creation call:\n * `await importTestBim(createIModelFromSeed(target, seed))`.\n */\nexport async function importTestBim<T extends SnapshotDb>(imodel: T): Promise<T> {\n const schemaPathname = path.join(KnownTestLocations.assetsDir, \"TestBim.ecschema.xml\");\n await imodel.importSchemas([schemaPathname]);\n return imodel;\n}\n\n/**\n * Create a fresh writable copy from a seed asset, close it, and reopen it read-only.\n *\n * This is the canonical way to build a shared, per-file read-only fixture under the hybrid\n * isolation policy: the read-only handle can be shared safely across tests in a file because\n * nothing can mutate it, while each mutating test still gets its own writable copy elsewhere.\n * When `importTestBim` is set, the `TestBim` schema is imported into the writable copy before\n * it is reopened read-only.\n */\nexport async function openReadonlySeedCopy(targetFileName: string, seedAssetName: string, opts?: { importTestBim?: boolean }): Promise<SnapshotDb> {\n const writable = createIModelFromSeed(targetFileName, seedAssetName);\n if (opts?.importTestBim)\n await importTestBim(writable);\n const pathName = writable.pathName;\n writable.close();\n return SnapshotDb.openFile(pathName);\n}\n\n/** Close each provided database that is still open. Guards against `undefined` and already-closed handles. */\nexport function closeIfOpen(...dbs: Array<IModelDb | undefined>): void {\n for (const db of dbs) {\n if (db !== undefined && db.isOpen)\n db.close();\n }\n}\n\n/**\n * Create a tracker for the writable iModels a test file opens, so they are all closed during teardown.\n *\n * This is the mechanism that enforces the hybrid isolation policy for mutating tests: each test wraps\n * its freshly-created writable copy in `trackMutableIModel(...)`, and the file's `afterEach`/`after`\n * calls `closeTrackedIModels()` to close and forget them. `closeTrackedIModels` is idempotent, so it is\n * safe to call from both hooks.\n */\nexport function createMutableIModelTracker(): {\n trackMutableIModel: <T extends IModelDb>(imodel: T) => T;\n closeTrackedIModels: () => void;\n} {\n const tracked: IModelDb[] = [];\n return {\n trackMutableIModel: (imodel) => {\n tracked.push(imodel);\n return imodel;\n },\n closeTrackedIModels: () => {\n closeIfOpen(...tracked.splice(0));\n },\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelViews.test.d.ts","sourceRoot":"","sources":["../../../../src/test/imodel/IModelViews.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { assert, expect } from "chai";
|
|
6
|
+
import { BisCodeSpec, ColorDef, DisplayStyleSettings, IModel, RenderMode, ViewFlags, } from "@itwin/core-common";
|
|
7
|
+
import { EditTxn, withEditTxn } from "../../EditTxn";
|
|
8
|
+
import { DisplayStyle3d, IModelDb } from "../../core-backend";
|
|
9
|
+
import { IModelTestUtils } from "../IModelTestUtils";
|
|
10
|
+
import { TestUtils } from "../TestUtils";
|
|
11
|
+
import { closeIfOpen, createIModelFromSeed, createMutableIModelTracker, openReadonlySeedCopy } from "./IModelTestFixtures";
|
|
12
|
+
describe("iModel views", () => {
|
|
13
|
+
let compatibilityReadonly;
|
|
14
|
+
const { trackMutableIModel, closeTrackedIModels } = createMutableIModelTracker();
|
|
15
|
+
before(async () => {
|
|
16
|
+
await TestUtils.startBackend();
|
|
17
|
+
IModelTestUtils.registerTestBimSchema();
|
|
18
|
+
compatibilityReadonly = await openReadonlySeedCopy("views-CompatibilityTestSeed.bim", "CompatibilityTestSeed.bim");
|
|
19
|
+
});
|
|
20
|
+
after(() => {
|
|
21
|
+
closeIfOpen(compatibilityReadonly);
|
|
22
|
+
closeTrackedIModels();
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
closeTrackedIModels();
|
|
26
|
+
});
|
|
27
|
+
it("should insert a DisplayStyle", () => {
|
|
28
|
+
const imodel2 = trackMutableIModel(createIModelFromSeed("views-insert-display-style.bim", "CompatibilityTestSeed.bim"));
|
|
29
|
+
const model = imodel2.models.getModel(IModel.dictionaryId);
|
|
30
|
+
expect(model).not.to.be.undefined;
|
|
31
|
+
const settings = {
|
|
32
|
+
backgroundColor: ColorDef.blue.toJSON(),
|
|
33
|
+
viewflags: ViewFlags.fromJSON({
|
|
34
|
+
renderMode: RenderMode.SolidFill,
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
const props = {
|
|
38
|
+
classFullName: DisplayStyle3d.classFullName,
|
|
39
|
+
model: IModel.dictionaryId,
|
|
40
|
+
code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId, value: "test style" },
|
|
41
|
+
isPrivate: false,
|
|
42
|
+
jsonProperties: {
|
|
43
|
+
styles: settings,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const txn = new EditTxn(imodel2, "insert and update DisplayStyle");
|
|
47
|
+
txn.start();
|
|
48
|
+
const styleId = txn.insertElement(props);
|
|
49
|
+
let style = imodel2.elements.getElement(styleId);
|
|
50
|
+
expect(style instanceof DisplayStyle3d).to.be.true;
|
|
51
|
+
expect(style.code.spec).equal(imodel2.codeSpecs.getByName(BisCodeSpec.displayStyle).id);
|
|
52
|
+
expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SolidFill);
|
|
53
|
+
expect(style.settings.backgroundColor.equals(ColorDef.blue)).to.be.true;
|
|
54
|
+
const newFlags = style.settings.viewFlags.copy({ renderMode: RenderMode.SmoothShade });
|
|
55
|
+
style.settings.viewFlags = newFlags;
|
|
56
|
+
style.settings.backgroundColor = ColorDef.red;
|
|
57
|
+
style.settings.monochromeColor = ColorDef.green;
|
|
58
|
+
expect(style.jsonProperties.styles.viewflags.renderMode).to.equal(RenderMode.SmoothShade);
|
|
59
|
+
txn.updateElement(style.toJSON());
|
|
60
|
+
txn.end();
|
|
61
|
+
style = imodel2.elements.getElement(styleId);
|
|
62
|
+
expect(style instanceof DisplayStyle3d).to.be.true;
|
|
63
|
+
expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SmoothShade);
|
|
64
|
+
expect(style.settings.backgroundColor.equals(ColorDef.red)).to.be.true;
|
|
65
|
+
expect(style.settings.monochromeColor.equals(ColorDef.green)).to.be.true;
|
|
66
|
+
});
|
|
67
|
+
it("should create display styles", () => {
|
|
68
|
+
const imodel2 = trackMutableIModel(createIModelFromSeed("views-create-display-styles.bim", "CompatibilityTestSeed.bim"));
|
|
69
|
+
const defaultViewFlags = new ViewFlags().toJSON();
|
|
70
|
+
const defaultMapImagery = new DisplayStyleSettings({}).toJSON().mapImagery;
|
|
71
|
+
const viewFlags = new ViewFlags({ patterns: false, visibleEdges: true });
|
|
72
|
+
const viewflags = { noWhiteOnWhiteReversal: true, shadows: true, noTransp: true };
|
|
73
|
+
const mapImagery = {
|
|
74
|
+
backgroundBase: ColorDef.red.tbgr,
|
|
75
|
+
backgroundLayers: [{
|
|
76
|
+
name: "x",
|
|
77
|
+
url: "y",
|
|
78
|
+
transparency: 0.5,
|
|
79
|
+
formatId: "WMS",
|
|
80
|
+
visible: true,
|
|
81
|
+
}],
|
|
82
|
+
};
|
|
83
|
+
const props = {
|
|
84
|
+
mapImagery,
|
|
85
|
+
excludedElements: ["0x123", "0xfed"],
|
|
86
|
+
timePoint: 42,
|
|
87
|
+
backgroundColor: ColorDef.green.tbgr,
|
|
88
|
+
};
|
|
89
|
+
const testCases = [
|
|
90
|
+
[undefined, defaultViewFlags, false],
|
|
91
|
+
[{ viewFlags }, viewFlags.toJSON(), false],
|
|
92
|
+
[{ viewflags }, viewflags, false],
|
|
93
|
+
[{ viewflags, viewFlags }, viewFlags.toJSON(), false],
|
|
94
|
+
[props, defaultViewFlags, false],
|
|
95
|
+
[{ ...props, viewflags }, viewflags, false],
|
|
96
|
+
[{ backgroundColor: ColorDef.blue }, defaultViewFlags, false],
|
|
97
|
+
[{ backgroundColor: ColorDef.from(1, 2, 3, 4) }, defaultViewFlags, false],
|
|
98
|
+
[{ backgroundColor: ColorDef.blue.tbgr }, defaultViewFlags, false],
|
|
99
|
+
[{ backgroundColor: ColorDef.from(1, 2, 3, 4).tbgr }, defaultViewFlags, false],
|
|
100
|
+
];
|
|
101
|
+
let suffix = 123;
|
|
102
|
+
withEditTxn(imodel2, (txn) => {
|
|
103
|
+
for (const test of testCases) {
|
|
104
|
+
const expected = test[0] ?? {};
|
|
105
|
+
const styleId = DisplayStyle3d.insert(txn, IModel.dictionaryId, `TestStyle${suffix++}`, expected);
|
|
106
|
+
const style = imodel2.elements.getElement(styleId).toJSON();
|
|
107
|
+
expect(style.jsonProperties.styles).not.to.be.undefined;
|
|
108
|
+
expect(style.jsonProperties).not.to.be.undefined;
|
|
109
|
+
expect(style.jsonProperties.styles).not.to.be.undefined;
|
|
110
|
+
const actual = style.jsonProperties.styles;
|
|
111
|
+
expect(actual.viewflags).not.to.be.undefined;
|
|
112
|
+
const expectedVf = ViewFlags.fromJSON(test[1]);
|
|
113
|
+
const actualVf = ViewFlags.fromJSON(actual.viewflags);
|
|
114
|
+
expect(actualVf.toJSON()).to.deep.equal(expectedVf.toJSON());
|
|
115
|
+
const expectedBGColor = expected.backgroundColor instanceof ColorDef ? expected.backgroundColor.toJSON() : expected.backgroundColor;
|
|
116
|
+
expect(actual.backgroundColor).to.equal(expectedBGColor);
|
|
117
|
+
// DisplayStyleSettings constructor always initializes json.mapImagery.
|
|
118
|
+
expect(actual.mapImagery).to.deep.equal(expected.mapImagery ?? defaultMapImagery);
|
|
119
|
+
expect(actual.excludedElements).to.deep.equal(expected.excludedElements);
|
|
120
|
+
expect(actual.timePoint).to.deep.equal(expected.timePoint);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
it("should be able to query for ViewDefinitionProps", () => {
|
|
125
|
+
const imodel2 = compatibilityReadonly;
|
|
126
|
+
const viewDefinitionProps = imodel2.views.queryViewDefinitionProps(); // query for all ViewDefinitions
|
|
127
|
+
assert.isAtLeast(viewDefinitionProps.length, 3);
|
|
128
|
+
assert.isTrue(viewDefinitionProps[0].classFullName.includes("ViewDefinition"));
|
|
129
|
+
assert.isFalse(viewDefinitionProps[1].isPrivate);
|
|
130
|
+
const spatialViewDefinitionProps = imodel2.views.queryViewDefinitionProps("BisCore.SpatialViewDefinition"); // limit query to SpatialViewDefinitions
|
|
131
|
+
assert.isAtLeast(spatialViewDefinitionProps.length, 3);
|
|
132
|
+
assert.exists(spatialViewDefinitionProps[2].modelSelector?.id);
|
|
133
|
+
});
|
|
134
|
+
it("should iterate ViewDefinitions", () => {
|
|
135
|
+
const imodel2 = compatibilityReadonly;
|
|
136
|
+
// imodel2 contains 3 SpatialViewDefinitions and no other views.
|
|
137
|
+
let numViews = 0;
|
|
138
|
+
let result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view) => {
|
|
139
|
+
++numViews;
|
|
140
|
+
return true;
|
|
141
|
+
});
|
|
142
|
+
expect(result).to.be.true;
|
|
143
|
+
expect(numViews).to.equal(3);
|
|
144
|
+
// Query specifically for spatial views
|
|
145
|
+
numViews = 0;
|
|
146
|
+
result = imodel2.views.iterateViews({ from: "BisCore.SpatialViewDefinition" }, (view) => {
|
|
147
|
+
if (view.isSpatialView())
|
|
148
|
+
++numViews;
|
|
149
|
+
return view.isSpatialView();
|
|
150
|
+
});
|
|
151
|
+
expect(result).to.be.true;
|
|
152
|
+
expect(numViews).to.equal(3);
|
|
153
|
+
// Query specifically for 2d views
|
|
154
|
+
numViews = 0;
|
|
155
|
+
result = imodel2.views.iterateViews({ from: "BisCore.ViewDefinition2d" }, (_view) => {
|
|
156
|
+
++numViews;
|
|
157
|
+
return true;
|
|
158
|
+
});
|
|
159
|
+
expect(result).to.be.true;
|
|
160
|
+
expect(numViews).to.equal(0);
|
|
161
|
+
// Terminate iteration on first view
|
|
162
|
+
numViews = 0;
|
|
163
|
+
result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view) => {
|
|
164
|
+
++numViews;
|
|
165
|
+
return false;
|
|
166
|
+
});
|
|
167
|
+
expect(result).to.be.false;
|
|
168
|
+
expect(numViews).to.equal(1);
|
|
169
|
+
});
|
|
170
|
+
it("read view thumbnail", () => {
|
|
171
|
+
const imodel5 = trackMutableIModel(createIModelFromSeed("views-mirukuru-thumbnail.bim", "mirukuru.ibim"));
|
|
172
|
+
const viewId = "0x24";
|
|
173
|
+
const thumbnail = imodel5.views.getThumbnail(viewId);
|
|
174
|
+
assert.exists(thumbnail);
|
|
175
|
+
if (!thumbnail)
|
|
176
|
+
return;
|
|
177
|
+
assert.equal(thumbnail.format, "jpeg");
|
|
178
|
+
assert.equal(thumbnail.height, 768);
|
|
179
|
+
assert.equal(thumbnail.width, 768);
|
|
180
|
+
assert.equal(thumbnail.image.length, 18062);
|
|
181
|
+
thumbnail.width = 100;
|
|
182
|
+
thumbnail.height = 200;
|
|
183
|
+
thumbnail.format = "png";
|
|
184
|
+
thumbnail.image = new Uint8Array(200);
|
|
185
|
+
thumbnail.image.fill(12);
|
|
186
|
+
const stat = imodel5.views.saveThumbnail(viewId, thumbnail);
|
|
187
|
+
assert.equal(stat, 0, "save thumbnail");
|
|
188
|
+
const thumbnail2 = imodel5.views.getThumbnail(viewId);
|
|
189
|
+
assert.exists(thumbnail2);
|
|
190
|
+
if (!thumbnail2)
|
|
191
|
+
return;
|
|
192
|
+
assert.equal(thumbnail2.format, "png");
|
|
193
|
+
assert.equal(thumbnail2.height, 200);
|
|
194
|
+
assert.equal(thumbnail2.width, 100);
|
|
195
|
+
assert.equal(thumbnail2.image.length, 200);
|
|
196
|
+
assert.equal(thumbnail2.image[0], 12);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
//# sourceMappingURL=IModelViews.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelViews.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelViews.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 {\n BisCodeSpec, ColorDef, DisplayStyleProps, DisplayStyleSettings, DisplayStyleSettingsProps, IModel, MapImageryProps,\n RenderMode, SpatialViewDefinitionProps, ViewDefinitionProps, ViewFlagProps, ViewFlags,\n} from \"@itwin/core-common\";\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\nimport { DictionaryModel, DisplayStyle3d, DisplayStyleCreationOptions, IModelDb, SnapshotDb, ViewDefinition } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { TestUtils } from \"../TestUtils\";\nimport { closeIfOpen, createIModelFromSeed, createMutableIModelTracker, openReadonlySeedCopy } from \"./IModelTestFixtures\";\n\n\ndescribe(\"iModel views\", () => {\n let compatibilityReadonly: SnapshotDb;\n const { trackMutableIModel, closeTrackedIModels } = createMutableIModelTracker();\n\n before(async () => {\n await TestUtils.startBackend();\n IModelTestUtils.registerTestBimSchema();\n\n compatibilityReadonly = await openReadonlySeedCopy(\"views-CompatibilityTestSeed.bim\", \"CompatibilityTestSeed.bim\");\n });\n\n after(() => {\n closeIfOpen(compatibilityReadonly);\n closeTrackedIModels();\n });\n\n afterEach(() => {\n closeTrackedIModels();\n });\n\n it(\"should insert a DisplayStyle\", () => {\n const imodel2 = trackMutableIModel(createIModelFromSeed(\"views-insert-display-style.bim\", \"CompatibilityTestSeed.bim\"));\n const model = imodel2.models.getModel<DictionaryModel>(IModel.dictionaryId);\n expect(model).not.to.be.undefined;\n\n const settings: DisplayStyleSettingsProps = {\n backgroundColor: ColorDef.blue.toJSON(),\n viewflags: ViewFlags.fromJSON({\n renderMode: RenderMode.SolidFill,\n }),\n };\n\n const props: DisplayStyleProps = {\n classFullName: DisplayStyle3d.classFullName,\n model: IModel.dictionaryId,\n code: { spec: BisCodeSpec.displayStyle, scope: IModel.dictionaryId, value: \"test style\" },\n isPrivate: false,\n jsonProperties: {\n styles: settings,\n },\n };\n\n const txn = new EditTxn(imodel2, \"insert and update DisplayStyle\");\n txn.start();\n const styleId = txn.insertElement(props);\n let style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n expect(style.code.spec).equal(imodel2.codeSpecs.getByName(BisCodeSpec.displayStyle).id);\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SolidFill);\n expect(style.settings.backgroundColor.equals(ColorDef.blue)).to.be.true;\n\n const newFlags = style.settings.viewFlags.copy({ renderMode: RenderMode.SmoothShade });\n style.settings.viewFlags = newFlags;\n style.settings.backgroundColor = ColorDef.red;\n style.settings.monochromeColor = ColorDef.green;\n expect(style.jsonProperties.styles.viewflags.renderMode).to.equal(RenderMode.SmoothShade);\n\n txn.updateElement(style.toJSON());\n txn.end();\n style = imodel2.elements.getElement<DisplayStyle3d>(styleId);\n expect(style instanceof DisplayStyle3d).to.be.true;\n\n expect(style.settings.viewFlags.renderMode).to.equal(RenderMode.SmoothShade);\n expect(style.settings.backgroundColor.equals(ColorDef.red)).to.be.true;\n expect(style.settings.monochromeColor.equals(ColorDef.green)).to.be.true;\n });\n\n it(\"should create display styles\", () => {\n const imodel2 = trackMutableIModel(createIModelFromSeed(\"views-create-display-styles.bim\", \"CompatibilityTestSeed.bim\"));\n const defaultViewFlags = new ViewFlags().toJSON();\n const defaultMapImagery = new DisplayStyleSettings({}).toJSON().mapImagery;\n\n const viewFlags = new ViewFlags({ patterns: false, visibleEdges: true });\n const viewflags: ViewFlagProps = { noWhiteOnWhiteReversal: true, shadows: true, noTransp: true };\n\n const mapImagery: MapImageryProps = {\n backgroundBase: ColorDef.red.tbgr,\n backgroundLayers: [{\n name: \"x\",\n url: \"y\",\n transparency: 0.5,\n formatId: \"WMS\",\n visible: true,\n }],\n };\n\n const props: DisplayStyleSettingsProps = {\n mapImagery,\n excludedElements: [\"0x123\", \"0xfed\"],\n timePoint: 42,\n backgroundColor: ColorDef.green.tbgr,\n };\n\n type TestCase = [DisplayStyleCreationOptions | undefined, ViewFlagProps, boolean];\n const testCases: TestCase[] = [\n [undefined, defaultViewFlags, false],\n [{ viewFlags }, viewFlags.toJSON(), false],\n [{ viewflags }, viewflags, false],\n [{ viewflags, viewFlags }, viewFlags.toJSON(), false],\n [props, defaultViewFlags, false],\n [{ ...props, viewflags }, viewflags, false],\n [{ backgroundColor: ColorDef.blue }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4) }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.blue.tbgr }, defaultViewFlags, false],\n [{ backgroundColor: ColorDef.from(1, 2, 3, 4).tbgr }, defaultViewFlags, false],\n ];\n\n let suffix = 123;\n withEditTxn(imodel2, (txn) => {\n for (const test of testCases) {\n const expected = test[0] ?? {};\n const styleId = DisplayStyle3d.insert(txn, IModel.dictionaryId, `TestStyle${suffix++}`, expected);\n const style = imodel2.elements.getElement<DisplayStyle3d>(styleId).toJSON();\n expect(style.jsonProperties.styles).not.to.be.undefined;\n\n expect(style.jsonProperties).not.to.be.undefined;\n expect(style.jsonProperties.styles).not.to.be.undefined;\n const actual = style.jsonProperties.styles!;\n\n expect(actual.viewflags).not.to.be.undefined;\n const expectedVf = ViewFlags.fromJSON(test[1]);\n const actualVf = ViewFlags.fromJSON(actual.viewflags);\n expect(actualVf.toJSON()).to.deep.equal(expectedVf.toJSON());\n\n const expectedBGColor = expected.backgroundColor instanceof ColorDef ? expected.backgroundColor.toJSON() : expected.backgroundColor;\n expect(actual.backgroundColor).to.equal(expectedBGColor);\n\n // DisplayStyleSettings constructor always initializes json.mapImagery.\n expect(actual.mapImagery).to.deep.equal(expected.mapImagery ?? defaultMapImagery);\n expect(actual.excludedElements).to.deep.equal(expected.excludedElements);\n expect(actual.timePoint).to.deep.equal(expected.timePoint);\n }\n });\n });\n\n it(\"should be able to query for ViewDefinitionProps\", () => {\n const imodel2 = compatibilityReadonly;\n const viewDefinitionProps: ViewDefinitionProps[] = imodel2.views.queryViewDefinitionProps(); // query for all ViewDefinitions\n assert.isAtLeast(viewDefinitionProps.length, 3);\n assert.isTrue(viewDefinitionProps[0].classFullName.includes(\"ViewDefinition\"));\n assert.isFalse(viewDefinitionProps[1].isPrivate);\n\n const spatialViewDefinitionProps = imodel2.views.queryViewDefinitionProps(\"BisCore.SpatialViewDefinition\") as SpatialViewDefinitionProps[]; // limit query to SpatialViewDefinitions\n assert.isAtLeast(spatialViewDefinitionProps.length, 3);\n assert.exists(spatialViewDefinitionProps[2].modelSelector?.id);\n });\n\n it(\"should iterate ViewDefinitions\", () => {\n const imodel2 = compatibilityReadonly;\n // imodel2 contains 3 SpatialViewDefinitions and no other views.\n let numViews = 0;\n let result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for spatial views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.SpatialViewDefinition\" }, (view: ViewDefinition) => {\n if (view.isSpatialView())\n ++numViews;\n\n return view.isSpatialView();\n });\n expect(result).to.be.true;\n expect(numViews).to.equal(3);\n\n // Query specifically for 2d views\n numViews = 0;\n result = imodel2.views.iterateViews({ from: \"BisCore.ViewDefinition2d\" }, (_view: ViewDefinition) => {\n ++numViews;\n return true;\n });\n\n expect(result).to.be.true;\n expect(numViews).to.equal(0);\n\n // Terminate iteration on first view\n numViews = 0;\n result = imodel2.views.iterateViews(IModelDb.Views.defaultQueryParams, (_view: ViewDefinition) => {\n ++numViews;\n return false;\n });\n\n expect(result).to.be.false;\n expect(numViews).to.equal(1);\n });\n\n it(\"read view thumbnail\", () => {\n const imodel5 = trackMutableIModel(createIModelFromSeed(\"views-mirukuru-thumbnail.bim\", \"mirukuru.ibim\"));\n const viewId = \"0x24\";\n const thumbnail = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail);\n if (!thumbnail)\n return;\n assert.equal(thumbnail.format, \"jpeg\");\n assert.equal(thumbnail.height, 768);\n assert.equal(thumbnail.width, 768);\n assert.equal(thumbnail.image.length, 18062);\n\n thumbnail.width = 100;\n thumbnail.height = 200;\n thumbnail.format = \"png\";\n thumbnail.image = new Uint8Array(200);\n thumbnail.image.fill(12);\n const stat = imodel5.views.saveThumbnail(viewId, thumbnail);\n assert.equal(stat, 0, \"save thumbnail\");\n\n const thumbnail2 = imodel5.views.getThumbnail(viewId);\n assert.exists(thumbnail2);\n if (!thumbnail2)\n return;\n assert.equal(thumbnail2.format, \"png\");\n assert.equal(thumbnail2.height, 200);\n assert.equal(thumbnail2.width, 100);\n assert.equal(thumbnail2.image.length, 200);\n assert.equal(thumbnail2.image[0], 12);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectExtents.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ProjectExtents.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"ProjectExtents.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/ProjectExtents.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { GeometricElement3dProps, Placement3d } from \"@itwin/core-common\";\nimport { GeometricElement3d, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../index\";\nimport { withEditTxn } from \"../../EditTxn\";\n\ndescribe(\"computeProjectExtents\", () => {\n let imodel: SnapshotDb;\n\n before(() => {\n imodel = IModelTestUtils.createSnapshotFromSeed(IModelTestUtils.prepareOutputFile(\"IModel\", \"test.bim\"), IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"should return requested information\", () => {\n const projectExtents = imodel.projectExtents;\n const args = [undefined, false, true];\n for (const reportExtentsWithOutliers of args) {\n for (const reportOutliers of args) {\n const result = imodel.computeProjectExtents({ reportExtentsWithOutliers, reportOutliers });\n expect(result.extents.isAlmostEqual(projectExtents)).to.be.true;\n\n expect(undefined !== result.extentsWithOutliers).to.equal(true === reportExtentsWithOutliers);\n if (undefined !== result.extentsWithOutliers)\n expect(result.extentsWithOutliers.isAlmostEqual(projectExtents)).to.be.true;\n\n expect(undefined !== result.outliers).to.equal(true === reportOutliers);\n if (undefined !== result.outliers)\n expect(result.outliers.length).to.equal(0);\n }\n }\n });\n\n it(\"should report outliers\", () => {\n const elemProps = imodel.elements.getElementProps<GeometricElement3dProps>({ id: \"0x39\", wantGeometry: true });\n elemProps.id = Id64.invalid;\n const placement = Placement3d.fromJSON(elemProps.placement);\n const originalOrigin = placement.origin.clone();\n const mult = 1000000;\n placement.origin.x *= mult;\n placement.origin.y *= mult;\n placement.origin.z *= mult;\n elemProps.placement = placement;\n elemProps.geom![2].sphere!.radius = 0.000001;\n const newId = withEditTxn(imodel, (txn) => txn.insertElement(elemProps));\n expect(Id64.isValid(newId)).to.be.true;\n\n const newElem = imodel.elements.getElement<GeometricElement3d>(newId);\n expect(newElem).instanceof(GeometricElement3d);\n expect(newElem.placement.origin.x).to.equal(originalOrigin.x * mult);\n expect(newElem.placement.origin.y).to.equal(originalOrigin.y * mult);\n expect(newElem.placement.origin.z).to.equal(originalOrigin.z * mult);\n\n const outlierRange = placement.calculateRange();\n const originalExtents = imodel.projectExtents;\n const extentsWithOutlier = originalExtents.clone();\n extentsWithOutlier.extendRange(outlierRange);\n\n const result = imodel.computeProjectExtents({ reportExtentsWithOutliers: true, reportOutliers: true });\n expect(result.outliers!.length).to.equal(1);\n expect(result.outliers![0]).to.equal(newId);\n expect(result.extents.isAlmostEqual(originalExtents)).to.be.true;\n expect(result.extentsWithOutliers!.isAlmostEqual(originalExtents)).to.be.false;\n expect(result.extentsWithOutliers!.low.isAlmostEqual(extentsWithOutlier.low)).to.be.true;\n expect(result.extentsWithOutliers!.high.isAlmostEqual(extentsWithOutlier.high, 20)).to.be.true;\n });\n});\n"]}
|
|
@@ -81,19 +81,19 @@ describe("Schema XML Import Tests", () => {
|
|
|
81
81
|
const testFileName = IModelTestUtils.prepareOutputFile("SchemaXMLImport", "RatioFormatRoundtrip.bim");
|
|
82
82
|
const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: "RatioFormatTest" } });
|
|
83
83
|
try {
|
|
84
|
-
const schemaXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
85
|
-
<ECSchema schemaName="RatioFormatTest" alias="rft" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
86
|
-
<ECSchemaReference name="Units" version="01.00.09" alias="u"/>
|
|
87
|
-
<Format typeName="TestRatioFormat" type="Ratio" ratioType="OneToN" ratioSeparator=":" ratioFormatType="Decimal" precision="4" formatTraits="trailZeroes|showUnitLabel">
|
|
88
|
-
<Composite>
|
|
89
|
-
<Unit>u:M</Unit>
|
|
90
|
-
</Composite>
|
|
91
|
-
</Format>
|
|
92
|
-
<Format typeName="TestRatioFormat2" type="Ratio" ratioType="NToOne" ratioSeparator="=" ratioFormatType="Fractional" precision="8" formatTraits="keepSingleZero">
|
|
93
|
-
<Composite>
|
|
94
|
-
<Unit>u:M</Unit>
|
|
95
|
-
</Composite>
|
|
96
|
-
</Format>
|
|
84
|
+
const schemaXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
85
|
+
<ECSchema schemaName="RatioFormatTest" alias="rft" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
86
|
+
<ECSchemaReference name="Units" version="01.00.09" alias="u"/>
|
|
87
|
+
<Format typeName="TestRatioFormat" type="Ratio" ratioType="OneToN" ratioSeparator=":" ratioFormatType="Decimal" precision="4" formatTraits="trailZeroes|showUnitLabel">
|
|
88
|
+
<Composite>
|
|
89
|
+
<Unit>u:M</Unit>
|
|
90
|
+
</Composite>
|
|
91
|
+
</Format>
|
|
92
|
+
<Format typeName="TestRatioFormat2" type="Ratio" ratioType="NToOne" ratioSeparator="=" ratioFormatType="Fractional" precision="8" formatTraits="keepSingleZero">
|
|
93
|
+
<Composite>
|
|
94
|
+
<Unit>u:M</Unit>
|
|
95
|
+
</Composite>
|
|
96
|
+
</Format>
|
|
97
97
|
</ECSchema>`;
|
|
98
98
|
// Import schema into iModel
|
|
99
99
|
await testIModel.importSchemaStrings([schemaXml]);
|
|
@@ -115,14 +115,14 @@ describe("Schema XML Import Tests", () => {
|
|
|
115
115
|
});
|
|
116
116
|
});
|
|
117
117
|
describe("exportSchemaXmlString", () => {
|
|
118
|
-
const schemaXml32 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
119
|
-
<ECSchema schemaName="TestSchema" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
120
|
-
<ECSchemaReference name="BisCore" version="1.0.23" alias="bis"/>
|
|
121
|
-
|
|
122
|
-
<ECEntityClass typeName="TestClass">
|
|
123
|
-
<BaseClass>bis:GraphicalElement2d</BaseClass>
|
|
124
|
-
<ECProperty propertyName="Name" typeName="string"/>
|
|
125
|
-
</ECEntityClass>
|
|
118
|
+
const schemaXml32 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
119
|
+
<ECSchema schemaName="TestSchema" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
120
|
+
<ECSchemaReference name="BisCore" version="1.0.23" alias="bis"/>
|
|
121
|
+
|
|
122
|
+
<ECEntityClass typeName="TestClass">
|
|
123
|
+
<BaseClass>bis:GraphicalElement2d</BaseClass>
|
|
124
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
125
|
+
</ECEntityClass>
|
|
126
126
|
</ECSchema>`;
|
|
127
127
|
let imodel;
|
|
128
128
|
before(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaXmlImport.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/SchemaXmlImport.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 } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { PhysicalElement, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { ECSpecVersion, EntityClass, Format } from \"@itwin/ecschema-metadata\";\r\n\r\ndescribe(\"Schema XML Import Tests\", () => {\r\n before(() => {\r\n // initialize logging\r\n if (false) {\r\n Logger.initializeToConsole();\r\n Logger.setLevelDefault(LogLevel.Error);\r\n }\r\n });\r\n\r\n it(\"should import schema XML\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaXMLImport.bim\");\r\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaXMLImportTest\" } });\r\n\r\n try {\r\n const schemaFilePath = path.join(KnownTestLocations.assetsDir, \"Test3.ecschema.xml\");\r\n const schemaString = fs.readFileSync(schemaFilePath, \"utf8\");\r\n\r\n await imodel.importSchemaStrings([schemaString]); // will throw an exception if import fails\r\n\r\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"Test3.Test3Element\", EntityClass);\r\n assert.isDefined(testDomainClass);\r\n\r\n assert.isDefined(testDomainClass?.baseClass);\r\n\r\n assert.equal(testDomainClass?.baseClass?.fullName, PhysicalElement.classFullName.replace(\":\", \".\"));\r\n } finally {\r\n imodel.close();\r\n }\r\n });\r\n\r\n it(\"Schema import for newer ECXml Versions\", async () => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaVersionTest.bim\");\r\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaVersionTest\" } });\r\n\r\n try {\r\n const helperFunction = async (imodelDb: SnapshotDb, xmlSchema: string[], importSchema: boolean) => {\r\n try {\r\n // ECObjects is expected to throw for schemas that fail to import\r\n if (importSchema)\r\n await imodelDb.importSchemaStrings(xmlSchema);\r\n else\r\n imodelDb.getSchemaProps(xmlSchema[0]);\r\n } catch {\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n // Incrementing major ECXml version is not supported\r\n for (const testCase of [`4.1`, `5.10`]) {\r\n assert(!(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true)), `Schema ${testCase} import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema`], false)), `Schema ${testCase} test should not have succeeded.`);\r\n }\r\n\r\n // Importing a set of schemas should all fail if any one of them fails\r\n {\r\n const schemaXmls = [`<ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"/>`,\r\n `<ECSchema schemaName=\"TestSchema2\" alias=\"ts2\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.8\"/>`,\r\n `<ECSchema schemaName=\"TestSchema3\" alias=\"ts3\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.4.5\"/>`];\r\n\r\n assert(!(await helperFunction(imodel, schemaXmls, true)), `Schema import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema1`], false)), `Schema TestSchema1 import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema2`], false)), `Schema TestSchema2 import should not have succeeded.`);\r\n assert(!(await helperFunction(imodel, [`TestSchema3`], false)), `Schema TestSchema3 import should not have succeeded.`);\r\n }\r\n\r\n // Schema should be imported successfully\r\n for (const testCase of [`3.2`, `3.5`]) {\r\n assert(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true), `Schema ${testCase} import should have succeeded.`);\r\n assert(await helperFunction(imodel, [`TestSchema`], false), `Schema ${testCase} test should have succeeded.`);\r\n }\r\n } finally {\r\n imodel.close();\r\n }\r\n });\r\n\r\n it.skip(\"should roundtrip ratio format properties\", async () => {\r\n // Create a separate iModel for this test\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"RatioFormatRoundtrip.bim\");\r\n const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"RatioFormatTest\" } });\r\n\r\n try {\r\n const schemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"RatioFormatTest\" alias=\"rft\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"Units\" version=\"01.00.09\" alias=\"u\"/>\r\n <Format typeName=\"TestRatioFormat\" type=\"Ratio\" ratioType=\"OneToN\" ratioSeparator=\":\" ratioFormatType=\"Decimal\" precision=\"4\" formatTraits=\"trailZeroes|showUnitLabel\">\r\n <Composite>\r\n <Unit>u:M</Unit>\r\n </Composite>\r\n </Format>\r\n <Format typeName=\"TestRatioFormat2\" type=\"Ratio\" ratioType=\"NToOne\" ratioSeparator=\"=\" ratioFormatType=\"Fractional\" precision=\"8\" formatTraits=\"keepSingleZero\">\r\n <Composite>\r\n <Unit>u:M</Unit>\r\n </Composite>\r\n </Format>\r\n </ECSchema>`;\r\n\r\n // Import schema into iModel\r\n await testIModel.importSchemaStrings([schemaXml]);\r\n\r\n // Read back the format from the iModel's schema context\r\n const format1 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat\", Format);\r\n assert.isDefined(format1);\r\n assert.strictEqual(format1?.ratioType, \"OneToN\");\r\n assert.strictEqual(format1?.ratioSeparator, \":\");\r\n assert.strictEqual(format1?.ratioFormatType, \"Decimal\");\r\n\r\n const format2 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat2\", Format);\r\n assert.isDefined(format2);\r\n assert.strictEqual(format2?.ratioType, \"NToOne\");\r\n assert.strictEqual(format2?.ratioSeparator, \"=\");\r\n assert.strictEqual(format2?.ratioFormatType, \"Fractional\");\r\n } finally {\r\n testIModel.close();\r\n }\r\n });\r\n});\r\n\r\ndescribe(\"exportSchemaXmlString\", () => {\r\n const schemaXml32 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.23\" alias=\"bis\"/>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n let imodel: SnapshotDb;\r\n\r\n before(async () => {\r\n const filePath = IModelTestUtils.prepareOutputFile(\"exportSchemaXmlString\", \"exportSchemaXmlString.bim\");\r\n imodel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"exportSchemaXmlStringTest\" } });\r\n await imodel.importSchemaStrings([schemaXml32]);\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"default ECSpecVersion arg return an 3.2 XML\", () => {\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\r\n assert.isDefined(xml, \"expected a non-undefined result for an existing schema\");\r\n assert.include(xml, \"Bentley.ECXML.3.2\", \"expected EC 3.2 namespace when no version is supplied\");\r\n assert.include(xml, \"TestSchema\", \"schema name should be present in output\");\r\n });\r\n\r\n it(\"returns undefined for a schema that does not exist\", () => {\r\n const xml = imodel.exportSchemaXmlString(\"NonExistentSchema\");\r\n assert.isUndefined(xml, \"expected undefined for an unknown schema name\");\r\n });\r\n\r\n it(\"test returned XML contains the entity class\", () => {\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\r\n assert.isDefined(xml);\r\n assert.match(xml!, /^<\\?xml|^<ECSchema/, \"output should start with an XML declaration or root element\");\r\n assert.include(xml, \"TestClass\", \"ECEntityClass 'TestClass' should be present in serialised output\");\r\n assert.include(xml, \"Name\", \"property 'Name' should be present in serialised output\");\r\n });\r\n\r\n it(\"ECSpecVersion 3.2 version returns 3.2 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 2 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml);\r\n assert.include(xml, \"Bentley.ECXML.3.2\");\r\n assert.include(xml, \"TestSchema\");\r\n });\r\n\r\n it(\"ECSpecVersion 3.1 version returns 3.1 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 1 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml);\r\n assert.include(xml, \"Bentley.ECXML.3.1\", \"expected EC 3.1 namespace\");\r\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.1\");\r\n });\r\n\r\n it(\"ECSpecVersion 3.0 version returns 3.0 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 0 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml);\r\n assert.include(xml, \"Bentley.ECXML.3.0\", \"expected EC 3.0 namespace\");\r\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.0\");\r\n });\r\n\r\n it(\"ECSpecVersion 2.0 version returns 2.0 XML\", () => {\r\n const version: ECSpecVersion = { readVersion: 2, writeVersion: 0 };\r\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\r\n assert.isDefined(xml, \"expected a result for EC 2.0 export\");\r\n assert.notInclude(xml, \"Bentley.ECXML.3.\", \"EC 2.0 output should not contain an EC 3.x namespace URI\");\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaXmlImport.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/SchemaXmlImport.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 } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { PhysicalElement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECSpecVersion, EntityClass, Format } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Schema XML Import Tests\", () => {\n before(() => {\n // initialize logging\n if (false) {\n Logger.initializeToConsole();\n Logger.setLevelDefault(LogLevel.Error);\n }\n });\n\n it(\"should import schema XML\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaXMLImport.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaXMLImportTest\" } });\n\n try {\n const schemaFilePath = path.join(KnownTestLocations.assetsDir, \"Test3.ecschema.xml\");\n const schemaString = fs.readFileSync(schemaFilePath, \"utf8\");\n\n await imodel.importSchemaStrings([schemaString]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"Test3.Test3Element\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n\n assert.equal(testDomainClass?.baseClass?.fullName, PhysicalElement.classFullName.replace(\":\", \".\"));\n } finally {\n imodel.close();\n }\n });\n\n it(\"Schema import for newer ECXml Versions\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaVersionTest.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaVersionTest\" } });\n\n try {\n const helperFunction = async (imodelDb: SnapshotDb, xmlSchema: string[], importSchema: boolean) => {\n try {\n // ECObjects is expected to throw for schemas that fail to import\n if (importSchema)\n await imodelDb.importSchemaStrings(xmlSchema);\n else\n imodelDb.getSchemaProps(xmlSchema[0]);\n } catch {\n return false;\n }\n return true;\n };\n\n // Incrementing major ECXml version is not supported\n for (const testCase of [`4.1`, `5.10`]) {\n assert(!(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true)), `Schema ${testCase} import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema`], false)), `Schema ${testCase} test should not have succeeded.`);\n }\n\n // Importing a set of schemas should all fail if any one of them fails\n {\n const schemaXmls = [`<ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"/>`,\n `<ECSchema schemaName=\"TestSchema2\" alias=\"ts2\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.8\"/>`,\n `<ECSchema schemaName=\"TestSchema3\" alias=\"ts3\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.4.5\"/>`];\n\n assert(!(await helperFunction(imodel, schemaXmls, true)), `Schema import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema1`], false)), `Schema TestSchema1 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema2`], false)), `Schema TestSchema2 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema3`], false)), `Schema TestSchema3 import should not have succeeded.`);\n }\n\n // Schema should be imported successfully\n for (const testCase of [`3.2`, `3.5`]) {\n assert(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true), `Schema ${testCase} import should have succeeded.`);\n assert(await helperFunction(imodel, [`TestSchema`], false), `Schema ${testCase} test should have succeeded.`);\n }\n } finally {\n imodel.close();\n }\n });\n\n it.skip(\"should roundtrip ratio format properties\", async () => {\n // Create a separate iModel for this test\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"RatioFormatRoundtrip.bim\");\n const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"RatioFormatTest\" } });\n\n try {\n const schemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"RatioFormatTest\" alias=\"rft\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.09\" alias=\"u\"/>\n <Format typeName=\"TestRatioFormat\" type=\"Ratio\" ratioType=\"OneToN\" ratioSeparator=\":\" ratioFormatType=\"Decimal\" precision=\"4\" formatTraits=\"trailZeroes|showUnitLabel\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n <Format typeName=\"TestRatioFormat2\" type=\"Ratio\" ratioType=\"NToOne\" ratioSeparator=\"=\" ratioFormatType=\"Fractional\" precision=\"8\" formatTraits=\"keepSingleZero\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n </ECSchema>`;\n\n // Import schema into iModel\n await testIModel.importSchemaStrings([schemaXml]);\n\n // Read back the format from the iModel's schema context\n const format1 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat\", Format);\n assert.isDefined(format1);\n assert.strictEqual(format1?.ratioType, \"OneToN\");\n assert.strictEqual(format1?.ratioSeparator, \":\");\n assert.strictEqual(format1?.ratioFormatType, \"Decimal\");\n\n const format2 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat2\", Format);\n assert.isDefined(format2);\n assert.strictEqual(format2?.ratioType, \"NToOne\");\n assert.strictEqual(format2?.ratioSeparator, \"=\");\n assert.strictEqual(format2?.ratioFormatType, \"Fractional\");\n } finally {\n testIModel.close();\n }\n });\n});\n\ndescribe(\"exportSchemaXmlString\", () => {\n const schemaXml32 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.23\" alias=\"bis\"/>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n let imodel: SnapshotDb;\n\n before(async () => {\n const filePath = IModelTestUtils.prepareOutputFile(\"exportSchemaXmlString\", \"exportSchemaXmlString.bim\");\n imodel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"exportSchemaXmlStringTest\" } });\n await imodel.importSchemaStrings([schemaXml32]);\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"default ECSpecVersion arg return an 3.2 XML\", () => {\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\n assert.isDefined(xml, \"expected a non-undefined result for an existing schema\");\n assert.include(xml, \"Bentley.ECXML.3.2\", \"expected EC 3.2 namespace when no version is supplied\");\n assert.include(xml, \"TestSchema\", \"schema name should be present in output\");\n });\n\n it(\"returns undefined for a schema that does not exist\", () => {\n const xml = imodel.exportSchemaXmlString(\"NonExistentSchema\");\n assert.isUndefined(xml, \"expected undefined for an unknown schema name\");\n });\n\n it(\"test returned XML contains the entity class\", () => {\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\n assert.isDefined(xml);\n assert.match(xml!, /^<\\?xml|^<ECSchema/, \"output should start with an XML declaration or root element\");\n assert.include(xml, \"TestClass\", \"ECEntityClass 'TestClass' should be present in serialised output\");\n assert.include(xml, \"Name\", \"property 'Name' should be present in serialised output\");\n });\n\n it(\"ECSpecVersion 3.2 version returns 3.2 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 2 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.2\");\n assert.include(xml, \"TestSchema\");\n });\n\n it(\"ECSpecVersion 3.1 version returns 3.1 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 1 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.1\", \"expected EC 3.1 namespace\");\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.1\");\n });\n\n it(\"ECSpecVersion 3.0 version returns 3.0 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 0 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.0\", \"expected EC 3.0 namespace\");\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.0\");\n });\n\n it(\"ECSpecVersion 2.0 version returns 2.0 XML\", () => {\n const version: ECSpecVersion = { readVersion: 2, writeVersion: 0 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml, \"expected a result for EC 2.0 export\");\n assert.notInclude(xml, \"Bentley.ECXML.3.\", \"EC 2.0 output should not contain an EC 3.x namespace URI\");\n });\n});\n"]}
|