@itwin/core-backend 5.0.0-dev.95 → 5.0.0-dev.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.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 +242 -242
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.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/ECSqlStatement.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/HubMock.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- 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/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/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/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/TextAnnotationLayout.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/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.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/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.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/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/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 +242 -242
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.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/ECSqlStatement.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/HubMock.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- 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/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/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/TextAnnotationElement.js.map +1 -1
- package/lib/esm/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/TextAnnotationLayout.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/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/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.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/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.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/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +57 -57
- 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 +7 -7
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +292 -292
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +71 -71
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +28 -28
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/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/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +12 -12
|
@@ -20,19 +20,19 @@ function initElemProps(_iModelName, modId, catId, autoHandledProp) {
|
|
|
20
20
|
return elementProps;
|
|
21
21
|
}
|
|
22
22
|
describe("Insert Null elements in Struct Array, and ensure they are returned while querying rows", () => {
|
|
23
|
-
const testSchema = `<?xml version="1.0" encoding="UTF-8"?>
|
|
24
|
-
<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
25
|
-
<ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
|
|
26
|
-
<ECStructClass typeName="Location" modifier="Sealed">
|
|
27
|
-
<ECProperty propertyName="City" typeName="string"/>
|
|
28
|
-
<ECProperty propertyName="Zip" typeName="int"/>
|
|
29
|
-
</ECStructClass>
|
|
30
|
-
<ECEntityClass typeName="Foo" modifier="Sealed">
|
|
31
|
-
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
32
|
-
<ECArrayProperty propertyName="I_Array" typeName="int"/>
|
|
33
|
-
<ECArrayProperty propertyName="Dt_Array" typeName="dateTime"/>
|
|
34
|
-
<ECStructArrayProperty propertyName="Addresses" typeName="Location"/>
|
|
35
|
-
</ECEntityClass>
|
|
23
|
+
const testSchema = `<?xml version="1.0" encoding="UTF-8"?>
|
|
24
|
+
<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
25
|
+
<ECSchemaReference name="BisCore" version="01.00.04" alias="bis"/>
|
|
26
|
+
<ECStructClass typeName="Location" modifier="Sealed">
|
|
27
|
+
<ECProperty propertyName="City" typeName="string"/>
|
|
28
|
+
<ECProperty propertyName="Zip" typeName="int"/>
|
|
29
|
+
</ECStructClass>
|
|
30
|
+
<ECEntityClass typeName="Foo" modifier="Sealed">
|
|
31
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
32
|
+
<ECArrayProperty propertyName="I_Array" typeName="int"/>
|
|
33
|
+
<ECArrayProperty propertyName="Dt_Array" typeName="dateTime"/>
|
|
34
|
+
<ECStructArrayProperty propertyName="Addresses" typeName="Location"/>
|
|
35
|
+
</ECEntityClass>
|
|
36
36
|
</ECSchema>`;
|
|
37
37
|
const schemaFileName = "NullStructElementTest.01.00.00.xml";
|
|
38
38
|
const iModelFileName = "NullStructElementTest.bim";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NullStructArray.test.js","sourceRoot":"","sources":["../../../../src/test/element/NullStructArray.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"NullStructArray.test.js","sourceRoot":"","sources":["../../../../src/test/element/NullStructArray.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 { Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n BriefcaseIdValue, Code, ColorDef, GeometricElementProps, IModel,\n SubCategoryAppearance,\n} from \"@itwin/core-common\";\nimport { _nativeDb, IModelDb, IModelJsFs, SnapshotDb, SpatialCategory } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ninterface TestElement extends GeometricElementProps {\n addresses: [null, {city: \"Pune\", zip: 28}];\n}\n\nfunction initElemProps( _iModelName: IModelDb, modId: Id64String, catId: Id64String, autoHandledProp: any): GeometricElementProps {\n // Create props\n const elementProps: GeometricElementProps = {\n classFullName: \"Test:Foo\",\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n };\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n return elementProps;\n}\n\ndescribe(\"Insert Null elements in Struct Array, and ensure they are returned while querying rows\", () => {\n const testSchema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"Test\" alias=\"test\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n <ECStructClass typeName=\"Location\" modifier=\"Sealed\">\n <ECProperty propertyName=\"City\" typeName=\"string\"/>\n <ECProperty propertyName=\"Zip\" typeName=\"int\"/>\n </ECStructClass>\n <ECEntityClass typeName=\"Foo\" modifier=\"Sealed\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECArrayProperty propertyName=\"I_Array\" typeName=\"int\"/>\n <ECArrayProperty propertyName=\"Dt_Array\" typeName=\"dateTime\"/>\n <ECStructArrayProperty propertyName=\"Addresses\" typeName=\"Location\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n const schemaFileName = \"NullStructElementTest.01.00.00.xml\";\n const iModelFileName = \"NullStructElementTest.bim\";\n const categoryName = \"NullStructElement\";\n const subDirName = \"NullStructElement\";\n const iModelPath = IModelTestUtils.prepareOutputFile(subDirName, iModelFileName);\n\n before(async () => {\n // write schema to disk as we do not have api to import xml directly\n const testSchemaPath = IModelTestUtils.prepareOutputFile(subDirName, schemaFileName);\n IModelJsFs.writeFileSync(testSchemaPath, testSchema);\n\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"InsertNullStructArrayTest\" } });\n await imodel.importSchemas([testSchemaPath]);\n imodel[_nativeDb].resetBriefcaseId(BriefcaseIdValue.Unassigned);\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(imodel, IModel.dictionaryId, categoryName,\n new SubCategoryAppearance({ color: ColorDef.create(\"rgb(255,0,0)\").toJSON() }));\n\n imodel.saveChanges();\n imodel.close();\n });\n\n it(\"Test for struct array to contain null structs\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(subDirName, \"roundtrip_correct_data.bim\");\n const imodel = IModelTestUtils.createSnapshotFromSeed(testFileName, iModelPath);\n const spatialCategoryId = SpatialCategory.queryCategoryIdByName(imodel, IModel.dictionaryId, categoryName);\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true);\n\n // create element with auto handled properties\n const expectedValue = initElemProps( imodel, newModelId, spatialCategoryId!, {\n addresses: [null, {city: \"Pune\", zip: 28}],\n }) as TestElement;\n\n // insert a element\n const geomElement = imodel.elements.createElement(expectedValue);\n const id = imodel.elements.insertElement(geomElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n imodel.saveChanges();\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElementProps<TestElement>(id);\n expect(actualValue.addresses.length).to.equal(2);\n expect(actualValue.addresses[0]).to.be.empty;\n\n imodel.close();\n });\n\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UrlLink.test.js","sourceRoot":"","sources":["../../../../src/test/element/UrlLink.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAuB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE/E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAwB;YACrC,WAAW,EAAE,gCAAgC;YAC7C,GAAG,EAAE,oBAAoB;YACzB,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;YAClC,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;YAChF,KAAK,EAAE,MAAM,CAAC,iBAAiB;SAChC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"UrlLink.test.js","sourceRoot":"","sources":["../../../../src/test/element/UrlLink.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAuB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,YAAY,GAAG,iBAAiB,CAAC;AACvC,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE/E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAwB;YACrC,WAAW,EAAE,gCAAgC;YAC7C,GAAG,EAAE,oBAAoB;YACzB,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE;YAClC,aAAa,EAAE,cAAc,CAAC,aAAa;YAC3C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;YAChF,KAAK,EAAE,MAAM,CAAC,iBAAiB;SAChC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAiB,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;QAChH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,2CAA2C,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { Guid, Id64 } from \"@itwin/core-bentley\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\nimport { IModel, RepositoryLinkProps } from \"@itwin/core-common\";\nimport { RepositoryLink } from \"../../Element\";\nimport { SnapshotDb } from \"../../IModelDb\";\n\nconst testFileName = \"UrlLinkTest.bim\";\nconst subDirName = \"UrlLinkTrip\";\nconst iModelPath = IModelTestUtils.prepareOutputFile(subDirName, testFileName);\n\ndescribe(\"UrlLink tests\", () => {\n it(\"Link should construct properly\", () => {\n const imodel = SnapshotDb.createEmpty(iModelPath, { rootSubject: { name: \"UrlLinkTest\" } });\n const linkProps: RepositoryLinkProps = {\n description: \"This is a test repository link\",\n url: \"http://itwinjs.org\",\n repositoryGuid: Guid.createValue(),\n classFullName: RepositoryLink.classFullName,\n code: RepositoryLink.createCode(imodel, IModel.repositoryModelId, \"MyTestValue\"),\n model: IModel.repositoryModelId,\n };\n\n const linkElement = imodel.elements.createElement(linkProps);\n const id = imodel.elements.insertElement(linkElement.toJSON());\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\n imodel.saveChanges();\n\n // verify inserted element properties\n const actualValue = imodel.elements.getElement<RepositoryLink>(id);\n assert.equal(actualValue.url, linkProps.url, \"Repository link url not set as expected\");\n assert.equal(actualValue.description, linkProps.description, \"Repository link description not set as expected\");\n assert.equal(actualValue.repositoryGuid, linkProps.repositoryGuid, \"Repository link guid not set as expected.\");\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FontFile.test.js","sourceRoot":"","sources":["../../../../src/test/font/FontFile.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 * as fs from \"fs\";\r\nimport { expect } from \"chai\";\r\nimport { FontFace, FontType } from \"@itwin/core-common\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { FontFile } from \"../../FontFile\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { CadFontFile } from \"../../internal/FontFileImpl\";\r\nimport { _key } from \"../../internal/Symbols\";\r\n\r\nfunction expectFaces(file: FontFile, expected: FontFace[]): void {\r\n const actual = Array.from(file.faces);\r\n expect(actual).to.deep.equal(expected);\r\n}\r\n\r\ndescribe(\"FontFile\", () => {\r\n describe(\"createFromShxBlob\", () => {\r\n it(\"creates a valid font\", () => {\r\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\r\n const blob = fs.readFileSync(fileName);\r\n\r\n const file = FontFile.createFromShxFontBlob({ familyName: \"Cdm\", blob });\r\n expect(file.type).to.equal(FontType.Shx);\r\n expect(file.isEmbeddable).to.be.true;\r\n expectFaces(file, [{ familyName: \"Cdm\", isBold: false, isItalic: false }])\r\n });\r\n\r\n it(\"throws on non-font data\", () => {\r\n const fileName = IModelTestUtils.resolveAssetFile(\"brepdata1.json\");\r\n expect(fs.existsSync(fileName)).to.be.true;\r\n\r\n const blob = fs.readFileSync(fileName);\r\n expect(blob.length).greaterThan(5);\r\n\r\n expect(() => FontFile.createFromShxFontBlob({ familyName: \"brepdata1\", blob })).to.throw(\"Failed to read font file\");\r\n });\r\n });\r\n\r\n describe(\"createFromRscBlob\", () => {\r\n it(\"creates a valid font\", () => {\r\n const blob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\r\n const file = FontFile.createFromRscFontBlob({ familyName: \"ENGINEERING\", blob });\r\n expect(file.type).to.equal(FontType.Rsc);\r\n expect(file.isEmbeddable).to.be.true;\r\n expectFaces(file, [{ familyName: \"ENGINEERING\", isBold: false, isItalic: false }]);\r\n });\r\n\r\n it(\"throws on non-font data\", () => {\r\n const blob = new Uint8Array();\r\n expect(() => FontFile.createFromRscFontBlob({ familyName: \"not-a-font\", blob })).to.throw(\"Failed to read font file\");\r\n });\r\n });\r\n \r\n describe(\"TrueType fonts\", () => {\r\n describe(\"createFromTrueTypeFileName\", () => {\r\n it(\"throws on non-existent file\", () => {\r\n let fileName = IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\");\r\n expect(fs.existsSync(fileName)).to.be.true;\r\n fileName = `${fileName }no-existe`;\r\n expect(fs.existsSync(fileName)).to.be.false;\r\n expect(() => FontFile.createFromTrueTypeFileName(fileName)).to.throw(\"Failed to read font file\");\r\n });\r\n\r\n it(\"throws on non-font data\", () => {\r\n const fileName = IModelTestUtils.resolveAssetFile(\"brepdata1.json\");\r\n expect(fs.existsSync(fileName)).to.be.true;\r\n expect(() => FontFile.createFromTrueTypeFileName(fileName)).to.throw(\"Failed to read font file\");\r\n });\r\n\r\n it(\"reads faces\", () => {\r\n function expectTTFaces(expected: Array<[name: string, isBold?: boolean, isItalic?: boolean]>, fontName: string): void {\r\n const fileName = IModelTestUtils.resolveFontFile(fontName);\r\n const fontFile = FontFile.createFromTrueTypeFileName(fileName);\r\n expect(fontFile.type).to.equal(FontType.TrueType);\r\n\r\n const expectedFaces = expected.map((x) => { return { familyName: x[0], isBold: !!x[1], isItalic: !!x[2] } });\r\n expect(fontFile.faces.length).to.equal(expectedFaces.length);\r\n expect(fontFile.faces).to.deep.equal(expectedFaces);\r\n }\r\n\r\n expectTTFaces([ [\"Karla\"] ], \"Karla-MultipleEmbeddingRights.ttf\");\r\n expectTTFaces([ [\"Karla\"] ], \"Karla-Regular.ttf\");\r\n expectTTFaces([ [\"Karla-Preview-And-Print\"] ], \"Karla-Preview-And-Print.ttf\");\r\n expectTTFaces([ [\"Karla-Restricted\"] ], \"Karla-Restricted.ttf\");\r\n\r\n expectTTFaces([ [\"DejaVu Sans\"] ], \"DejaVuSans.ttf\");\r\n expectTTFaces([ [\"DejaVu Sans\", true] ], \"DejaVuSans-Bold.ttf\");\r\n expectTTFaces([ [\"DejaVu Sans Mono\"] ], \"DejaVuSansMono.ttf\");\r\n expectTTFaces([ [\"DejaVu Sans Mono\", true] ], \"DejaVuSansMono-Bold.ttf\");\r\n expectTTFaces([ [\"DejaVu Sans Mono\", false, true] ], \"DejaVuSansMono-Oblique.ttf\");\r\n expectTTFaces([ [\"DejaVu Sans Mono\", true, true] ], \"DejaVuSansMono-BoldOblique.ttf\");\r\n expectTTFaces([ [\"DejaVu Serif\"] ], \"DejaVuSerif.ttf\");\r\n expectTTFaces([ [\"DejaVu Serif\", true] ], \"DejaVuSerif-Bold.ttf\");\r\n\r\n expectTTFaces([\r\n [\"Sitka Small\"], [\"Sitka Text\"], [\"Sitka Subheading\"], [\"Sitka Heading\"], [\"Sitka Display\"], [\"Sitka Banner\"],\r\n ], \"Sitka.ttc\");\r\n });\r\n });\r\n \r\n describe(\"isEmbeddable\", () => {\r\n function expectEmbeddable(expected: boolean, fontName: string): void {\r\n const fileName = IModelTestUtils.resolveFontFile(fontName);\r\n const fontFile = FontFile.createFromTrueTypeFileName(fileName);\r\n expect(fontFile.isEmbeddable).to.equal(expected);\r\n }\r\n\r\n it(\"prohibits embedding of restricted and preview-and-print faces\", () => {\r\n expectEmbeddable(false, \"Karla-Restricted.ttf\");\r\n expectEmbeddable(false, \"Karla-Preview-And-Print.ttf\");\r\n\r\n expectEmbeddable(true, \"Karla-Regular.ttf\");\r\n\r\n expectEmbeddable(true, \"DejaVuSansMono.ttf\");\r\n expectEmbeddable(true, \"Sitka-Banner.ttf\");\r\n });\r\n\r\n it(\"uses the least restrictive embedding rights if multiple bits are set\", () => {\r\n expectEmbeddable(true, \"Karla-MultipleEmbeddingRights.ttf\");\r\n });\r\n });\r\n });\r\n})\r\n\r\ndescribe(\"FontFileImpl\", () => {\r\n it(\"produces canonical keys from faces\", () => {\r\n function expectKey(faces: IModelJsNative.FontFaceProps[], expected: string): void {\r\n const file = new CadFontFile(new Uint8Array(), FontType.Shx, faces);\r\n expect(file[_key]).to.equal(expected);\r\n }\r\n\r\n expectKey([{\r\n familyName: \"Arial\", faceName: \"regular\", subId: 1, type: FontType.Shx,\r\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":1}]`);\r\n\r\n expectKey([{\r\n subId: 1, faceName: \"regular\", type: FontType.Shx, familyName: \"Arial\",\r\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":1}]`);\r\n\r\n expectKey([{\r\n familyName: \"Arial\", faceName: \"regular\", subId: 2, type: FontType.Shx,\r\n }, {\r\n subId: 1, faceName: \"regular\", type: FontType.Shx, familyName: \"Arial\",\r\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":1},{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":2}]`);\r\n\r\n expectKey([{\r\n familyName: \"Arial\", faceName: \"regular\", subId: 2, type: FontType.Shx,\r\n }, {\r\n subId: 1, faceName: \"bolditalic\", type: FontType.Shx, familyName: \"Arial\",\r\n }, {\r\n familyName: \"Arial\", faceName: \"bold\", subId: 3, type: FontType.Shx,\r\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"bold\",\"type\":3,\"subId\":3},{\"familyName\":\"Arial\",\"faceName\":\"bolditalic\",\"type\":3,\"subId\":1},{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":2}]`);\r\n\r\n expectKey([{\r\n familyName: \"Consolas\", faceName: \"regular\", subId: 1, type: FontType.Shx,\r\n }, {\r\n faceName: \"italic\", subId: 2, type: FontType.Shx, familyName: \"Comic Sans\",\r\n }, {\r\n familyName: \"Arial\", faceName: \"regular\", subId: 0, type: FontType.Shx,\r\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":0},{\"familyName\":\"Comic Sans\",\"faceName\":\"italic\",\"type\":3,\"subId\":2},{\"familyName\":\"Consolas\",\"faceName\":\"regular\",\"type\":3,\"subId\":1}]`);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"FontFile.test.js","sourceRoot":"","sources":["../../../../src/test/font/FontFile.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 * as fs from \"fs\";\nimport { expect } from \"chai\";\nimport { FontFace, FontType } from \"@itwin/core-common\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { FontFile } from \"../../FontFile\";\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { CadFontFile } from \"../../internal/FontFileImpl\";\nimport { _key } from \"../../internal/Symbols\";\n\nfunction expectFaces(file: FontFile, expected: FontFace[]): void {\n const actual = Array.from(file.faces);\n expect(actual).to.deep.equal(expected);\n}\n\ndescribe(\"FontFile\", () => {\n describe(\"createFromShxBlob\", () => {\n it(\"creates a valid font\", () => {\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\n const blob = fs.readFileSync(fileName);\n\n const file = FontFile.createFromShxFontBlob({ familyName: \"Cdm\", blob });\n expect(file.type).to.equal(FontType.Shx);\n expect(file.isEmbeddable).to.be.true;\n expectFaces(file, [{ familyName: \"Cdm\", isBold: false, isItalic: false }])\n });\n\n it(\"throws on non-font data\", () => {\n const fileName = IModelTestUtils.resolveAssetFile(\"brepdata1.json\");\n expect(fs.existsSync(fileName)).to.be.true;\n\n const blob = fs.readFileSync(fileName);\n expect(blob.length).greaterThan(5);\n\n expect(() => FontFile.createFromShxFontBlob({ familyName: \"brepdata1\", blob })).to.throw(\"Failed to read font file\");\n });\n });\n\n describe(\"createFromRscBlob\", () => {\n it(\"creates a valid font\", () => {\n const blob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\n const file = FontFile.createFromRscFontBlob({ familyName: \"ENGINEERING\", blob });\n expect(file.type).to.equal(FontType.Rsc);\n expect(file.isEmbeddable).to.be.true;\n expectFaces(file, [{ familyName: \"ENGINEERING\", isBold: false, isItalic: false }]);\n });\n\n it(\"throws on non-font data\", () => {\n const blob = new Uint8Array();\n expect(() => FontFile.createFromRscFontBlob({ familyName: \"not-a-font\", blob })).to.throw(\"Failed to read font file\");\n });\n });\n \n describe(\"TrueType fonts\", () => {\n describe(\"createFromTrueTypeFileName\", () => {\n it(\"throws on non-existent file\", () => {\n let fileName = IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\");\n expect(fs.existsSync(fileName)).to.be.true;\n fileName = `${fileName }no-existe`;\n expect(fs.existsSync(fileName)).to.be.false;\n expect(() => FontFile.createFromTrueTypeFileName(fileName)).to.throw(\"Failed to read font file\");\n });\n\n it(\"throws on non-font data\", () => {\n const fileName = IModelTestUtils.resolveAssetFile(\"brepdata1.json\");\n expect(fs.existsSync(fileName)).to.be.true;\n expect(() => FontFile.createFromTrueTypeFileName(fileName)).to.throw(\"Failed to read font file\");\n });\n\n it(\"reads faces\", () => {\n function expectTTFaces(expected: Array<[name: string, isBold?: boolean, isItalic?: boolean]>, fontName: string): void {\n const fileName = IModelTestUtils.resolveFontFile(fontName);\n const fontFile = FontFile.createFromTrueTypeFileName(fileName);\n expect(fontFile.type).to.equal(FontType.TrueType);\n\n const expectedFaces = expected.map((x) => { return { familyName: x[0], isBold: !!x[1], isItalic: !!x[2] } });\n expect(fontFile.faces.length).to.equal(expectedFaces.length);\n expect(fontFile.faces).to.deep.equal(expectedFaces);\n }\n\n expectTTFaces([ [\"Karla\"] ], \"Karla-MultipleEmbeddingRights.ttf\");\n expectTTFaces([ [\"Karla\"] ], \"Karla-Regular.ttf\");\n expectTTFaces([ [\"Karla-Preview-And-Print\"] ], \"Karla-Preview-And-Print.ttf\");\n expectTTFaces([ [\"Karla-Restricted\"] ], \"Karla-Restricted.ttf\");\n\n expectTTFaces([ [\"DejaVu Sans\"] ], \"DejaVuSans.ttf\");\n expectTTFaces([ [\"DejaVu Sans\", true] ], \"DejaVuSans-Bold.ttf\");\n expectTTFaces([ [\"DejaVu Sans Mono\"] ], \"DejaVuSansMono.ttf\");\n expectTTFaces([ [\"DejaVu Sans Mono\", true] ], \"DejaVuSansMono-Bold.ttf\");\n expectTTFaces([ [\"DejaVu Sans Mono\", false, true] ], \"DejaVuSansMono-Oblique.ttf\");\n expectTTFaces([ [\"DejaVu Sans Mono\", true, true] ], \"DejaVuSansMono-BoldOblique.ttf\");\n expectTTFaces([ [\"DejaVu Serif\"] ], \"DejaVuSerif.ttf\");\n expectTTFaces([ [\"DejaVu Serif\", true] ], \"DejaVuSerif-Bold.ttf\");\n\n expectTTFaces([\n [\"Sitka Small\"], [\"Sitka Text\"], [\"Sitka Subheading\"], [\"Sitka Heading\"], [\"Sitka Display\"], [\"Sitka Banner\"],\n ], \"Sitka.ttc\");\n });\n });\n \n describe(\"isEmbeddable\", () => {\n function expectEmbeddable(expected: boolean, fontName: string): void {\n const fileName = IModelTestUtils.resolveFontFile(fontName);\n const fontFile = FontFile.createFromTrueTypeFileName(fileName);\n expect(fontFile.isEmbeddable).to.equal(expected);\n }\n\n it(\"prohibits embedding of restricted and preview-and-print faces\", () => {\n expectEmbeddable(false, \"Karla-Restricted.ttf\");\n expectEmbeddable(false, \"Karla-Preview-And-Print.ttf\");\n\n expectEmbeddable(true, \"Karla-Regular.ttf\");\n\n expectEmbeddable(true, \"DejaVuSansMono.ttf\");\n expectEmbeddable(true, \"Sitka-Banner.ttf\");\n });\n\n it(\"uses the least restrictive embedding rights if multiple bits are set\", () => {\n expectEmbeddable(true, \"Karla-MultipleEmbeddingRights.ttf\");\n });\n });\n });\n})\n\ndescribe(\"FontFileImpl\", () => {\n it(\"produces canonical keys from faces\", () => {\n function expectKey(faces: IModelJsNative.FontFaceProps[], expected: string): void {\n const file = new CadFontFile(new Uint8Array(), FontType.Shx, faces);\n expect(file[_key]).to.equal(expected);\n }\n\n expectKey([{\n familyName: \"Arial\", faceName: \"regular\", subId: 1, type: FontType.Shx,\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":1}]`);\n\n expectKey([{\n subId: 1, faceName: \"regular\", type: FontType.Shx, familyName: \"Arial\",\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":1}]`);\n\n expectKey([{\n familyName: \"Arial\", faceName: \"regular\", subId: 2, type: FontType.Shx,\n }, {\n subId: 1, faceName: \"regular\", type: FontType.Shx, familyName: \"Arial\",\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":1},{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":2}]`);\n\n expectKey([{\n familyName: \"Arial\", faceName: \"regular\", subId: 2, type: FontType.Shx,\n }, {\n subId: 1, faceName: \"bolditalic\", type: FontType.Shx, familyName: \"Arial\",\n }, {\n familyName: \"Arial\", faceName: \"bold\", subId: 3, type: FontType.Shx,\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"bold\",\"type\":3,\"subId\":3},{\"familyName\":\"Arial\",\"faceName\":\"bolditalic\",\"type\":3,\"subId\":1},{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":2}]`);\n\n expectKey([{\n familyName: \"Consolas\", faceName: \"regular\", subId: 1, type: FontType.Shx,\n }, {\n faceName: \"italic\", subId: 2, type: FontType.Shx, familyName: \"Comic Sans\",\n }, {\n familyName: \"Arial\", faceName: \"regular\", subId: 0, type: FontType.Shx,\n }], `[{\"familyName\":\"Arial\",\"faceName\":\"regular\",\"type\":3,\"subId\":0},{\"familyName\":\"Comic Sans\",\"faceName\":\"italic\",\"type\":3,\"subId\":2},{\"familyName\":\"Consolas\",\"faceName\":\"regular\",\"type\":3,\"subId\":1}]`);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelDbFonts.test.js","sourceRoot":"","sources":["../../../../src/test/font/IModelDbFonts.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAY,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAY,QAAQ,EAAwB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,EAAY,CAAC;IAEjB,MAAM,eAAe;QACZ,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;QAExB,MAAM,CAAC,KAAK;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACxB,CAAC;QAEM,MAAM,KAAK,aAAa;YAC7B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,GAAG,GAAG;gBACV,aAAa,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE;gBACjD,yBAAyB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE;aAClE,CAAC;YAED,GAAW,CAAC,WAAW,GAAG,GAAG,CAAC;YAC/B,OAAO,GAAG,CAAC;QACb,CAAC;QAEM,MAAM,CAAC,KAAK,KAAK,CAAC;;IAI3B,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEhC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,WAAW,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,eAAsB,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtH,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,cAAc,EAAE,CAAC;QACpB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,WAAW,CAAC,eAAe,GAAG,SAAS,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,YAAY,CAAC,QAAgB;QACpC,OAAO,QAAQ,CAAC,0BAA0B,CAAC,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,SAAS,YAAY,CAAC,UAAkB,EAAE,QAAsD,EAAE,KAAK,GAAG,CAAC;QACzG,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClE,CAAC;IAED,SAAS,uBAAuB,CAAC,QAA+C;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC5D,MAAM,eAAe,GAA0C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAE/F,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhD,MAAM,aAAa,GAAsB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACpB,OAAO;oBACL,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;oBACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBACxC,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAE5B,MAAM,aAAa,GAA0C,EAAE,CAAC;YAEhE,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,aAA6C;gBACvF,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAClC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;oBAC/E,UAAU,EAAE,KAAK;oBACjB,IAAI,EAAE,QAAQ,CAAC,GAAG;oBAClB,QAAQ,EAAE,SAAS;oBACnB,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC,CAAC;YAEJ,MAAM,YAAY,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YAE1F,MAAM,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;gBAC5C,YAAY,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1C,YAAY,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3C,YAAY,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3C,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;gBACzC,YAAY,CAAC,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC9C,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;aACzC,CAAC,CAAC;YAEH,MAAM,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,YAAY,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAE/F,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAyB;gBACrC,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,GAAG;aACf,CAAC;YACF,MAAM,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;oBAC1G,UAAU,EAAE,aAAa;oBACzB,IAAI,EAAE,QAAQ,CAAC,GAAG;oBAClB,QAAQ,EAAE,SAAS;oBACnB,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE;wBACR,GAAG,QAAQ;wBACX,wCAAwC;wBACxC,QAAQ,EAAE,GAAG;wBACb,QAAQ,EAAE,CAAC,CAAC;qBACb;iBACF,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAClE,uBAAuB,CAAC,CAAC;oBACvB,YAAY,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC1C,YAAY,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3C,YAAY,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3C,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;oBACzC,YAAY,CAAC,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC9C,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;iBACzC,CAAC,CAAC,CAAC;YAEJ,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAClE,uBAAuB,CAAC,CAAC;oBACvB,YAAY,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC1C,YAAY,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3C,YAAY,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC3C,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;oBACzC,YAAY,CAAC,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC9C,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;iBACzC,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC;YACrJ,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC;QAC9J,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAE9F,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC/G,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACjF,CAAC;YAED,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;YACtG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;YACtG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;YAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YAE/C,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/F,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9E,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAE/G,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAEtC,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAEnD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAEhD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAErC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAEhD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhE,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;YACnD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAElC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAElC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;YAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE/B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAErC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrF,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE9B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;YACnG,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAClF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAExD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEvD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;YACnG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAErE,SAAS,cAAc,CAAC,QAAkB,EAAE,IAA8B;gBACxE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1B,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAA;YACxD,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { expect } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as sinon from \"sinon\";\r\nimport { BriefcaseDb, IModelDb } from \"../../IModelDb\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { FontFace, FontType, RscFontEncodingProps } from \"@itwin/core-common\";\r\nimport { FontFile } from \"../../FontFile\";\r\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { _faceProps, _getData } from \"../../internal/Symbols\";\r\nimport { CodeService } from \"../../CodeService\";\r\nimport { HubMock } from \"../../HubMock\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { BriefcaseManager } from \"../../BriefcaseManager\";\r\nimport { QueryMappedFamiliesArgs } from \"../../IModelDbFonts\";\r\n\r\ndescribe(\"IModelDbFonts\", () => {\r\n let db: IModelDb;\r\n\r\n class MockCodeService {\r\n public static enable = false;\r\n public static nextFaceDataId = 10;\r\n public static nextFontId = 100;\r\n\r\n public static reset() {\r\n this.enable = false;\r\n this.nextFaceDataId = 10;\r\n this.nextFontId = 100;\r\n }\r\n\r\n public static get internalCodes() {\r\n if (!MockCodeService.enable) {\r\n return undefined;\r\n }\r\n\r\n const obj = {\r\n reserveFontId: () => MockCodeService.nextFontId++,\r\n reserveEmbeddedFaceDataId: () => MockCodeService.nextFaceDataId++,\r\n };\r\n\r\n (obj as any).writeLocker = obj;\r\n return obj;\r\n }\r\n\r\n public static close() { }\r\n\r\n }\r\n\r\n before(() => HubMock.startup(\"IModelDbFontsTest\", KnownTestLocations.outputDir));\r\n after(() => HubMock.shutdown());\r\n\r\n beforeEach(async () => {\r\n CodeService.createForIModel = () => MockCodeService as any;\r\n const iModelId = await HubMock.createNewIModel({ iModelName: \"IModelDbFontsTest\", iTwinId: HubMock.iTwinId });\r\n const bcProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test\", iTwinId: HubMock.iTwinId, iModelId });\r\n db = await BriefcaseDb.open({ fileName: bcProps.fileName});\r\n });\r\n\r\n afterEach(() => {\r\n db.abandonChanges();\r\n db.close();\r\n MockCodeService.reset();\r\n CodeService.createForIModel = undefined;\r\n });\r\n\r\n function createTTFile(fontName: string): FontFile {\r\n return FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(fontName));\r\n }\r\n\r\n function createTTFace(familyName: string, faceName: \"regular\" | \"bold\" | \"italic\" | \"bolditalic\", subId = 0): IModelJsNative.FontFaceProps {\r\n return { familyName, faceName, type: FontType.TrueType, subId };\r\n }\r\n\r\n function expectEmbeddedFontFiles(expected: Array<IModelJsNative.FontFaceProps[]>) {\r\n const fonts = Array.from(db.fonts.queryEmbeddedFontFiles());\r\n const actualFaceProps: Array<IModelJsNative.FontFaceProps[]> = fonts.map((x) => x[_faceProps]);\r\n\r\n expect(actualFaceProps).to.deep.equal(expected);\r\n\r\n const expectedFaces: Array<FontFace[]> = expected.map((list) => {\r\n return list.map((x) => {\r\n return {\r\n familyName: x.familyName,\r\n isBold: x.faceName.startsWith(\"bold\"),\r\n isItalic: x.faceName.endsWith(\"italic\"),\r\n };\r\n });\r\n });\r\n\r\n const actualFaces = fonts.map((x) => x.faces);\r\n expect(actualFaces).to.deep.equal(expectedFaces);\r\n }\r\n\r\n describe(\"embedFontFile\", () => {\r\n it(\"embeds font files\", async () => {\r\n expectEmbeddedFontFiles([]);\r\n\r\n const expectedFiles: Array<IModelJsNative.FontFaceProps[]> = [];\r\n \r\n async function embedAndTest(file: FontFile, expectedFaces: IModelJsNative.FontFaceProps[]): Promise<void> {\r\n await db.fonts.embedFontFile({ file });\r\n expectedFiles.push(expectedFaces);\r\n expectEmbeddedFontFiles(expectedFiles);\r\n }\r\n\r\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\r\n const blob = fs.readFileSync(fileName);\r\n await embedAndTest(FontFile.createFromShxFontBlob({ blob, familyName: \"Cdm\" }), [{\r\n familyName: \"Cdm\",\r\n type: FontType.Shx,\r\n faceName: \"regular\",\r\n subId: 0,\r\n }]);\r\n\r\n await embedAndTest(createTTFile(\"Karla-Regular.ttf\"), [createTTFace(\"Karla\", \"regular\")]);\r\n\r\n await embedAndTest(createTTFile(\"Sitka.ttc\"), [\r\n createTTFace(\"Sitka Banner\", \"regular\", 5),\r\n createTTFace(\"Sitka Display\", \"regular\", 4),\r\n createTTFace(\"Sitka Heading\", \"regular\", 3),\r\n createTTFace(\"Sitka Small\", \"regular\", 0),\r\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\r\n createTTFace(\"Sitka Text\", \"regular\", 1),\r\n ]);\r\n\r\n await embedAndTest(createTTFile(\"DejaVuSans.ttf\"), [createTTFace(\"DejaVu Sans\", \"regular\")]);\r\n await embedAndTest(createTTFile(\"DejaVuSans-Bold.ttf\"), [createTTFace(\"DejaVu Sans\", \"bold\")]);\r\n\r\n const rscBlob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\r\n const encoding: RscFontEncodingProps = {\r\n degree: 5,\r\n plusMinus: 100,\r\n };\r\n await embedAndTest(FontFile.createFromRscFontBlob({ blob: rscBlob, familyName: \"ENGINEERING\", encoding }), [{\r\n familyName: \"ENGINEERING\",\r\n type: FontType.Rsc,\r\n faceName: \"regular\",\r\n subId: 0,\r\n encoding: {\r\n ...encoding,\r\n // omitted properties get default values\r\n diameter: 216,\r\n codePage: -1,\r\n }\r\n }]);\r\n });\r\n\r\n it(\"is a no-op if file is already embedded\", async () => {\r\n expectEmbeddedFontFiles([]);\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\r\n expectEmbeddedFontFiles([[\r\n createTTFace(\"Sitka Banner\", \"regular\", 5),\r\n createTTFace(\"Sitka Display\", \"regular\", 4),\r\n createTTFace(\"Sitka Heading\", \"regular\", 3),\r\n createTTFace(\"Sitka Small\", \"regular\", 0),\r\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\r\n createTTFace(\"Sitka Text\", \"regular\", 1),\r\n ]]);\r\n\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\r\n expectEmbeddedFontFiles([[\r\n createTTFace(\"Sitka Banner\", \"regular\", 5),\r\n createTTFace(\"Sitka Display\", \"regular\", 4),\r\n createTTFace(\"Sitka Heading\", \"regular\", 3),\r\n createTTFace(\"Sitka Small\", \"regular\", 0),\r\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\r\n createTTFace(\"Sitka Text\", \"regular\", 1),\r\n ]]);\r\n });\r\n\r\n it(\"throws if font is not embeddable\", async () => {\r\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Restricted.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\r\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Preview-And-Print.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\r\n });\r\n\r\n it(\"allocates font Ids unless otherwise specified\", async () => {\r\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\") });\r\n expect(db.fonts.findId({ name: \"DejaVu Sans\", type: FontType.TrueType })).not.to.be.undefined;\r\n\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\r\n const sitkaFamilies = [\"Banner\", \"Display\", \"Heading\", \"Small\", \"Subheading\", \"Text\"].map((x) => `Sitka ${x}`);\r\n for (const name of sitkaFamilies) {\r\n expect(db.fonts.findId({ name, type: FontType.TrueType })).not.to.be.undefined;\r\n }\r\n\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\r\n expect(db.fonts.findId({ name: \"Karla\", type: FontType.TrueType })).to.be.undefined;\r\n });\r\n\r\n it(\"requires schema lock if CodeService is not configured\", async () => {\r\n const spy = sinon.spy(db, \"acquireSchemaLock\");\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\r\n expect(spy.callCount).to.equal(1);\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\r\n expect(spy.callCount).to.equal(2);\r\n });\r\n\r\n it(\"obtains face data Ids from CodeService if configured\", async () => {\r\n MockCodeService.enable = true;\r\n const spy = sinon.spy(db, \"acquireSchemaLock\");\r\n\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\r\n \r\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\r\n\r\n expect(spy.callCount).to.equal(0);\r\n expect(MockCodeService.nextFaceDataId).to.equal(12);\r\n });\r\n\r\n it(\"round-trips font data\", async () => {\r\n const inputData = fs.readFileSync(IModelTestUtils.resolveFontFile(\"Cdm.shx\"));\r\n await db.fonts.embedFontFile({ file: FontFile.createFromShxFontBlob({ blob: inputData, familyName: \"Cdm\" }) });\r\n\r\n const embeddedFiles = Array.from(db.fonts.queryEmbeddedFontFiles());\r\n expect(embeddedFiles.length).to.equal(1);\r\n const embeddedFile = embeddedFiles[0];\r\n\r\n const embeddedData = embeddedFile[_getData]();\r\n expect(Array.from(embeddedData)).to.deep.equal(Array.from(inputData));\r\n });\r\n });\r\n\r\n describe(\"acquireId\", () => {\r\n it(\"assigns font Ids\", async () => {\r\n expect(db.fonts.findDescriptor(1)).to.be.undefined;\r\n\r\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\r\n expect(db.fonts.findId(cdmShx)).to.be.undefined;\r\n\r\n const cdmShxId = await db.fonts.acquireId(cdmShx);\r\n expect(cdmShxId).to.equal(1);\r\n\r\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\r\n expect(cdmShxId2).to.equal(cdmShxId);\r\n\r\n expect(db.fonts.findDescriptor(cdmShxId)).to.deep.equal(cdmShx);\r\n expect(db.fonts.findId(cdmShx)).to.equal(cdmShxId);\r\n\r\n const cdmRsc = { name: \"Cdm\", type: FontType.Rsc };\r\n expect(db.fonts.findId(cdmRsc)).to.be.undefined;\r\n\r\n const cdmRscId = await db.fonts.acquireId(cdmRsc);\r\n expect(cdmRscId).to.equal(2);\r\n \r\n expect(db.fonts.findId(cdmRsc)).to.equal(cdmRscId);\r\n expect(db.fonts.findDescriptor(cdmRscId)).to.deep.equal(cdmRsc);\r\n\r\n const arial = { name: \"Arial\", type: FontType.TrueType };\r\n const arialId = await db.fonts.acquireId(arial);\r\n expect(arialId).to.equal(3);\r\n expect(db.fonts.findId(arial)).to.equal(arialId);\r\n expect(db.fonts.findDescriptor(arialId)).to.deep.equal(arial);\r\n });\r\n\r\n it(\"requires schema lock if CodeService is not configured\", async () => {\r\n const spy = sinon.spy(db, \"acquireSchemaLock\");\r\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\r\n await db.fonts.acquireId(cdmShx);\r\n expect(spy.callCount).to.equal(1);\r\n\r\n await db.fonts.acquireId(cdmShx);\r\n expect(spy.callCount).to.equal(1);\r\n\r\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n expect(spy.callCount).to.equal(2);\r\n });\r\n\r\n it(\"acquires font Ids from CodeService if configured\", async () => {\r\n MockCodeService.enable = true;\r\n const spy = sinon.spy(db, \"acquireSchemaLock\");\r\n\r\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\r\n const cdmShxId = await db.fonts.acquireId(cdmShx);\r\n expect(cdmShxId).to.equal(100);\r\n\r\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\r\n expect(cdmShxId2).to.equal(cdmShxId);\r\n\r\n const arialId = await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n expect(arialId).to.equal(101);\r\n\r\n expect(spy.callCount).to.equal(0);\r\n });\r\n });\r\n \r\n describe(\"findId\", () => {\r\n it(\"finds exact match by name and type, or first match by type if only name is supplied\", async () => {\r\n const shx = await db.fonts.acquireId({ name: \"Font\", type: FontType.Shx });\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType})).to.be.undefined;\r\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(shx);\r\n \r\n const tt = await db.fonts.acquireId({ name: \"Font\", type: FontType.TrueType });\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\r\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\r\n\r\n const rsc = await db.fonts.acquireId({ name: \"Font\", type: FontType.Rsc });\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.equal(rsc);\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\r\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\r\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\r\n });\r\n });\r\n\r\n describe(\"queryMappedFamilies\", () => {\r\n it(\"omits entries with no embedded face data by default\", async () => {\r\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\") });\r\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\"), skipFontIdAllocation: true });\r\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\r\n\r\n function expectFamilies(expected: string[], args?: QueryMappedFamiliesArgs): void {\r\n const actual = Array.from(db.fonts.queryMappedFamilies(args)).map((x) => x.name).sort();\r\n expect(actual).to.deep.equal(expected.sort());\r\n }\r\n\r\n expectFamilies([\"Karla\"]);\r\n expectFamilies([\"Karla\"], { includeNonEmbedded: false })\r\n expectFamilies([\"Arial\", \"Karla\"], { includeNonEmbedded: true });\r\n });\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelDbFonts.test.js","sourceRoot":"","sources":["../../../../src/test/font/IModelDbFonts.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 { expect } from \"chai\";\nimport * as fs from \"fs\";\nimport * as sinon from \"sinon\";\nimport { BriefcaseDb, IModelDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { FontFace, FontType, RscFontEncodingProps } from \"@itwin/core-common\";\nimport { FontFile } from \"../../FontFile\";\nimport type { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _faceProps, _getData } from \"../../internal/Symbols\";\nimport { CodeService } from \"../../CodeService\";\nimport { HubMock } from \"../../HubMock\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { BriefcaseManager } from \"../../BriefcaseManager\";\nimport { QueryMappedFamiliesArgs } from \"../../IModelDbFonts\";\n\ndescribe(\"IModelDbFonts\", () => {\n let db: IModelDb;\n\n class MockCodeService {\n public static enable = false;\n public static nextFaceDataId = 10;\n public static nextFontId = 100;\n\n public static reset() {\n this.enable = false;\n this.nextFaceDataId = 10;\n this.nextFontId = 100;\n }\n\n public static get internalCodes() {\n if (!MockCodeService.enable) {\n return undefined;\n }\n\n const obj = {\n reserveFontId: () => MockCodeService.nextFontId++,\n reserveEmbeddedFaceDataId: () => MockCodeService.nextFaceDataId++,\n };\n\n (obj as any).writeLocker = obj;\n return obj;\n }\n\n public static close() { }\n\n }\n\n before(() => HubMock.startup(\"IModelDbFontsTest\", KnownTestLocations.outputDir));\n after(() => HubMock.shutdown());\n\n beforeEach(async () => {\n CodeService.createForIModel = () => MockCodeService as any;\n const iModelId = await HubMock.createNewIModel({ iModelName: \"IModelDbFontsTest\", iTwinId: HubMock.iTwinId });\n const bcProps = await BriefcaseManager.downloadBriefcase({ accessToken: \"test\", iTwinId: HubMock.iTwinId, iModelId });\n db = await BriefcaseDb.open({ fileName: bcProps.fileName});\n });\n\n afterEach(() => {\n db.abandonChanges();\n db.close();\n MockCodeService.reset();\n CodeService.createForIModel = undefined;\n });\n\n function createTTFile(fontName: string): FontFile {\n return FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(fontName));\n }\n\n function createTTFace(familyName: string, faceName: \"regular\" | \"bold\" | \"italic\" | \"bolditalic\", subId = 0): IModelJsNative.FontFaceProps {\n return { familyName, faceName, type: FontType.TrueType, subId };\n }\n\n function expectEmbeddedFontFiles(expected: Array<IModelJsNative.FontFaceProps[]>) {\n const fonts = Array.from(db.fonts.queryEmbeddedFontFiles());\n const actualFaceProps: Array<IModelJsNative.FontFaceProps[]> = fonts.map((x) => x[_faceProps]);\n\n expect(actualFaceProps).to.deep.equal(expected);\n\n const expectedFaces: Array<FontFace[]> = expected.map((list) => {\n return list.map((x) => {\n return {\n familyName: x.familyName,\n isBold: x.faceName.startsWith(\"bold\"),\n isItalic: x.faceName.endsWith(\"italic\"),\n };\n });\n });\n\n const actualFaces = fonts.map((x) => x.faces);\n expect(actualFaces).to.deep.equal(expectedFaces);\n }\n\n describe(\"embedFontFile\", () => {\n it(\"embeds font files\", async () => {\n expectEmbeddedFontFiles([]);\n\n const expectedFiles: Array<IModelJsNative.FontFaceProps[]> = [];\n \n async function embedAndTest(file: FontFile, expectedFaces: IModelJsNative.FontFaceProps[]): Promise<void> {\n await db.fonts.embedFontFile({ file });\n expectedFiles.push(expectedFaces);\n expectEmbeddedFontFiles(expectedFiles);\n }\n\n const fileName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\n const blob = fs.readFileSync(fileName);\n await embedAndTest(FontFile.createFromShxFontBlob({ blob, familyName: \"Cdm\" }), [{\n familyName: \"Cdm\",\n type: FontType.Shx,\n faceName: \"regular\",\n subId: 0,\n }]);\n\n await embedAndTest(createTTFile(\"Karla-Regular.ttf\"), [createTTFace(\"Karla\", \"regular\")]);\n\n await embedAndTest(createTTFile(\"Sitka.ttc\"), [\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]);\n\n await embedAndTest(createTTFile(\"DejaVuSans.ttf\"), [createTTFace(\"DejaVu Sans\", \"regular\")]);\n await embedAndTest(createTTFile(\"DejaVuSans-Bold.ttf\"), [createTTFace(\"DejaVu Sans\", \"bold\")]);\n\n const rscBlob = fs.readFileSync(IModelTestUtils.resolveFontFile(\"ENGINEERING.bin\"));\n const encoding: RscFontEncodingProps = {\n degree: 5,\n plusMinus: 100,\n };\n await embedAndTest(FontFile.createFromRscFontBlob({ blob: rscBlob, familyName: \"ENGINEERING\", encoding }), [{\n familyName: \"ENGINEERING\",\n type: FontType.Rsc,\n faceName: \"regular\",\n subId: 0,\n encoding: {\n ...encoding,\n // omitted properties get default values\n diameter: 216,\n codePage: -1,\n }\n }]);\n });\n\n it(\"is a no-op if file is already embedded\", async () => {\n expectEmbeddedFontFiles([]);\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\") });\n expectEmbeddedFontFiles([[\n createTTFace(\"Sitka Banner\", \"regular\", 5),\n createTTFace(\"Sitka Display\", \"regular\", 4),\n createTTFace(\"Sitka Heading\", \"regular\", 3),\n createTTFace(\"Sitka Small\", \"regular\", 0),\n createTTFace(\"Sitka Subheading\", \"regular\", 2),\n createTTFace(\"Sitka Text\", \"regular\", 1),\n ]]);\n });\n\n it(\"throws if font is not embeddable\", async () => {\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Restricted.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n await expect(db.fonts.embedFontFile({ file: createTTFile(\"Karla-Preview-And-Print.ttf\") })).to.eventually.be.rejectedWith(\"Font does not permit embedding\");\n });\n\n it(\"allocates font Ids unless otherwise specified\", async () => {\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\") });\n expect(db.fonts.findId({ name: \"DejaVu Sans\", type: FontType.TrueType })).not.to.be.undefined;\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n const sitkaFamilies = [\"Banner\", \"Display\", \"Heading\", \"Small\", \"Subheading\", \"Text\"].map((x) => `Sitka ${x}`);\n for (const name of sitkaFamilies) {\n expect(db.fonts.findId({ name, type: FontType.TrueType })).not.to.be.undefined;\n }\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(db.fonts.findId({ name: \"Karla\", type: FontType.TrueType })).to.be.undefined;\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n expect(spy.callCount).to.equal(1);\n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"obtains face data Ids from CodeService if configured\", async () => {\n MockCodeService.enable = true;\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\"), skipFontIdAllocation: true });\n \n await db.fonts.embedFontFile({ file: createTTFile(\"Sitka.ttc\"), skipFontIdAllocation: false });\n\n expect(spy.callCount).to.equal(0);\n expect(MockCodeService.nextFaceDataId).to.equal(12);\n });\n\n it(\"round-trips font data\", async () => {\n const inputData = fs.readFileSync(IModelTestUtils.resolveFontFile(\"Cdm.shx\"));\n await db.fonts.embedFontFile({ file: FontFile.createFromShxFontBlob({ blob: inputData, familyName: \"Cdm\" }) });\n\n const embeddedFiles = Array.from(db.fonts.queryEmbeddedFontFiles());\n expect(embeddedFiles.length).to.equal(1);\n const embeddedFile = embeddedFiles[0];\n\n const embeddedData = embeddedFile[_getData]();\n expect(Array.from(embeddedData)).to.deep.equal(Array.from(inputData));\n });\n });\n\n describe(\"acquireId\", () => {\n it(\"assigns font Ids\", async () => {\n expect(db.fonts.findDescriptor(1)).to.be.undefined;\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n expect(db.fonts.findId(cdmShx)).to.be.undefined;\n\n const cdmShxId = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(1);\n\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n expect(db.fonts.findDescriptor(cdmShxId)).to.deep.equal(cdmShx);\n expect(db.fonts.findId(cdmShx)).to.equal(cdmShxId);\n\n const cdmRsc = { name: \"Cdm\", type: FontType.Rsc };\n expect(db.fonts.findId(cdmRsc)).to.be.undefined;\n\n const cdmRscId = await db.fonts.acquireId(cdmRsc);\n expect(cdmRscId).to.equal(2);\n \n expect(db.fonts.findId(cdmRsc)).to.equal(cdmRscId);\n expect(db.fonts.findDescriptor(cdmRscId)).to.deep.equal(cdmRsc);\n\n const arial = { name: \"Arial\", type: FontType.TrueType };\n const arialId = await db.fonts.acquireId(arial);\n expect(arialId).to.equal(3);\n expect(db.fonts.findId(arial)).to.equal(arialId);\n expect(db.fonts.findDescriptor(arialId)).to.deep.equal(arial);\n });\n\n it(\"requires schema lock if CodeService is not configured\", async () => {\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n await db.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await db.fonts.acquireId(cdmShx);\n expect(spy.callCount).to.equal(1);\n\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(spy.callCount).to.equal(2);\n });\n\n it(\"acquires font Ids from CodeService if configured\", async () => {\n MockCodeService.enable = true;\n const spy = sinon.spy(db, \"acquireSchemaLock\");\n\n const cdmShx = { name: \"Cdm\", type: FontType.Shx };\n const cdmShxId = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId).to.equal(100);\n\n const cdmShxId2 = await db.fonts.acquireId(cdmShx);\n expect(cdmShxId2).to.equal(cdmShxId);\n\n const arialId = await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n expect(arialId).to.equal(101);\n\n expect(spy.callCount).to.equal(0);\n });\n });\n \n describe(\"findId\", () => {\n it(\"finds exact match by name and type, or first match by type if only name is supplied\", async () => {\n const shx = await db.fonts.acquireId({ name: \"Font\", type: FontType.Shx });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx })).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(shx);\n \n const tt = await db.fonts.acquireId({ name: \"Font\", type: FontType.TrueType });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.be.undefined;\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\n\n const rsc = await db.fonts.acquireId({ name: \"Font\", type: FontType.Rsc });\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Rsc})).to.equal(rsc);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.TrueType })).to.equal(tt);\n expect(db.fonts.findId({ name: \"Font\", type: FontType.Shx})).to.equal(shx);\n expect(db.fonts.findId({ name: \"Font\" })).to.equal(tt);\n });\n });\n\n describe(\"queryMappedFamilies\", () => {\n it(\"omits entries with no embedded face data by default\", async () => {\n await db.fonts.embedFontFile({ file: createTTFile(\"Karla-Regular.ttf\") });\n await db.fonts.embedFontFile({ file: createTTFile(\"DejaVuSans.ttf\"), skipFontIdAllocation: true });\n await db.fonts.acquireId({ name: \"Arial\", type: FontType.TrueType });\n\n function expectFamilies(expected: string[], args?: QueryMappedFamiliesArgs): void {\n const actual = Array.from(db.fonts.queryMappedFamilies(args)).map((x) => x.name).sort();\n expect(actual).to.deep.equal(expected.sort());\n }\n\n expectFamilies([\"Karla\"]);\n expectFamilies([\"Karla\"], { includeNonEmbedded: false })\n expectFamilies([\"Arial\", \"Karla\"], { includeNonEmbedded: true });\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\r\nimport { Element } from \"../../Element\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { HubMock } from \"../../HubMock\";\r\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\r\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\r\n\r\ndescribe(\"BriefcaseManager\", async () => {\r\n const testITwinId: string = Guid.createValue();\r\n const managerAccessToken = \"manager mock token\";\r\n const accessToken = \"access token\";\r\n\r\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\r\n afterEach(() => HubMock.shutdown());\r\n\r\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\r\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\r\n let iModelName = \"iModel Name With Spaces\";\r\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n const args = { accessToken, iTwinId: testITwinId, iModelId };\r\n assert.isDefined(iModelId);\r\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n\r\n iModelName = \"iModel Name With :\\/<>?* Characters\";\r\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n assert.isDefined(iModelId);\r\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n\r\n iModelName = \"iModel Name Thats Excessively Long \" +\r\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\r\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\r\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\r\n // Note: iModelHub does not accept a name that's longer than 255 characters.\r\n assert.equal(255, iModelName.length);\r\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\r\n assert.isDefined(iModelId);\r\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.isDefined(iModel);\r\n iModel.close();\r\n HubMock.shutdown();\r\n });\r\n\r\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\r\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\r\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\r\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\r\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\r\n assert.equal(BriefcaseIdValue.Unassigned, iModel1[_nativeDb].getBriefcaseId(), \"checkpoint should be 0\");\r\n\r\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\r\n\r\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\r\n\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\r\n HubMock.shutdown();\r\n });\r\n\r\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\r\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\r\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\r\n\r\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\r\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseId1 = iModel1.briefcaseId;\r\n iModel1.close(); // Keeps the briefcase by default\r\n\r\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseId3 = iModel3.briefcaseId;\r\n assert.strictEqual(briefcaseId3, briefcaseId1);\r\n\r\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\r\n HubMock.shutdown();\r\n });\r\n\r\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\r\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\r\n const userToken1 = \"manager token\";\r\n const userToken2 = \"super manager token\";\r\n\r\n // User1 creates an iModel on the Hub\r\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\r\n await testUtility.createTestIModel();\r\n\r\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\r\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\r\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\r\n const changesetPullAndPush = iModelPullAndPush.changeset;\r\n iModelPullAndPush.close();\r\n\r\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\r\n const changesetPullOnly = iModelPullOnly.changeset;\r\n iModelPullOnly.close();\r\n\r\n // User1 pushes a change set\r\n await testUtility.pushTestChangeSet();\r\n\r\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\r\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\r\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\r\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\r\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\r\n\r\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\r\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\r\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\r\n const changesetPullOnly2 = iModelPullOnly2.changeset;\r\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\r\n\r\n // Delete iModel from the Hub and disk\r\n await testUtility.deleteTestIModel();\r\n HubMock.shutdown();\r\n });\r\n\r\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\r\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\r\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\r\n const userToken2 = \"super manager token\"; // User2 is used for the test\r\n\r\n // User1 creates an iModel on the Hub\r\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\r\n await testUtility.createTestIModel();\r\n\r\n // User2 opens the iModel pullAndPush and is able to edit and save changes\r\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\r\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n assert.exists(iModelPullAndPush);\r\n const briefcaseId = iModelPullAndPush.briefcaseId;\r\n const pathname = iModelPullAndPush.pathName;\r\n\r\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\r\n rootEl.userLabel = `${rootEl.userLabel}changed`;\r\n iModelPullAndPush.elements.updateElement(rootEl.toJSON());\r\n\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n iModelPullAndPush.saveChanges();\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n iModelPullAndPush.close();\r\n\r\n // User2 should be able to re-open the iModel pullAndPush again\r\n // - the changes will still be there\r\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const changesetPullAndPush = iModelPullAndPush.changeset;\r\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\r\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n // User1 pushes a change set\r\n await testUtility.pushTestChangeSet();\r\n\r\n // User2 should be able to re-open the iModel\r\n await HubWrappers.openBriefcaseUsingRpc(args);\r\n\r\n // User2 closes and reopens the iModel pullAndPush as of the newer version\r\n // - the changes will still be there, AND\r\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\r\n iModelPullAndPush.close();\r\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\r\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\r\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\r\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\r\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\r\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\r\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\r\n\r\n // User2 should be able to push the changes now\r\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\r\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\r\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\r\n\r\n // Delete iModel from the Hub and disk\r\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\r\n await testUtility.deleteTestIModel();\r\n HubMock.shutdown();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"BriefcaseManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/BriefcaseManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE/D,QAAQ,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;IACtC,MAAM,WAAW,GAAW,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;IAChD,MAAM,WAAW,GAAG,cAAc,CAAC;IAEnC,wGAAwG;IACxG,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEpC,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,UAAU,GAAG,yBAAyB,CAAC;QAC3C,IAAI,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEzB,UAAU,GAAG,qCAAqC,CAAC;QACnD,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACvF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,GAAG,MAAM,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEzB,UAAU,GAAG,qCAAqC;YAChD,sGAAsG;YACtG,sGAAsG;YACtG,sBAAsB,CAAC,CAAC,wBAAwB;QAClD,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACvF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,GAAG,MAAM,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,wBAAwB,CAAC,CAAC;QAEzG,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAEvF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,gBAAgB,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAE5I,MAAM,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAErF,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;QACzC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,iCAAiC;QAElD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAE/C,MAAM,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iHAAiH,EAAE,KAAK,IAAI,EAAE;QAC/H,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,eAAe,CAAC;QACnC,MAAM,UAAU,GAAG,qBAAqB,CAAC;QAEzC,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,UAAU,EAAE,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnH,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAErC,kFAAkF;QAClF,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvG,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,sBAAsB,GAAW,iBAAiB,CAAC,WAAW,CAAC;QACrE,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,SAAS,CAAC;QACzD,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE1B,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,MAAM,mBAAmB,GAAW,cAAc,CAAC,WAAW,CAAC;QAC/D,MAAM,iBAAiB,GAAG,cAAc,CAAC,SAAS,CAAC;QACnD,cAAc,CAAC,KAAK,EAAE,CAAC;QAEvB,4BAA4B;QAC5B,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAEtC,uIAAuI;QACvI,MAAM,kBAAkB,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,uBAAuB,GAAW,kBAAkB,CAAC,WAAW,CAAC;QACvE,MAAM,CAAC,WAAW,CAAC,uBAAuB,EAAE,sBAAsB,CAAC,CAAC;QACpE,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAC3D,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;QACnE,MAAM,WAAW,CAAC,yBAAyB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAE5E,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7F,MAAM,oBAAoB,GAAW,eAAe,CAAC,WAAW,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,eAAe,CAAC,SAAS,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QAC7D,MAAM,WAAW,CAAC,yBAAyB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAEzE,sCAAsC;QACtC,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QACrC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sGAAsG,EAAE,KAAK,IAAI,EAAE;QACpH,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,qDAAqD;QACzF,MAAM,UAAU,GAAG,qBAAqB,CAAC,CAAC,6BAA6B;QAEvE,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC5E,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAErC,0EAA0E;QAC1E,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvG,IAAI,iBAAiB,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC;QAClD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QAE5C,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAY,iBAAiB,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QACpE,MAAM,CAAC,SAAS,GAAG,GAAG,MAAM,CAAC,SAAS,SAAS,CAAC;QAChD,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1D,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC9D,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAE7D,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE1B,+DAA+D;QAC/D,oCAAoC;QACpC,iBAAiB,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,SAAS,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAE7D,4BAA4B;QAC5B,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAEtC,6CAA6C;QAC7C,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE9C,0EAA0E;QAC1E,yCAAyC;QACzC,2FAA2F;QAC3F,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,iBAAiB,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,SAAS,CAAC;QAC1D,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAE7D,+CAA+C;QAC/C,MAAM,iBAAiB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7F,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,SAAS,CAAC;QAC1D,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;QAEpE,sCAAsC;QACtC,MAAM,WAAW,CAAC,yBAAyB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,gBAAgB,EAAE,CAAC;QACrC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { BriefcaseIdValue } from \"@itwin/core-common\";\nimport { Element } from \"../../Element\";\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { HubMock } from \"../../HubMock\";\nimport { TestChangeSetUtility } from \"../TestChangeSetUtility\";\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\n\ndescribe(\"BriefcaseManager\", async () => {\n const testITwinId: string = Guid.createValue();\n const managerAccessToken = \"manager mock token\";\n const accessToken = \"access token\";\n\n // contested version0 files can cause errors that cause tests to not call shutdown, so always do it here\n afterEach(() => HubMock.shutdown());\n\n it(\"Open iModels with various names causing potential issues on Windows/Unix\", async () => {\n HubMock.startup(\"bad names\", KnownTestLocations.outputDir);\n let iModelName = \"iModel Name With Spaces\";\n let iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n const args = { accessToken, iTwinId: testITwinId, iModelId };\n assert.isDefined(iModelId);\n let iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name With :\\/<>?* Characters\";\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n\n iModelName = \"iModel Name Thats Excessively Long \" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\" +\n \"01234567890123456789\"; // 35 + 2*100 + 20 = 255\n // Note: iModelHub does not accept a name that's longer than 255 characters.\n assert.equal(255, iModelName.length);\n iModelId = await HubWrappers.createIModel(managerAccessToken, testITwinId, iModelName);\n assert.isDefined(iModelId);\n iModel = await HubWrappers.openCheckpointUsingRpc(args);\n assert.isDefined(iModel);\n iModel.close();\n HubMock.shutdown();\n });\n\n it(\"should set appropriate briefcase ids for FixedVersion, PullOnly and PullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIds\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: true };\n const iModel1 = await HubWrappers.openCheckpointUsingRpc(args);\n assert.equal(BriefcaseIdValue.Unassigned, iModel1[_nativeDb].getBriefcaseId(), \"checkpoint should be 0\");\n\n const iModel2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n assert.equal(BriefcaseIdValue.Unassigned, iModel2.briefcaseId, \"pullOnly should be 0\");\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.isTrue(iModel3.briefcaseId >= BriefcaseIdValue.FirstValid && iModel3.briefcaseId <= BriefcaseIdValue.LastValid, \"valid briefcaseId\");\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel1);\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel2);\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n HubMock.shutdown();\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels for pullAndPush workflows\", async () => {\n HubMock.startup(\"briefcaseIdsReopen\", KnownTestLocations.outputDir);\n const iModelId = await HubWrappers.createIModel(accessToken, testITwinId, \"imodel1\");\n\n const args = { accessToken, iTwinId: testITwinId, iModelId, deleteFirst: false };\n const iModel1 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId1 = iModel1.briefcaseId;\n iModel1.close(); // Keeps the briefcase by default\n\n const iModel3 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseId3 = iModel3.briefcaseId;\n assert.strictEqual(briefcaseId3, briefcaseId1);\n\n await HubWrappers.closeAndDeleteBriefcaseDb(accessToken, iModel3);\n HubMock.shutdown();\n });\n\n it(\"should reuse a briefcaseId when re-opening iModels of different versions for pullAndPush and pullOnly workflows\", async () => {\n HubMock.startup(\"workflow\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\";\n const userToken2 = \"super manager token\";\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, IModelTestUtils.generateUniqueName(\"BriefcaseReuseTest\"));\n await testUtility.createTestIModel();\n\n // User2 opens and then closes the iModel pullOnly/pullPush, keeping the briefcase\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n const iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush: number = iModelPullAndPush.briefcaseId;\n const changesetPullAndPush = iModelPullAndPush.changeset;\n iModelPullAndPush.close();\n\n const iModelPullOnly = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly: number = iModelPullOnly.briefcaseId;\n const changesetPullOnly = iModelPullOnly.changeset;\n iModelPullOnly.close();\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User 2 reopens the iModel pullOnly/pullPush => Expect the same briefcase to be re-used, but the changeset should have been updated!!\n const iModelPullAndPush2 = await HubWrappers.openBriefcaseUsingRpc(args);\n const briefcaseIdPullAndPush2: number = iModelPullAndPush2.briefcaseId;\n assert.strictEqual(briefcaseIdPullAndPush2, briefcaseIdPullAndPush);\n const changesetPullAndPush2 = iModelPullAndPush2.changeset;\n assert.notStrictEqual(changesetPullAndPush2, changesetPullAndPush);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush2);\n\n const iModelPullOnly2 = await HubWrappers.openBriefcaseUsingRpc({ ...args, briefcaseId: 0 });\n const briefcaseIdPullOnly2: number = iModelPullOnly2.briefcaseId;\n assert.strictEqual(briefcaseIdPullOnly2, briefcaseIdPullOnly);\n const changesetPullOnly2 = iModelPullOnly2.changeset;\n assert.notStrictEqual(changesetPullOnly2, changesetPullOnly);\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullOnly2);\n\n // Delete iModel from the Hub and disk\n await testUtility.deleteTestIModel();\n HubMock.shutdown();\n });\n\n it(\"should be able to edit a PullAndPush briefcase, reopen it as of a new version, and then push changes\", async () => {\n HubMock.startup(\"pullPush\", KnownTestLocations.outputDir);\n const userToken1 = \"manager token\"; // User1 is just used to create and update the iModel\n const userToken2 = \"super manager token\"; // User2 is used for the test\n\n // User1 creates an iModel on the Hub\n const testUtility = new TestChangeSetUtility(userToken1, \"PullAndPushTest\");\n await testUtility.createTestIModel();\n\n // User2 opens the iModel pullAndPush and is able to edit and save changes\n const args = { accessToken: userToken2, iTwinId: testUtility.iTwinId, iModelId: testUtility.iModelId };\n let iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n assert.exists(iModelPullAndPush);\n const briefcaseId = iModelPullAndPush.briefcaseId;\n const pathname = iModelPullAndPush.pathName;\n\n iModelPullAndPush.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const rootEl: Element = iModelPullAndPush.elements.getRootSubject();\n rootEl.userLabel = `${rootEl.userLabel}changed`;\n iModelPullAndPush.elements.updateElement(rootEl.toJSON());\n\n assert.isTrue(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isFalse(iModelPullAndPush[_nativeDb].hasPendingTxns());\n iModelPullAndPush.saveChanges();\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n iModelPullAndPush.close();\n\n // User2 should be able to re-open the iModel pullAndPush again\n // - the changes will still be there\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush = iModelPullAndPush.changeset;\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User1 pushes a change set\n await testUtility.pushTestChangeSet();\n\n // User2 should be able to re-open the iModel\n await HubWrappers.openBriefcaseUsingRpc(args);\n\n // User2 closes and reopens the iModel pullAndPush as of the newer version\n // - the changes will still be there, AND\n // - the briefcase will be upgraded to the newer version since it was closed and re-opened.\n iModelPullAndPush.close();\n iModelPullAndPush = await HubWrappers.openBriefcaseUsingRpc(args);\n const changesetPullAndPush3 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush3, changesetPullAndPush);\n assert.strictEqual(iModelPullAndPush.briefcaseId, briefcaseId);\n assert.strictEqual(iModelPullAndPush.pathName, pathname);\n assert.isFalse(iModelPullAndPush[_nativeDb].hasUnsavedChanges());\n assert.isTrue(iModelPullAndPush[_nativeDb].hasPendingTxns());\n\n // User2 should be able to push the changes now\n await iModelPullAndPush.pushChanges({ accessToken: userToken2, description: \"test change\" });\n const changesetPullAndPush4 = iModelPullAndPush.changeset;\n assert.notStrictEqual(changesetPullAndPush4, changesetPullAndPush3);\n\n // Delete iModel from the Hub and disk\n await HubWrappers.closeAndDeleteBriefcaseDb(userToken2, iModelPullAndPush);\n await testUtility.deleteTestIModel();\n HubMock.shutdown();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;SACtB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IACpI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QACtH,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAE,qDAAqD;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;QACxD,QAAQ,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;QACtE,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEvB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,wDAAwD;QACtH,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5E,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAErF,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC;QAC5E,MAAM,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,uEAAuE,CAAC,CAAC;QAC7H,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QACF,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC;YACtD,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAC;QAEF,qBAAqB;QACrB,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC;YACtD,UAAU;SACX,CAAC;QACF,MAAM,EAAE,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,MAAM,GAAG,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;QACxD,QAAQ,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;QACtE,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAEzF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC1F,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAErF,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC;QAClG,MAAM,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as sinon from \"sinon\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport { CheckpointManager, V1CheckpointManager, V2CheckpointManager } from \"../../CheckpointManager\";\r\nimport { _nativeDb, IModelHost } from \"../../core-backend\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { HubMock } from \"../../HubMock\";\r\nimport { _hubAccess } from \"../../internal/Symbols\";\r\n\r\ndescribe(\"V1 Checkpoint Manager\", () => {\r\n it(\"empty props\", async () => {\r\n const props = {\r\n iTwinId: \"\",\r\n iModelId: \"\",\r\n changeset: { id: \"\" },\r\n };\r\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\", \"first.bim\"));\r\n });\r\n\r\n it(\"changeset only props\", async () => {\r\n const props = {\r\n iTwinId: \"\",\r\n iModelId: \"\",\r\n changeset: { id: \"1234\" },\r\n };\r\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\", \"1234.bim\"));\r\n });\r\n\r\n it(\"changeset+itwin props\", async () => {\r\n const props = {\r\n iTwinId: \"5678\",\r\n iModelId: \"\",\r\n changeset: { id: \"1234\" },\r\n };\r\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\", \"1234.bim\"));\r\n });\r\n\r\n it(\"changeset+itwin+imodel props\", async () => {\r\n const props = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"910\", \"checkpoints\", \"1234.bim\"));\r\n });\r\n\r\n it(\"getFolder\", async () => {\r\n assert.equal(V1CheckpointManager.getFolder(\"1234\"), path.join(IModelHost.cacheDir, \"imodels\", \"1234\", \"checkpoints\"));\r\n assert.equal(V1CheckpointManager.getFolder(\"\"), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\"));\r\n });\r\n\r\n it(\"should fix invalid dbGuid during download\", async () => {\r\n const dbPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint.bim\");\r\n const snapshot = SnapshotDb.createEmpty(dbPath, { rootSubject: { name: \"test\" } });\r\n const iModelId = Guid.createValue(); // This is wrong - it should be `snapshot.getGuid()`!\r\n const iTwinId = Guid.createValue();\r\n const changeset = IModelTestUtils.generateChangeSetId();\r\n snapshot[_nativeDb].setITwinId(iTwinId);\r\n snapshot[_nativeDb].saveLocalValue(\"ParentChangeSetId\", changeset.id);\r\n snapshot.saveChanges();\r\n\r\n assert.notEqual(iModelId, snapshot[_nativeDb].getIModelId()); // Ensure the Snapshot dbGuid and iModelId are different\r\n snapshot.close();\r\n\r\n sinon.stub(V2CheckpointManager, \"downloadCheckpoint\").callsFake(async (arg) => {\r\n IModelJsFs.copySync(dbPath, arg.localFile);\r\n return changeset.id;\r\n });\r\n\r\n const localFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint2.bim\");\r\n\r\n const request = { localFile, checkpoint: { iTwinId, iModelId, changeset } };\r\n await CheckpointManager.downloadCheckpoint(request);\r\n const db = V1CheckpointManager.openCheckpointV1(localFile, request.checkpoint);\r\n assert.equal(iModelId, db[_nativeDb].getIModelId(), \"expected the V1 Checkpoint download to fix the improperly set dbGuid.\");\r\n db.close();\r\n });\r\n});\r\n\r\ndescribe(\"Checkpoint Manager\", () => {\r\n\r\n afterEach(() => {\r\n sinon.restore();\r\n });\r\n\r\n it(\"open missing local file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n const request = {\r\n localFile: V1CheckpointManager.getFileName(checkpoint),\r\n checkpoint,\r\n };\r\n const db = CheckpointManager.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n\r\n it(\"open a bad bim file should return undefined\", async () => {\r\n const checkpoint = {\r\n iTwinId: \"5678\",\r\n iModelId: \"910\",\r\n changeset: { id: \"1234\" },\r\n };\r\n\r\n // Setup a local file\r\n const folder = V1CheckpointManager.getFolder(checkpoint.iModelId);\r\n if (!IModelJsFs.existsSync(folder))\r\n IModelJsFs.recursiveMkDirSync(folder);\r\n\r\n const outputFile = V1CheckpointManager.getFileName(checkpoint);\r\n if (IModelJsFs.existsSync(outputFile))\r\n IModelJsFs.unlinkSync(outputFile);\r\n\r\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\r\n\r\n // Attempt to open the file\r\n const request = {\r\n localFile: V1CheckpointManager.getFileName(checkpoint),\r\n checkpoint,\r\n };\r\n const db = CheckpointManager.tryOpenLocalFile(request);\r\n assert.isUndefined(db);\r\n });\r\n\r\n it(\"downloadCheckpoint should fall back to use v1 checkpoints if v2 checkpoints are not enabled\", async () => {\r\n const dbPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint.bim\");\r\n const snapshot = SnapshotDb.createEmpty(dbPath, { rootSubject: { name: \"test\" } });\r\n const iModelId = snapshot.iModelId;\r\n const iTwinId = Guid.createValue();\r\n const changeset = IModelTestUtils.generateChangeSetId();\r\n snapshot[_nativeDb].setITwinId(iTwinId);\r\n snapshot[_nativeDb].saveLocalValue(\"ParentChangeSetId\", changeset.id);\r\n snapshot.saveChanges();\r\n snapshot.close();\r\n\r\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\r\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => undefined);\r\n\r\n const v1Spy = sinon.stub(V1CheckpointManager, \"downloadCheckpoint\").callsFake(async (arg) => {\r\n IModelJsFs.copySync(dbPath, arg.localFile);\r\n return changeset.id;\r\n });\r\n\r\n const localFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint2.bim\");\r\n\r\n const request = { localFile, checkpoint: { accessToken: \"dummy\", iTwinId, iModelId, changeset } };\r\n await CheckpointManager.downloadCheckpoint(request);\r\n assert.isTrue(v1Spy.calledOnce);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"CheckpointManager.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/CheckpointManager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport * as path from \"path\";\nimport * as sinon from \"sinon\";\nimport { Guid } from \"@itwin/core-bentley\";\nimport { CheckpointManager, V1CheckpointManager, V2CheckpointManager } from \"../../CheckpointManager\";\nimport { _nativeDb, IModelHost } from \"../../core-backend\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { HubMock } from \"../../HubMock\";\nimport { _hubAccess } from \"../../internal/Symbols\";\n\ndescribe(\"V1 Checkpoint Manager\", () => {\n it(\"empty props\", async () => {\n const props = {\n iTwinId: \"\",\n iModelId: \"\",\n changeset: { id: \"\" },\n };\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\", \"first.bim\"));\n });\n\n it(\"changeset only props\", async () => {\n const props = {\n iTwinId: \"\",\n iModelId: \"\",\n changeset: { id: \"1234\" },\n };\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\", \"1234.bim\"));\n });\n\n it(\"changeset+itwin props\", async () => {\n const props = {\n iTwinId: \"5678\",\n iModelId: \"\",\n changeset: { id: \"1234\" },\n };\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\", \"1234.bim\"));\n });\n\n it(\"changeset+itwin+imodel props\", async () => {\n const props = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n assert.equal(V1CheckpointManager.getFileName(props), path.join(IModelHost.cacheDir, \"imodels\", \"910\", \"checkpoints\", \"1234.bim\"));\n });\n\n it(\"getFolder\", async () => {\n assert.equal(V1CheckpointManager.getFolder(\"1234\"), path.join(IModelHost.cacheDir, \"imodels\", \"1234\", \"checkpoints\"));\n assert.equal(V1CheckpointManager.getFolder(\"\"), path.join(IModelHost.cacheDir, \"imodels\", \"checkpoints\"));\n });\n\n it(\"should fix invalid dbGuid during download\", async () => {\n const dbPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint.bim\");\n const snapshot = SnapshotDb.createEmpty(dbPath, { rootSubject: { name: \"test\" } });\n const iModelId = Guid.createValue(); // This is wrong - it should be `snapshot.getGuid()`!\n const iTwinId = Guid.createValue();\n const changeset = IModelTestUtils.generateChangeSetId();\n snapshot[_nativeDb].setITwinId(iTwinId);\n snapshot[_nativeDb].saveLocalValue(\"ParentChangeSetId\", changeset.id);\n snapshot.saveChanges();\n\n assert.notEqual(iModelId, snapshot[_nativeDb].getIModelId()); // Ensure the Snapshot dbGuid and iModelId are different\n snapshot.close();\n\n sinon.stub(V2CheckpointManager, \"downloadCheckpoint\").callsFake(async (arg) => {\n IModelJsFs.copySync(dbPath, arg.localFile);\n return changeset.id;\n });\n\n const localFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint2.bim\");\n\n const request = { localFile, checkpoint: { iTwinId, iModelId, changeset } };\n await CheckpointManager.downloadCheckpoint(request);\n const db = V1CheckpointManager.openCheckpointV1(localFile, request.checkpoint);\n assert.equal(iModelId, db[_nativeDb].getIModelId(), \"expected the V1 Checkpoint download to fix the improperly set dbGuid.\");\n db.close();\n });\n});\n\ndescribe(\"Checkpoint Manager\", () => {\n\n afterEach(() => {\n sinon.restore();\n });\n\n it(\"open missing local file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n const request = {\n localFile: V1CheckpointManager.getFileName(checkpoint),\n checkpoint,\n };\n const db = CheckpointManager.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n\n it(\"open a bad bim file should return undefined\", async () => {\n const checkpoint = {\n iTwinId: \"5678\",\n iModelId: \"910\",\n changeset: { id: \"1234\" },\n };\n\n // Setup a local file\n const folder = V1CheckpointManager.getFolder(checkpoint.iModelId);\n if (!IModelJsFs.existsSync(folder))\n IModelJsFs.recursiveMkDirSync(folder);\n\n const outputFile = V1CheckpointManager.getFileName(checkpoint);\n if (IModelJsFs.existsSync(outputFile))\n IModelJsFs.unlinkSync(outputFile);\n\n IModelJsFs.writeFileSync(outputFile, \"Testing\");\n\n // Attempt to open the file\n const request = {\n localFile: V1CheckpointManager.getFileName(checkpoint),\n checkpoint,\n };\n const db = CheckpointManager.tryOpenLocalFile(request);\n assert.isUndefined(db);\n });\n\n it(\"downloadCheckpoint should fall back to use v1 checkpoints if v2 checkpoints are not enabled\", async () => {\n const dbPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint.bim\");\n const snapshot = SnapshotDb.createEmpty(dbPath, { rootSubject: { name: \"test\" } });\n const iModelId = snapshot.iModelId;\n const iTwinId = Guid.createValue();\n const changeset = IModelTestUtils.generateChangeSetId();\n snapshot[_nativeDb].setITwinId(iTwinId);\n snapshot[_nativeDb].saveLocalValue(\"ParentChangeSetId\", changeset.id);\n snapshot.saveChanges();\n snapshot.close();\n\n sinon.stub(IModelHost, _hubAccess).get(() => HubMock);\n sinon.stub(IModelHost[_hubAccess], \"queryV2Checkpoint\").callsFake(async () => undefined);\n\n const v1Spy = sinon.stub(V1CheckpointManager, \"downloadCheckpoint\").callsFake(async (arg) => {\n IModelJsFs.copySync(dbPath, arg.localFile);\n return changeset.id;\n });\n\n const localFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestCheckpoint2.bim\");\n\n const request = { localFile, checkpoint: { accessToken: \"dummy\", iTwinId, iModelId, changeset } };\n await CheckpointManager.downloadCheckpoint(request);\n assert.isTrue(v1Spy.calledOnce);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageData.js","sourceRoot":"","sources":["../../../src/test/imageData.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACzhB,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAExF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,0BAA0B;CACnC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"imageData.js","sourceRoot":"","sources":["../../../src/test/imageData.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACzhB,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAExF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,0BAA0B;CACnC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Buffer } from \"node:buffer\";\n\nconst samplePngTextureData = [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 3, 0, 0, 0, 3, 8, 2, 0, 0, 0, 217, 74, 34, 232, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 24, 73, 68, 65, 84, 24, 87, 99, 248, 15, 4, 12, 12, 64, 4, 198, 64, 46, 132, 5, 162, 254, 51, 0, 0, 195, 90, 10, 246, 127, 175, 154, 145, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];\nconst samplePngTextureDataBase64 = Buffer.from(samplePngTextureData).toString(\"base64\");\n\n/**\n * This is an encoded png containing a 3x3 square with white in top left pixel, blue in middle pixel, and green in\n * bottom right pixel. The rest of the square is red.\n */\nexport const samplePngTexture = {\n data: samplePngTextureData,\n base64: samplePngTextureDataBase64,\n};\n"]}
|