@itwin/core-backend 5.2.0-dev.3 → 5.2.0-dev.31
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 +79 -1
- package/lib/cjs/BackendHubAccess.d.ts +2 -0
- package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.d.ts +6 -0
- package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js +6 -0
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BriefcaseManager.d.ts +57 -3
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +153 -44
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +2 -2
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +4 -0
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +8 -0
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +22 -0
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +54 -3
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +88 -10
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelHost.d.ts +11 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +5 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
- package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/StashManager.d.ts +175 -0
- package/lib/cjs/StashManager.d.ts.map +1 -0
- package/lib/cjs/StashManager.js +306 -0
- package/lib/cjs/StashManager.js.map +1 -0
- package/lib/cjs/TxnManager.d.ts +226 -15
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +249 -23
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +12 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +4 -3
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +52 -24
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +49 -59
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js +2 -2
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.d.ts +3 -9
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js +3 -22
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +1 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +2 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts +2 -12
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +47 -40
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +2 -2
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/esm/BackendHubAccess.d.ts +2 -0
- package/lib/esm/BackendHubAccess.d.ts.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.d.ts +6 -0
- package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/esm/BackendLoggerCategory.js +6 -0
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +57 -3
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +154 -45
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +2 -2
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +4 -0
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/ECDb.d.ts +8 -0
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +22 -0
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +54 -3
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +89 -11
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +11 -1
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +5 -0
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
- package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/StashManager.d.ts +175 -0
- package/lib/esm/StashManager.d.ts.map +1 -0
- package/lib/esm/StashManager.js +301 -0
- package/lib/esm/StashManager.js.map +1 -0
- package/lib/esm/TxnManager.d.ts +226 -15
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +247 -21
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +10 -0
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +4 -3
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +52 -24
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +51 -61
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js +2 -2
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.d.ts +3 -9
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js +3 -22
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +1 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +1 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts +2 -12
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +50 -43
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js +2 -2
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js +6 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +158 -43
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +12 -10
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +299 -43
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +39 -35
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts +46 -0
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +20 -2
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +71 -1
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +8 -2
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
- package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
- package/lib/esm/test/hubaccess/Rebase.test.js +640 -0
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js +2 -2
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.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 { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { FractionRun, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextAnnotation3dProps, TextAnnotationProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, TextAnnotation2d, TextAnnotation3d } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength } from \"../AnnotationTestUtils\";\n\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(styleId?: Id64String): TextAnnotation {\n const styleOverrides = { fontName: \"Karla\" };\n const block = TextBlock.create({ styleId: styleId ?? \"0x42\", styleOverrides });\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModel: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n definitionModel,\n name,\n settings,\n \"description\",\n )\n}\n\ntype CreateTextAnnotationArgs<T> = Partial<Omit<T, \"textAnnotationData\">> & { textAnnotationData?: TextAnnotationProps };\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n ...props,\n }, mockIModel());\n }\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create({ styleId: \"0x42\" }).toJSON()})\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(anno.textBlock.styleId).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create({ styleId: \"0x42\" }).toJSON()})\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create({ styleId: \"0x42\" });\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let seedCategoryId: string;\n let seedModelId: string;\n let seedStyleId: string;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n seedCategoryId = category;\n seedModelId = model;\n seedStyleId = styleId;\n });\n\n after(() => imodel.close());\n\n function createElement3d(createArgs?: CreateTextAnnotationArgs<TextAnnotation3dProps>): TextAnnotation3d {\n return TextAnnotation3d.create(\n imodel,\n seedCategoryId,\n seedModelId,\n {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n },\n createArgs?.textAnnotationData,\n )\n }\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const el = createElement3d({ textAnnotationData: annotation.toJSON() });\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d();\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a style\", async () => { await test(TextAnnotation.fromJSON({ textBlock: { styleId: seedStyleId } })); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let seedCategoryId: string;\n let seedModelId: string;\n let seedStyleId: string;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n seedCategoryId = category;\n seedModelId = model;\n seedStyleId = styleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n function createElement2d(createArgs?: CreateTextAnnotationArgs<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.create(\n imodel,\n seedCategoryId,\n seedModelId,\n {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n },\n createArgs?.textAnnotationData,\n )\n }\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const el = createElement2d({ textAnnotationData: annotation.toJSON() });\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d();\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a style\", async () => { await test(TextAnnotation.fromJSON({ textBlock: { styleId: seedStyleId } })); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n fontName: \"Totally Real Font\",\n isUnderlined: true,\n lineHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { fontName: \"\"});\n expect(() => annotationTextStyle.insert()).to.throw();\n // lineHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid lineHeight\", { fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { fontName: \"Totally Real Font\", stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { fontName: \"Totally Real Font\" });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ fontName: \"\" });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ lineHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { fontName: \"Totally Real Font\" });\n const newStyle = el0.settings.clone({isBold: true, lineSpacingFactor: 3});\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.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 { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { AnnotationTextStyle, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionModel } from \"../../Model\";\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\nimport { FontFile } from \"../../FontFile\";\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\n\n\nfunction mockIModel(): IModelDb {\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\n fonts: {\n findId: () => 0,\n } as any,\n computeRangesForText: computeTextRangeAsStringLength,\n forEachMetaData: () => undefined,\n };\n\n return iModel as IModelDb;\n}\n\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\n const styleOverrides = { fontName: \"Karla\" };\n const block = textBlock ?? TextBlock.create({ styleOverrides });\n if (!textBlock) {\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n }\n\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\n annotation.offset = Point3d.create(10, -5, 0);\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\n return annotation;\n}\n\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\n\n return subj;\n}\n\n\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\n\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\n const viewRange = new Range2d(0, 0, 500, 500);\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\n\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\n\n return { category, model };\n}\n\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\n const iModel = StandaloneDb.createEmpty(filePath, {\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\n client: \"integration tests\",\n globalOrigin: { x: 0, y: 0 },\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\n guid: Guid.createValue(),\n });\n await iModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n })\n\n return iModel;\n}\n\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModel: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\n return AnnotationTextStyle.create(\n iModel,\n definitionModel,\n name,\n settings,\n \"description\",\n )\n}\n\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\n const placement: Placement2dProps = {\n origin: { x: 0, y: 0 },\n angle: Angle.createDegrees(0).toJSON(),\n };\n\n return TextAnnotation2d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\n const placement: Placement3dProps = {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n };\n\n return TextAnnotation3d.create(\n imodel,\n {\n ...createArgs,\n placement,\n }\n );\n}\n\ndescribe(\"TextAnnotation element\", () => {\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\n return TextAnnotation2d.fromJSON({\n category: \"0x12\",\n model: \"0x34\",\n code: {\n spec: \"0x56\",\n scope: \"0x78\",\n },\n classFullName: TextAnnotation2d.classFullName,\n placement: {\n origin: { x: 0, y: 0 },\n angle: 0,\n },\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\n ...props,\n }, mockIModel());\n }\n\n describe(\"getAnnotation\", () => {\n it(\"returns undefined if not provided\", () => {\n expect(makeElement().getAnnotation()).to.be.undefined;\n });\n\n it(\"converts JSON string to class instance\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create().toJSON()}),\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\n });\n\n const anno = elem.getAnnotation()!;\n expect(anno).not.to.be.undefined;\n expect(anno.textBlock.isEmpty).to.be.true;\n expect(elem.defaultTextStyle).not.to.be.undefined;\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\n });\n\n it(\"produces a new object each time it is called\", () => {\n const elem = makeElement({\n textAnnotationData: JSON.stringify({textBlock: TextBlock.create().toJSON()})\n });\n\n const anno1 = elem.getAnnotation()!;\n const anno2 = elem.getAnnotation()!;\n expect(anno1).not.to.equal(anno2);\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\n });\n });\n\n describe(\"setAnnotation\", () => {\n it(\"updates properties\", () => {\n const elem = makeElement();\n\n const textBlock = TextBlock.create();\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\n });\n });\n\n describe(\"TextAnnotation3d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation3d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n\n createElement3dArgs = { category, model };\n });\n\n after(() => imodel.close());\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n const el = createElement3d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement3d(el0, false);\n\n const elId = el0.insert()\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"TextAnnotation2d Persistence\", () => {\n let imodel: StandaloneDb;\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(async () => {\n imodel = await createIModel(\"TextAnnotation2d\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n\n createElement2dArgs = { category, model };\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n it(\"creating element does not automatically compute the geometry\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n const el = createElement2d(imodel, args);\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\n expect(el.geom).to.be.undefined;\n });\n\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\n }\n\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\n async function test(annotation?: TextAnnotation): Promise<void> {\n const el0 = createElement2d(imodel, createElement2dArgs);\n if (annotation) {\n el0.setAnnotation(annotation);\n }\n\n expectPlacement2d(el0, false);\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\n\n const anno = el1.getAnnotation();\n\n if (!annotation) {\n expect(anno).to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\n } else {\n expect(anno).not.to.be.undefined;\n expect(anno!.equals(annotation)).to.be.true;\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n }\n }\n\n it(\"roundtrips an empty annotation\", async () => { await test(); });\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\n });\n });\n\n describe(\"defaultTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModelId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {fontName: \"Karla\", lineHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModelId = definitionModel;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n after(() => {\n imodel.saveChanges(\"tests\");\n imodel.close();\n });\n\n describe(\"TextAnnotation2d\", () => {\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement2dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement2d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement2dArgs, textAnnotationData: annotation.toJSON() };\n\n const el0 = createElement2d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation2d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n\n describe(\"TextAnnotation3d\", () => {\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\n\n before(() => {\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n createElement3dArgs = { category, model };\n });\n\n it(\"preserves defaultTextStyle after round trip\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON(), defaultTextStyleId: seedStyleId };\n const el0 = createElement3d(imodel, args);\n expect(el0.defaultTextStyle).not.to.be.undefined;\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\n el0.insert();\n\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\n expect(el1).not.to.be.undefined;\n expect(el1.defaultTextStyle).not.to.be.undefined;\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\n });\n\n it(\"produces different geometry when defaultTextStyle changes\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\n\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\n\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\n expect(geom1).not.to.deep.equal(geom2);\n });\n\n it(\"allows defaultTextStyle to be undefined\", () => {\n const annotation = createAnnotation();\n const args = { ...createElement3dArgs, textAnnotationData: annotation.toJSON() };\n\n const el0 = createElement3d(imodel, args);\n el0.defaultTextStyle = undefined;\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof TextAnnotation3d).to.be.true;\n expect(el1.defaultTextStyle).to.be.undefined;\n });\n });\n });\n});\n\ndescribe(\"AnnotationTextStyle\", () => {\n let imodel: StandaloneDb;\n let seedSubjectId: string;\n let seedDefinitionModel: string;\n\n before(async () => {\n imodel = await createIModel(\"AnnotationTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n\n seedSubjectId = jobSubjectId;\n seedDefinitionModel = definitionModel;\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"inserts a style and round-trips through JSON\", async () => {\n const textStyle = TextStyleSettings.fromJSON({\n fontName: \"Totally Real Font\",\n isUnderlined: true,\n lineHeight: 0.5\n })\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\n\n const elId = el0.insert();\n\n expect(Id64.isValidId64(elId)).to.be.true;\n\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n const style = el1.settings;\n expect(style).not.to.be.undefined;\n\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\n });\n\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\n // Default style should fail since it has no font\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\n expect(() => annotationTextStyle.insert()).to.throw();\n // font is required\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { fontName: \"\"});\n expect(() => annotationTextStyle.insert()).to.throw();\n // lineHeight should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid lineHeight\", { fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n // stackedFractionScale should be positive\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { fontName: \"Totally Real Font\", stackedFractionScale: 0 });\n expect(() => annotationTextStyle.insert()).to.throw();\n });\n\n it(\"does not allow updating of elements to invalid styles\", async () => {\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { fontName: \"Totally Real Font\" });\n\n const elId = annotationTextStyle.insert();\n expect(Id64.isValidId64(elId)).to.be.true;\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(el1).not.to.be.undefined;\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\n\n el1.settings = el1.settings.clone({ fontName: \"\" });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ fontName: \"Totally Real Font\", lineHeight: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ lineHeight: 2, stackedFractionScale: 0 });\n expect(() => el1.update()).to.throw();\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\n\n el1.update();\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\n });\n\n it(\"uses default style if none specified\", async () => {\n const el0 = AnnotationTextStyle.fromJSON({\n classFullName: AnnotationTextStyle.classFullName,\n model: seedSubjectId,\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\n }, imodel);\n expect(el0.settings).not.to.be.undefined;\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\n });\n\n it(\"can update style via cloning\", async () => {\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { fontName: \"Totally Real Font\" });\n const newStyle = el0.settings.clone({isBold: true, lineSpacingFactor: 3});\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\n el0.settings = newStyle;\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\n });\n});\n\ndescribe(\"appendTextAnnotationGeometry\", () => {\n let imodel: StandaloneDb;\n let seedDefinitionModelId: string;\n let seedCategoryId: string;\n let seedStyleId: string;\n let seedStyleId2: string;\n\n before(async () => {\n imodel = await createIModel(\"DefaultTextStyle\");\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", {fontName: \"Totally Real Font\", lineHeight: 0.25, isItalic: true}).insert();\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", {fontName: \"Karla\", lineHeight: 0.5, isBold: true}).insert();\n\n expect(jobSubjectId).not.to.be.undefined;\n expect(definitionModel).not.to.be.undefined;\n expect(category).not.to.be.undefined;\n expect(model).not.to.be.undefined;\n expect(styleId).not.to.be.undefined;\n expect(differentStyleId).not.to.be.undefined;\n\n seedDefinitionModelId = definitionModel;\n seedCategoryId = category;\n seedStyleId = styleId;\n seedStyleId2 = differentStyleId;\n });\n\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\n const builder = new MockBuilder();\n\n const resolver = new TextStyleResolver({\n textBlock: annotation.textBlock,\n textStyleId: styleId,\n iModel: imodel,\n });\n\n const layout = layoutTextBlock({\n textBlock: annotation.textBlock,\n iModel: imodel,\n textStyleResolver: resolver,\n });\n\n const result = appendTextAnnotationGeometry({\n annotationProps: annotation.toJSON(),\n layout,\n textStyleResolver: resolver,\n scaleFactor,\n builder,\n categoryId: seedCategoryId,\n });\n\n expect(result).to.be.true;\n return builder;\n }\n\n it(\"produces the same geometry when given the same inputs\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\n });\n\n it(\"produces no geometry when given an empty annotation\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.geometries).to.be.empty;\n expect(builder.params).to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\n const block = TextBlock.create();\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\n const styleId = createAnnotationTextStyle(\n imodel,\n seedDefinitionModelId,\n \"empty anno style\",\n {\n fontName: \"Totally Real Font\",\n frame: {\n shape: \"rectangle\",\n }\n }\n ).insert();\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\n\n expect(builder.geometries).not.to.be.empty;\n expect(builder.params).not.to.be.empty;\n expect(builder.textStrings).to.be.empty;\n });\n\n\n it(\"produces different geometry when given different text-content in annotations\", () => {\n const anno1 = createAnnotation();\n const anno2 = createAnnotation();\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { fontName: \"Totally Real Font\" } }));\n\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.params).to.deep.equal(builder2.params);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"produces different geometry when given different default styles\", () => {\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\n\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\n });\n\n it(\"accounts for style overrides in the text\", () => {\n const block = TextBlock.create();\n block.appendParagraph();\n block.paragraphs[0].styleOverrides = { isBold: true };\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.appendParagraph();\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n\n const annotation = createAnnotation(block);\n\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\n\n expect(builder.textStrings.length).to.equal(2);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n // From override on paragraph\n expect(builder.textStrings[0].bold).to.be.true;\n // From default style\n expect(builder.textStrings[0].italic).to.be.true;\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\n // From default style\n expect(builder.textStrings[1].bold).to.be.false;\n // From override on run\n expect(builder.textStrings[1].italic).to.be.false;\n });\n\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\n const block = TextBlock.create();\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\n block.margins = { left: 0, right: 1, top: 2, bottom: 3 };\n\n const annotation = createAnnotation(block);\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\n\n expect(builder.textStrings.length).to.equal(1);\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\n });\n\n it(\"scales geometry correctly\", () => {\n const annotation = createAnnotation();\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\n\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\n });\n});"]}
|
|
@@ -28,11 +28,12 @@ function findTextStyleImpl(id) {
|
|
|
28
28
|
describe("layoutTextBlock", () => {
|
|
29
29
|
describe("resolves TextStyleSettings", () => {
|
|
30
30
|
it("inherits styling from TextBlock when Paragraph and Run have no style overrides", () => {
|
|
31
|
-
const textBlock = TextBlock.create(
|
|
31
|
+
const textBlock = TextBlock.create();
|
|
32
32
|
const run = TextRun.create({ content: "test" });
|
|
33
33
|
textBlock.appendParagraph();
|
|
34
34
|
textBlock.appendRun(run);
|
|
35
35
|
const tb = doLayout(textBlock, {
|
|
36
|
+
textStyleId: "0x42",
|
|
36
37
|
findTextStyle: findTextStyleImpl,
|
|
37
38
|
});
|
|
38
39
|
expect(tb.lines.length).to.equal(1);
|
|
@@ -43,12 +44,13 @@ describe("layoutTextBlock", () => {
|
|
|
43
44
|
expect(runStyle.isBold).to.be.true;
|
|
44
45
|
});
|
|
45
46
|
it("inherits style overrides from Paragraph when Run has no style overrides", () => {
|
|
46
|
-
const textBlock = TextBlock.create(
|
|
47
|
+
const textBlock = TextBlock.create();
|
|
47
48
|
const paragraph = Paragraph.create({ styleOverrides: { fontName: "paragraph" } });
|
|
48
49
|
const run = TextRun.create({ content: "test" });
|
|
49
50
|
textBlock.paragraphs.push(paragraph);
|
|
50
51
|
textBlock.appendRun(run);
|
|
51
52
|
const tb = doLayout(textBlock, {
|
|
53
|
+
textStyleId: "0x42",
|
|
52
54
|
findTextStyle: findTextStyleImpl,
|
|
53
55
|
});
|
|
54
56
|
expect(tb.lines.length).to.equal(1);
|
|
@@ -58,12 +60,13 @@ describe("layoutTextBlock", () => {
|
|
|
58
60
|
expect(runStyle.isBold).to.be.true;
|
|
59
61
|
});
|
|
60
62
|
it("uses Run style overrides when Run has overrides", () => {
|
|
61
|
-
const textBlock = TextBlock.create(
|
|
63
|
+
const textBlock = TextBlock.create();
|
|
62
64
|
const paragraph = Paragraph.create({ styleOverrides: { lineSpacingFactor: 55, fontName: "paragraph" } });
|
|
63
65
|
const run = TextRun.create({ content: "test", styleOverrides: { lineSpacingFactor: 99, fontName: "run" } });
|
|
64
66
|
textBlock.paragraphs.push(paragraph);
|
|
65
67
|
textBlock.appendRun(run);
|
|
66
68
|
const tb = doLayout(textBlock, {
|
|
69
|
+
textStyleId: "0x42",
|
|
67
70
|
findTextStyle: findTextStyleImpl,
|
|
68
71
|
});
|
|
69
72
|
expect(tb.lines.length).to.equal(1);
|
|
@@ -74,11 +77,12 @@ describe("layoutTextBlock", () => {
|
|
|
74
77
|
});
|
|
75
78
|
it("still uses TextBlock specific styles when Run has style overrides", () => {
|
|
76
79
|
// Some style settings only make sense on a TextBlock, so they are always applied from the TextBlock, even if the Run has a style override.
|
|
77
|
-
const textBlock = TextBlock.create(
|
|
80
|
+
const textBlock = TextBlock.create();
|
|
78
81
|
const run = TextRun.create({ content: "test", styleOverrides: { lineSpacingFactor: 99, fontName: "run" } });
|
|
79
82
|
textBlock.appendParagraph();
|
|
80
83
|
textBlock.appendRun(run);
|
|
81
84
|
const tb = doLayout(textBlock, {
|
|
85
|
+
textStyleId: "0x42",
|
|
82
86
|
findTextStyle: findTextStyleImpl,
|
|
83
87
|
});
|
|
84
88
|
expect(tb.lines.length).to.equal(1);
|
|
@@ -87,7 +91,7 @@ describe("layoutTextBlock", () => {
|
|
|
87
91
|
expect(runStyle.lineSpacingFactor).to.equal(12);
|
|
88
92
|
});
|
|
89
93
|
it("inherits overrides from TextBlock, Paragraph and Run when there is no styleId", () => {
|
|
90
|
-
const textBlock = TextBlock.create({
|
|
94
|
+
const textBlock = TextBlock.create({ styleOverrides: { widthFactor: 34, lineHeight: 3, lineSpacingFactor: 12, isBold: true } });
|
|
91
95
|
const paragraph = Paragraph.create({ styleOverrides: { lineHeight: 56, color: 0xff0000, frame: { shape: "octagon" } } });
|
|
92
96
|
const run = TextRun.create({ content: "test", styleOverrides: { widthFactor: 78, fontName: "override", leader: { wantElbow: true } } });
|
|
93
97
|
textBlock.paragraphs.push(paragraph);
|
|
@@ -113,12 +117,13 @@ describe("layoutTextBlock", () => {
|
|
|
113
117
|
expect(runStyle.isBold).to.be.true;
|
|
114
118
|
});
|
|
115
119
|
it("does not inherit overrides in TextBlock or Paragraph when Run has same propertied overriden - unless they are TextBlock specific settings", () => {
|
|
116
|
-
const textBlock = TextBlock.create({
|
|
120
|
+
const textBlock = TextBlock.create({ styleOverrides: { widthFactor: 34, lineHeight: 3, lineSpacingFactor: 12, isBold: true } });
|
|
117
121
|
const paragraph = Paragraph.create({ styleOverrides: { lineHeight: 56, color: 0xff0000 } });
|
|
118
122
|
const run = TextRun.create({ content: "test", styleOverrides: { widthFactor: 78, lineHeight: 6, lineSpacingFactor: 24, fontName: "override", isBold: false } });
|
|
119
123
|
textBlock.paragraphs.push(paragraph);
|
|
120
124
|
textBlock.appendRun(run);
|
|
121
125
|
const tb = doLayout(textBlock, {
|
|
126
|
+
textStyleId: "0x42",
|
|
122
127
|
findTextStyle: findTextStyleImpl,
|
|
123
128
|
});
|
|
124
129
|
expect(tb.lines.length).to.equal(1);
|
|
@@ -136,7 +141,7 @@ describe("layoutTextBlock", () => {
|
|
|
136
141
|
});
|
|
137
142
|
it("takes child overrides over parent overrides", () => {
|
|
138
143
|
//...unless they are TextBlock specific as covered in other tests
|
|
139
|
-
const textBlock = TextBlock.create({
|
|
144
|
+
const textBlock = TextBlock.create({ styleOverrides: { fontName: "grandparent" } });
|
|
140
145
|
const paragraph = Paragraph.create({ styleOverrides: { fontName: "parent" } });
|
|
141
146
|
const run = TextRun.create({ content: "test", styleOverrides: { fontName: "child" } });
|
|
142
147
|
textBlock.paragraphs.push(paragraph);
|
|
@@ -155,7 +160,7 @@ describe("layoutTextBlock", () => {
|
|
|
155
160
|
this.skip();
|
|
156
161
|
}
|
|
157
162
|
// Initialize a new TextBlockLayout object
|
|
158
|
-
const textBlock = TextBlock.create({ width: 50,
|
|
163
|
+
const textBlock = TextBlock.create({ width: 50, styleOverrides: { widthFactor: 34, color: 0x00ff00, fontName: "arial" } });
|
|
159
164
|
const run0 = TextRun.create({
|
|
160
165
|
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pretium mi sit amet magna malesuada, at venenatis ante eleifend.",
|
|
161
166
|
styleOverrides: { lineHeight: 56, color: 0xff0000 },
|
|
@@ -262,7 +267,7 @@ describe("layoutTextBlock", () => {
|
|
|
262
267
|
expect(marginRange.high.y).to.equal(layoutRange.high.y + (margins.top ?? 0));
|
|
263
268
|
};
|
|
264
269
|
const makeTextBlock = (margins) => {
|
|
265
|
-
const textBlock = TextBlock.create({
|
|
270
|
+
const textBlock = TextBlock.create({ styleOverrides: { lineSpacingFactor: 0 }, margins });
|
|
266
271
|
textBlock.appendRun(makeTextRun("abc"));
|
|
267
272
|
textBlock.appendRun(makeTextRun("defg"));
|
|
268
273
|
return textBlock;
|
|
@@ -287,7 +292,7 @@ describe("layoutTextBlock", () => {
|
|
|
287
292
|
});
|
|
288
293
|
describe("range", () => {
|
|
289
294
|
it("aligns text to center based on height of stacked fraction", () => {
|
|
290
|
-
const textBlock = TextBlock.create(
|
|
295
|
+
const textBlock = TextBlock.create();
|
|
291
296
|
const fractionRun = FractionRun.create({ numerator: "1", denominator: "2" });
|
|
292
297
|
const textRun = TextRun.create({ content: "text" });
|
|
293
298
|
textBlock.appendRun(fractionRun);
|
|
@@ -305,7 +310,7 @@ describe("layoutTextBlock", () => {
|
|
|
305
310
|
expect(round(textLayout.offsetFromLine.y, 3)).to.equal(.375);
|
|
306
311
|
});
|
|
307
312
|
it("produces one line per paragraph if document width <= 0", () => {
|
|
308
|
-
const textBlock = TextBlock.create(
|
|
313
|
+
const textBlock = TextBlock.create();
|
|
309
314
|
for (let i = 0; i < 4; i++) {
|
|
310
315
|
const layout = doLayout(textBlock);
|
|
311
316
|
if (i === 0) {
|
|
@@ -343,7 +348,7 @@ describe("layoutTextBlock", () => {
|
|
|
343
348
|
it("produces a new line for each LineBreakRun", () => {
|
|
344
349
|
const lineSpacingFactor = 0.5;
|
|
345
350
|
const lineHeight = 1;
|
|
346
|
-
const textBlock = TextBlock.create({
|
|
351
|
+
const textBlock = TextBlock.create({ styleOverrides: { lineSpacingFactor, lineHeight } });
|
|
347
352
|
textBlock.appendRun(TextRun.create({ content: "abc" }));
|
|
348
353
|
textBlock.appendRun(LineBreakRun.create());
|
|
349
354
|
textBlock.appendRun(TextRun.create({ content: "def" }));
|
|
@@ -363,7 +368,7 @@ describe("layoutTextBlock", () => {
|
|
|
363
368
|
it("applies tab shifts", () => {
|
|
364
369
|
const lineHeight = 1;
|
|
365
370
|
const tabInterval = 6;
|
|
366
|
-
const textBlock = TextBlock.create({
|
|
371
|
+
const textBlock = TextBlock.create({ styleOverrides: { lineHeight, tabInterval } });
|
|
367
372
|
// Appends a line that looks like `stringOne` TAB `stringTwo` LINEBREAK
|
|
368
373
|
const appendLine = (stringOne, stringTwo, wantLineBreak = true) => {
|
|
369
374
|
if (stringOne.length > 0)
|
|
@@ -395,7 +400,7 @@ describe("layoutTextBlock", () => {
|
|
|
395
400
|
it("applies consecutive tab shifts", () => {
|
|
396
401
|
const lineHeight = 1;
|
|
397
402
|
const tabInterval = 6;
|
|
398
|
-
const textBlock = TextBlock.create({
|
|
403
|
+
const textBlock = TextBlock.create({ styleOverrides: { lineHeight, tabInterval } });
|
|
399
404
|
// line 0: ----->----->----->LINEBREAK
|
|
400
405
|
textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval } }));
|
|
401
406
|
textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval } }));
|
|
@@ -437,7 +442,7 @@ describe("layoutTextBlock", () => {
|
|
|
437
442
|
it("computes ranges based on custom line spacing and line height", () => {
|
|
438
443
|
const lineSpacingFactor = 2;
|
|
439
444
|
const lineHeight = 3;
|
|
440
|
-
const textBlock = TextBlock.create({
|
|
445
|
+
const textBlock = TextBlock.create({ styleOverrides: { lineSpacingFactor, lineHeight } });
|
|
441
446
|
textBlock.appendRun(TextRun.create({ content: "abc" }));
|
|
442
447
|
textBlock.appendRun(LineBreakRun.create());
|
|
443
448
|
textBlock.appendRun(TextRun.create({ content: "def" }));
|
|
@@ -467,7 +472,7 @@ describe("layoutTextBlock", () => {
|
|
|
467
472
|
if (!isIntlSupported()) {
|
|
468
473
|
this.skip();
|
|
469
474
|
}
|
|
470
|
-
const block = TextBlock.create({
|
|
475
|
+
const block = TextBlock.create({ width: 3, styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
|
|
471
476
|
function expectBlockRange(width, height) {
|
|
472
477
|
const layout = doLayout(block);
|
|
473
478
|
expectRange(width, height, layout.range);
|
|
@@ -491,7 +496,7 @@ describe("layoutTextBlock", () => {
|
|
|
491
496
|
if (!isIntlSupported()) {
|
|
492
497
|
this.skip();
|
|
493
498
|
}
|
|
494
|
-
const block = TextBlock.create({
|
|
499
|
+
const block = TextBlock.create({ styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
|
|
495
500
|
function expectBlockRange(width, height) {
|
|
496
501
|
const layout = doLayout(block);
|
|
497
502
|
expectRange(width, height, layout.range);
|
|
@@ -508,7 +513,7 @@ describe("layoutTextBlock", () => {
|
|
|
508
513
|
if (!isIntlSupported()) {
|
|
509
514
|
this.skip();
|
|
510
515
|
}
|
|
511
|
-
const block = TextBlock.create({
|
|
516
|
+
const block = TextBlock.create({ styleOverrides: { lineSpacingFactor: 0 } });
|
|
512
517
|
function expectBlockRange(width, height) {
|
|
513
518
|
const layout = doLayout(block);
|
|
514
519
|
expectRange(width, height, layout.range);
|
|
@@ -582,7 +587,7 @@ describe("layoutTextBlock", () => {
|
|
|
582
587
|
});
|
|
583
588
|
describe("word-wrapping", () => {
|
|
584
589
|
function expectLines(input, width, expectedLines) {
|
|
585
|
-
const textBlock = TextBlock.create(
|
|
590
|
+
const textBlock = TextBlock.create();
|
|
586
591
|
textBlock.width = width;
|
|
587
592
|
const run = makeTextRun(input);
|
|
588
593
|
textBlock.appendRun(run);
|
|
@@ -596,7 +601,7 @@ describe("layoutTextBlock", () => {
|
|
|
596
601
|
if (!isIntlSupported()) {
|
|
597
602
|
this.skip();
|
|
598
603
|
}
|
|
599
|
-
const textBlock = TextBlock.create(
|
|
604
|
+
const textBlock = TextBlock.create();
|
|
600
605
|
textBlock.width = 6;
|
|
601
606
|
textBlock.appendRun(makeTextRun("ab"));
|
|
602
607
|
expect(doLayout(textBlock).lines.length).to.equal(1);
|
|
@@ -685,7 +690,7 @@ describe("layoutTextBlock", () => {
|
|
|
685
690
|
this.skip();
|
|
686
691
|
}
|
|
687
692
|
const lineHeight = 1;
|
|
688
|
-
const textBlock = TextBlock.create({
|
|
693
|
+
const textBlock = TextBlock.create({ styleOverrides: { lineHeight } });
|
|
689
694
|
// line 0: -->-->------> LINEBREAK
|
|
690
695
|
textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval: 3 } }));
|
|
691
696
|
textBlock.appendRun(TabRun.create({ styleOverrides: { tabInterval: 3 } }));
|
|
@@ -755,7 +760,7 @@ describe("layoutTextBlock", () => {
|
|
|
755
760
|
if (!isIntlSupported()) {
|
|
756
761
|
this.skip();
|
|
757
762
|
}
|
|
758
|
-
const textBlock = TextBlock.create(
|
|
763
|
+
const textBlock = TextBlock.create();
|
|
759
764
|
for (const str of ["The ", "quick brown", " fox jumped over ", "the lazy ", "dog"]) {
|
|
760
765
|
textBlock.appendRun(makeTextRun(str));
|
|
761
766
|
}
|
|
@@ -799,7 +804,7 @@ describe("layoutTextBlock", () => {
|
|
|
799
804
|
if (!isIntlSupported()) {
|
|
800
805
|
this.skip();
|
|
801
806
|
}
|
|
802
|
-
const block = TextBlock.create(
|
|
807
|
+
const block = TextBlock.create();
|
|
803
808
|
block.appendRun(makeTextRun("aa")); // 2 chars wide
|
|
804
809
|
block.appendRun(makeTextRun("bb ccc d ee")); // 11 chars wide
|
|
805
810
|
block.appendRun(makeTextRun("ff ggg h")); // 8 chars wide
|
|
@@ -839,7 +844,7 @@ describe("layoutTextBlock", () => {
|
|
|
839
844
|
if (!isIntlSupported()) {
|
|
840
845
|
this.skip();
|
|
841
846
|
}
|
|
842
|
-
const block = TextBlock.create({
|
|
847
|
+
const block = TextBlock.create({ styleOverrides: { lineHeight: 1, lineSpacingFactor: 0 } });
|
|
843
848
|
block.appendRun(makeTextRun("abc defg"));
|
|
844
849
|
const layout1 = doLayout(block);
|
|
845
850
|
let width = layout1.range.xLength();
|
|
@@ -856,14 +861,14 @@ describe("layoutTextBlock", () => {
|
|
|
856
861
|
const result = layout.toResult();
|
|
857
862
|
const textStyleResolver = new TextStyleResolver({
|
|
858
863
|
textBlock,
|
|
864
|
+
textStyleId: "",
|
|
859
865
|
iModel: {},
|
|
860
|
-
modelId: undefined,
|
|
861
866
|
findTextStyle: () => TextStyleSettings.defaults
|
|
862
867
|
});
|
|
863
868
|
return { textStyleResolver, result };
|
|
864
869
|
}
|
|
865
870
|
it("should return an empty array if source type is not text", function () {
|
|
866
|
-
const textBlock = TextBlock.create(
|
|
871
|
+
const textBlock = TextBlock.create();
|
|
867
872
|
const fractionRun = FractionRun.create({ numerator: "1", denominator: "2" });
|
|
868
873
|
textBlock.appendRun(fractionRun);
|
|
869
874
|
const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
|
|
@@ -881,7 +886,7 @@ describe("layoutTextBlock", () => {
|
|
|
881
886
|
expect(graphemeRanges).to.be.an("array").that.is.empty;
|
|
882
887
|
});
|
|
883
888
|
it("should handle empty text content", function () {
|
|
884
|
-
const textBlock = TextBlock.create(
|
|
889
|
+
const textBlock = TextBlock.create();
|
|
885
890
|
const textRun = TextRun.create({ content: "" });
|
|
886
891
|
textBlock.appendRun(textRun);
|
|
887
892
|
const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
|
|
@@ -899,7 +904,7 @@ describe("layoutTextBlock", () => {
|
|
|
899
904
|
expect(graphemeRanges).to.be.an("array").that.is.empty;
|
|
900
905
|
});
|
|
901
906
|
it("should compute grapheme offsets correctly for a given text", function () {
|
|
902
|
-
const textBlock = TextBlock.create(
|
|
907
|
+
const textBlock = TextBlock.create();
|
|
903
908
|
const textRun = TextRun.create({ content: "hello" });
|
|
904
909
|
textBlock.appendRun(textRun);
|
|
905
910
|
const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
|
|
@@ -919,7 +924,7 @@ describe("layoutTextBlock", () => {
|
|
|
919
924
|
expect(graphemeRanges[4].high.x).to.equal(5);
|
|
920
925
|
});
|
|
921
926
|
it("should compute grapheme offsets correctly for non-English text", function () {
|
|
922
|
-
const textBlock = TextBlock.create(
|
|
927
|
+
const textBlock = TextBlock.create();
|
|
923
928
|
// Hindi - "Paragraph"
|
|
924
929
|
const textRun = TextRun.create({ content: "अनुच्छेद" });
|
|
925
930
|
textBlock.appendRun(textRun);
|
|
@@ -942,7 +947,7 @@ describe("layoutTextBlock", () => {
|
|
|
942
947
|
expect(graphemeRanges[3].high.x).to.equal(8);
|
|
943
948
|
});
|
|
944
949
|
it("should compute grapheme offsets correctly for emoji content", function () {
|
|
945
|
-
const textBlock = TextBlock.create(
|
|
950
|
+
const textBlock = TextBlock.create();
|
|
946
951
|
const textRun = TextRun.create({ content: "👨👦" });
|
|
947
952
|
textBlock.appendRun(textRun);
|
|
948
953
|
const { textStyleResolver, result } = getLayoutResultAndStyleResolver(textBlock);
|
|
@@ -979,9 +984,9 @@ describe("layoutTextBlock", () => {
|
|
|
979
984
|
expect(comic).to.equal(3);
|
|
980
985
|
expect(iModel.fonts.findId({ name: "Consolas" })).to.be.undefined;
|
|
981
986
|
function test(fontName, expectedFontId) {
|
|
982
|
-
const textBlock = TextBlock.create(
|
|
987
|
+
const textBlock = TextBlock.create();
|
|
983
988
|
textBlock.appendRun(TextRun.create({ styleOverrides: { fontName } }));
|
|
984
|
-
const textStyleResolver = new TextStyleResolver({ textBlock, iModel });
|
|
989
|
+
const textStyleResolver = new TextStyleResolver({ textBlock, textStyleId: "", iModel });
|
|
985
990
|
const layout = layoutTextBlock({ textBlock, iModel, textStyleResolver });
|
|
986
991
|
const run = layout.lines[0].runs[0];
|
|
987
992
|
expect(run).not.to.be.undefined;
|
|
@@ -995,7 +1000,6 @@ describe("layoutTextBlock", () => {
|
|
|
995
1000
|
});
|
|
996
1001
|
function computeDimensions(args) {
|
|
997
1002
|
const textBlock = TextBlock.create({
|
|
998
|
-
styleId: "",
|
|
999
1003
|
styleOverrides: {
|
|
1000
1004
|
lineHeight: args.height,
|
|
1001
1005
|
widthFactor: args.width,
|
|
@@ -1009,7 +1013,7 @@ describe("layoutTextBlock", () => {
|
|
|
1009
1013
|
fontName: args.font ?? "Vera",
|
|
1010
1014
|
},
|
|
1011
1015
|
}));
|
|
1012
|
-
const textStyleResolver = new TextStyleResolver({ textBlock, iModel });
|
|
1016
|
+
const textStyleResolver = new TextStyleResolver({ textBlock, textStyleId: "", iModel });
|
|
1013
1017
|
const range = layoutTextBlock({ textBlock, iModel, textStyleResolver }).range;
|
|
1014
1018
|
return { x: range.high.x - range.low.x, y: range.high.y - range.low.y };
|
|
1015
1019
|
}
|
|
@@ -1085,7 +1089,7 @@ describe("produceTextBlockGeometry", () => {
|
|
|
1085
1089
|
return LineBreakRun.create({ styleOverrides });
|
|
1086
1090
|
}
|
|
1087
1091
|
function makeTextBlock(runs) {
|
|
1088
|
-
const block = TextBlock.create(
|
|
1092
|
+
const block = TextBlock.create();
|
|
1089
1093
|
for (const run of runs) {
|
|
1090
1094
|
block.appendRun(run);
|
|
1091
1095
|
}
|