@itwin/core-backend 5.6.0-dev.11 → 5.6.0-dev.12

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.
Files changed (27) hide show
  1. package/lib/cjs/annotations/TextAnnotationElement.d.ts +1 -1
  2. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  3. package/lib/cjs/annotations/TextAnnotationElement.js +14 -1
  4. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  5. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +14 -0
  6. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  7. package/lib/cjs/annotations/TextAnnotationGeometry.js +29 -10
  8. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  9. package/lib/cjs/annotations/TextBlockLayout.js +6 -6
  10. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  11. package/lib/esm/annotations/TextAnnotationElement.d.ts +1 -1
  12. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  13. package/lib/esm/annotations/TextAnnotationElement.js +14 -1
  14. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  15. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +14 -0
  16. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  17. package/lib/esm/annotations/TextAnnotationGeometry.js +29 -10
  18. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  19. package/lib/esm/annotations/TextBlockLayout.js +6 -6
  20. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  21. package/lib/esm/test/annotations/LeaderGeometry.test.js +2 -3
  22. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  23. package/lib/esm/test/annotations/TextAnnotation.test.js +39 -4
  24. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  25. package/lib/esm/test/annotations/TextBlock.test.js +49 -42
  26. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  27. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.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 { expect } from \"chai\";\r\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { AnnotationTextStyleProps, FieldRun, FontType, FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps, VersionedJSON } from \"@itwin/core-common\";\r\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\r\nimport { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\r\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { DefinitionModel } from \"../../Model\";\r\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\r\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\r\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\r\nimport { FontFile } from \"../../FontFile\";\r\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\r\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\r\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\r\nimport { appendTextAnnotationGeometry } from \"../../annotations/TextAnnotationGeometry\";\r\nimport { IModelElementCloneContext } from \"../../IModelElementCloneContext\";\r\nimport * as fs from \"fs\";\r\n\r\nfunction mockIModel(): IModelDb {\r\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\r\n fonts: {\r\n findId: () => 0,\r\n } as any,\r\n computeRangesForText: computeTextRangeAsStringLength,\r\n forEachMetaData: () => undefined,\r\n };\r\n\r\n return iModel as IModelDb;\r\n}\r\n\r\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\r\n const styleOverrides = { font: { name: \"Karla\" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };\r\n const block = textBlock ?? TextBlock.create({ styleOverrides });\r\n if (!textBlock) {\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\r\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\r\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\r\n }\r\n\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\r\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\r\n annotation.offset = Point3d.create(10, -5, 0);\r\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\r\n return annotation;\r\n}\r\n\r\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\r\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\r\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n return subj;\r\n}\r\n\r\n\r\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\r\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\r\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\r\n\r\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\r\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\r\n const viewRange = new Range2d(0, 0, 500, 500);\r\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\r\n\r\n return { category, model };\r\n}\r\n\r\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\r\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\r\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\r\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\r\n\r\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\r\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\r\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\r\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\r\n\r\n return { category, model };\r\n}\r\n\r\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\r\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\r\n const iModel = StandaloneDb.createEmpty(filePath, {\r\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\r\n client: \"integration tests\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n await iModel.fonts.embedFontFile({\r\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\r\n })\r\n\r\n return iModel;\r\n}\r\n\r\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModelId: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\r\n return AnnotationTextStyle.create(\r\n iModel,\r\n {\r\n definitionModelId,\r\n name,\r\n settings,\r\n description: \"description\",\r\n }\r\n )\r\n}\r\n\r\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\r\n const placement: Placement2dProps = {\r\n origin: { x: 0, y: 0 },\r\n angle: Angle.createDegrees(0).toJSON(),\r\n };\r\n\r\n return TextAnnotation2d.create(\r\n imodel,\r\n {\r\n ...createArgs,\r\n placement,\r\n }\r\n );\r\n}\r\n\r\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\r\n const placement: Placement3dProps = {\r\n origin: { x: 0, y: 0, z: 0 },\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\r\n };\r\n\r\n return TextAnnotation3d.create(\r\n imodel,\r\n {\r\n ...createArgs,\r\n placement,\r\n }\r\n );\r\n}\r\n\r\ndescribe(\"TextAnnotation element\", () => {\r\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\r\n return TextAnnotation2d.fromJSON({\r\n category: \"0x12\",\r\n model: \"0x34\",\r\n code: {\r\n spec: \"0x56\",\r\n scope: \"0x78\",\r\n },\r\n classFullName: TextAnnotation2d.classFullName,\r\n placement: {\r\n origin: { x: 0, y: 0 },\r\n angle: 0,\r\n },\r\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\r\n ...props,\r\n }, mockIModel());\r\n }\r\n\r\n describe(\"versioning\", () => {\r\n it(\"throws if the JSON has no version\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(\"JSON version is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON has no data\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n }),\r\n })).to.throw(\"JSON data is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON version is too new\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: \"999.999.999\",\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);\r\n });\r\n\r\n it(\"throws if the JSON version is old and cannot be migrated\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: \"0.0.1\",\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);\r\n });\r\n })\r\n\r\n describe(\"getAnnotation\", () => {\r\n it(\"returns undefined if not provided\", () => {\r\n expect(makeElement().getAnnotation()).to.be.undefined;\r\n });\r\n\r\n it(\"converts JSON string to class instance\", () => {\r\n const elem = makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\r\n });\r\n\r\n const anno = elem.getAnnotation()!;\r\n expect(anno).not.to.be.undefined;\r\n expect(anno.textBlock.isEmpty).to.be.true;\r\n expect(elem.defaultTextStyle).not.to.be.undefined;\r\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\r\n });\r\n\r\n it(\"produces a new object each time it is called\", () => {\r\n const elem = makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n });\r\n\r\n const anno1 = elem.getAnnotation()!;\r\n const anno2 = elem.getAnnotation()!;\r\n expect(anno1).not.to.equal(anno2);\r\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\r\n });\r\n });\r\n\r\n describe(\"setAnnotation\", () => {\r\n it(\"updates properties\", () => {\r\n const elem = makeElement();\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\r\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\r\n elem.setAnnotation(annotation);\r\n\r\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\r\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\r\n });\r\n });\r\n\r\n describe(\"getReferenceIds\", () => {\r\n function expectReferenceIds(expected: Id64String[], element: TextAnnotation2d): void {\r\n const actual = Array.from(element.getReferenceIds()).sort();\r\n\r\n // reference Ids get a prefix indicating their type ('e' for 'element')\r\n expected = expected.map((id) => `e${id}`);\r\n\r\n // the superclasses provide some reference Ids (code spec, model, category)\r\n const baseIds = [\"e0x12\", \"e0x78\", \"m0x34\"];\r\n expected.push(...baseIds);\r\n\r\n expected = expected.sort();\r\n expect(actual).to.deep.equal(expected);\r\n }\r\n\r\n it(\"reports default text style and field hosts\", () => {\r\n // makeElement sets defaultTextStyle to \"0x21\"\r\n const elem = makeElement();\r\n expectReferenceIds([\"0x21\"], elem);\r\n\r\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0x123\");\r\n expectReferenceIds([\"0x123\"], elem);\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x456\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }));\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x789\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"LastMod\" },\r\n }));\r\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\r\n expectReferenceIds([\"0x123\", \"0x456\", \"0x789\"], elem);\r\n\r\n elem.defaultTextStyle = undefined;\r\n expectReferenceIds([\"0x456\", \"0x789\"], elem);\r\n\r\n elem.setAnnotation(TextAnnotation.create());\r\n expectReferenceIds([], elem);\r\n });\r\n\r\n it(\"does not report invalid Ids\", () => {\r\n const elem = makeElement();\r\n elem.defaultTextStyle = undefined;\r\n expectReferenceIds([], elem);\r\n\r\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0\");\r\n expectReferenceIds([], elem);\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }));\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x123\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"LastMod\" },\r\n }));\r\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\r\n\r\n expectReferenceIds([\"0x123\"], elem);\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation3d Persistence\", () => {\r\n let imodel: StandaloneDb;\r\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"TextAnnotation3d\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n\r\n createElement3dArgs = { category, model };\r\n });\r\n\r\n after(() => imodel.close());\r\n\r\n it(\"creating element does not automatically compute the geometry\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el = createElement3d(imodel, args);\r\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\r\n expect(el.geom).to.be.undefined;\r\n });\r\n\r\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\r\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\r\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\r\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\r\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\r\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\r\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\r\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\r\n }\r\n\r\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\r\n async function test(annotation?: TextAnnotation): Promise<void> {\r\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\r\n if (annotation) {\r\n el0.setAnnotation(annotation);\r\n }\r\n\r\n expectPlacement3d(el0, false);\r\n\r\n const elId = el0.insert()\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation3d).to.be.true;\r\n\r\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\r\n\r\n const anno = el1.getAnnotation();\r\n\r\n if (!annotation) {\r\n expect(anno).to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\r\n } else {\r\n expect(anno).not.to.be.undefined;\r\n expect(anno!.equals(annotation)).to.be.true;\r\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\r\n }\r\n }\r\n\r\n it(\"roundtrips an empty annotation\", async () => { await test(); });\r\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation2d Persistence\", () => {\r\n let imodel: StandaloneDb;\r\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"TextAnnotation2d\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n\r\n createElement2dArgs = { category, model };\r\n });\r\n\r\n after(() => {\r\n imodel.saveChanges(\"tests\");\r\n imodel.close();\r\n });\r\n\r\n it(\"creating element does not automatically compute the geometry\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el = createElement2d(imodel, args);\r\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\r\n expect(el.geom).to.be.undefined;\r\n });\r\n\r\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\r\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\r\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\r\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\r\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\r\n }\r\n\r\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\r\n async function test(annotation?: TextAnnotation): Promise<void> {\r\n const el0 = createElement2d(imodel, createElement2dArgs);\r\n if (annotation) {\r\n el0.setAnnotation(annotation);\r\n }\r\n\r\n expectPlacement2d(el0, false);\r\n\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation2d).to.be.true;\r\n\r\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\r\n\r\n const anno = el1.getAnnotation();\r\n\r\n if (!annotation) {\r\n expect(anno).to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\r\n } else {\r\n expect(anno).not.to.be.undefined;\r\n expect(anno!.equals(annotation)).to.be.true;\r\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n }\r\n }\r\n\r\n it(\"roundtrips an empty annotation\", async () => { await test(); });\r\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\r\n });\r\n });\r\n\r\n describe(\"defaultTextStyle\", () => {\r\n let imodel: StandaloneDb;\r\n let seedSubjectId: string;\r\n let seedDefinitionModelId: string;\r\n let seedStyleId: string;\r\n let seedStyleId2: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"DefaultTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n expect(differentStyleId).not.to.be.undefined;\r\n\r\n seedSubjectId = jobSubjectId;\r\n seedDefinitionModelId = definitionModel;\r\n seedStyleId = styleId;\r\n seedStyleId2 = differentStyleId;\r\n });\r\n\r\n after(() => {\r\n imodel.saveChanges(\"tests\");\r\n imodel.close();\r\n });\r\n\r\n describe(\"TextAnnotation2d\", () => {\r\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(() => {\r\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n createElement2dArgs = { category, model };\r\n });\r\n\r\n it(\"preserves defaultTextStyle after round trip\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\r\n const el0 = createElement2d(imodel, args);\r\n expect(el0.defaultTextStyle).not.to.be.undefined;\r\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\r\n el0.insert();\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1.defaultTextStyle).not.to.be.undefined;\r\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n });\r\n\r\n it(\"produces different geometry when defaultTextStyle changes\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el0 = createElement2d(imodel, args);\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\r\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\r\n\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\r\n\r\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\r\n expect(geom1).not.to.deep.equal(geom2);\r\n });\r\n\r\n it(\"allows defaultTextStyle to be undefined\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n\r\n const el0 = createElement2d(imodel, args);\r\n el0.defaultTextStyle = undefined;\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation2d).to.be.true;\r\n expect(el1.defaultTextStyle).to.be.undefined;\r\n });\r\n\r\n describe(\"onCloned\", () => {\r\n function insertStyledElement(styleId: Id64String | undefined, db: IModelDb): TextAnnotation2d {\r\n const args = { ...createElement2dArgs, defaultTextStyleId: styleId }\r\n const elem = createElement2d(db, args);\r\n elem.insert();\r\n imodel.saveChanges();\r\n return elem;\r\n }\r\n\r\n describe(\"within a single iModel\", () => {\r\n it(\"leaves property hosts intact\", async () => {\r\n const textBlock = TextBlock.create({\r\n styleOverrides: { font: { name: \"Karla\" } },\r\n children: [{\r\n children: [{\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0x123\",\r\n schemaName: \"Fields\",\r\n className: \"TestElement\",\r\n },\r\n propertyPath: { propertyName: \"intProp\" },\r\n }, {\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0xabc\",\r\n schemaName: \"BisCore\",\r\n className: \"Element\",\r\n },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }],\r\n }],\r\n });\r\n\r\n const annotation = TextAnnotation.create({ textBlock, });\r\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\r\n elem.insert();\r\n imodel.saveChanges();\r\n\r\n const context = new IModelElementCloneContext(imodel);\r\n context.remapElement(\"0x123\", \"0x456\");\r\n context.remapElement(\"0xabc\", \"0xdef\");\r\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\r\n\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.textAnnotationData).not.to.be.undefined;\r\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\r\n const para = anno.textBlock.children[0];\r\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x123\");\r\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xabc\");\r\n\r\n });\r\n\r\n it(\"leaves default text style intact\", async () => {\r\n async function clone(styleId: Id64String | undefined, expectedStyleId: Id64String | undefined): Promise<void> {\r\n const elem = insertStyledElement(styleId, imodel);\r\n const context = new IModelElementCloneContext(imodel);\r\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);\r\n\r\n if (styleId) {\r\n // Even an explicit remapping is ignored when cloning within a single iModel\r\n // (per the examples set by most other elements, excluding RenderMaterial).\r\n context.remapElement(styleId, \"0x99887\");\r\n const props2 = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);\r\n }\r\n }\r\n\r\n await clone(seedStyleId, seedStyleId);\r\n await clone(undefined, undefined);\r\n await clone(\"0x12345\", \"0x12345\");\r\n await clone(Id64.invalid, undefined);\r\n });\r\n });\r\n\r\n describe(\"between iModels\", () => {\r\n let dstDb: StandaloneDb;\r\n let dstDefModel: Id64String;\r\n let dstElemArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n dstDb = await createIModel(\"CloneTarget\");\r\n const jobSubjectId = createJobSubjectElement(dstDb, \"Job\").insert();\r\n dstDefModel = DefinitionModel.insert(dstDb, jobSubjectId, \"Definition\");\r\n\r\n const { category, model } = insertDrawingModel(dstDb, jobSubjectId, dstDefModel);\r\n expect(category).not.to.equal(createElement2dArgs.category);\r\n expect(model).not.to.equal(createElement2dArgs.model);\r\n\r\n dstElemArgs = { category, model };\r\n });\r\n\r\n after(() => dstDb.close());\r\n\r\n it(\"remaps property hosts\", async () => {\r\n const textBlock = TextBlock.create({\r\n styleOverrides: { font: { name: \"Karla\" } },\r\n children: [{\r\n children: [{\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0x123\",\r\n schemaName: \"Fields\",\r\n className: \"TestElement\",\r\n },\r\n propertyPath: { propertyName: \"intProp\" },\r\n }, {\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0xabc\",\r\n schemaName: \"BisCore\",\r\n className: \"Element\",\r\n },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }],\r\n }],\r\n });\r\n\r\n const annotation = TextAnnotation.create({ textBlock });\r\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\r\n elem.insert();\r\n imodel.saveChanges();\r\n\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(\"0x123\", \"0x456\");\r\n context.remapElement(\"0xabc\", \"0xdef\");\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.textAnnotationData).not.to.be.undefined;\r\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\r\n const para = anno.textBlock.children[0];\r\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x456\");\r\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xdef\");\r\n });\r\n\r\n it(\"sets default text style to undefined if source style does not exist\", async () => {\r\n const elem = insertStyledElement(\"0x12345\", imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle).to.be.undefined;\r\n });\r\n\r\n it(\"remaps to an existing text style with the same code if present\", async () => {\r\n const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, \"test\", { font: { name: \"Karla\" } }).insert();\r\n expect(dstStyleId).not.to.equal(seedStyleId);\r\n\r\n const srcElem = insertStyledElement(seedStyleId, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle?.id).to.equal(dstStyleId);\r\n });\r\n\r\n it(\"throws an error if definition model is not remapped\", async () => {\r\n const srcElem = insertStyledElement(seedStyleId2, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n await expect(context.cloneElement(srcElem)).to.be.rejectedWith(\"Invalid target model\");\r\n });\r\n\r\n it(\"imports default text style if necessary\", async () => {\r\n const srcElem = insertStyledElement(seedStyleId2, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context.remapElement(seedDefinitionModelId, dstDefModel);\r\n\r\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\r\n const dstStyleId = props.defaultTextStyle!.id;\r\n expect(dstStyleId).not.to.be.undefined;\r\n expect(dstStyleId).not.to.equal(seedStyleId2);\r\n expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;\r\n });\r\n\r\n it(\"remaps multiple occurrences of same style to same Id\", async () => {\r\n const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, \"styyyle\", { font: { name: \"Karla\" } }).insert();\r\n const srcElem1 = insertStyledElement(srcStyleId, imodel);\r\n const srcElem2 = insertStyledElement(srcStyleId, imodel);\r\n const srcElem3 = insertStyledElement(srcStyleId, imodel);\r\n\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context.remapElement(seedDefinitionModelId, dstDefModel);\r\n\r\n const props1 = await context.cloneElement(srcElem1) as TextAnnotation2dProps;\r\n const props2 = await context.cloneElement(srcElem2) as TextAnnotation2dProps;\r\n expect(props1.defaultTextStyle).not.to.be.undefined;\r\n expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);\r\n expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\r\n\r\n const context2 = new IModelElementCloneContext(imodel, dstDb);\r\n context2.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context2.remapElement(seedDefinitionModelId, dstDefModel);\r\n const props3 = await context2.cloneElement(srcElem3) as TextAnnotation2dProps;\r\n expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\r\n });\r\n });\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation3d\", () => {\r\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\r\n\r\n before(() => {\r\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n createElement3dArgs = { category, model };\r\n });\r\n\r\n it(\"preserves defaultTextStyle after round trip\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\r\n const el0 = createElement3d(imodel, args);\r\n expect(el0.defaultTextStyle).not.to.be.undefined;\r\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\r\n el0.insert();\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1.defaultTextStyle).not.to.be.undefined;\r\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n });\r\n\r\n it(\"produces different geometry when defaultTextStyle changes\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el0 = createElement3d(imodel, args);\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\r\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\r\n\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\r\n\r\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\r\n expect(geom1).not.to.deep.equal(geom2);\r\n });\r\n\r\n it(\"allows defaultTextStyle to be undefined\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n\r\n const el0 = createElement3d(imodel, args);\r\n el0.defaultTextStyle = undefined;\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation3d).to.be.true;\r\n expect(el1.defaultTextStyle).to.be.undefined;\r\n });\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"AnnotationTextStyle\", () => {\r\n let imodel: StandaloneDb;\r\n let seedSubjectId: string;\r\n let seedDefinitionModel: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"AnnotationTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n\r\n seedSubjectId = jobSubjectId;\r\n seedDefinitionModel = definitionModel;\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"inserts a style and round-trips through JSON\", async () => {\r\n const textStyle = TextStyleSettings.fromJSON({\r\n font: { name: \"Totally Real Font\" },\r\n isUnderlined: true,\r\n textHeight: 0.5\r\n })\r\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\r\n\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\r\n\r\n const style = el1.settings;\r\n expect(style).not.to.be.undefined;\r\n\r\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\r\n });\r\n\r\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\r\n // Default style should fail since it has no font\r\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // font is required\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { font: { name: \"\" } });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // textHeight should be positive\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid textHeight\", { font: { name: \"Totally Real Font\" }, textHeight: 0 });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // stackedFractionScale should be positive\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { font: { name: \"Totally Real Font\" }, stackedFractionScale: 0 });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n });\r\n\r\n it(\"does not allow updating of elements to invalid styles\", async () => {\r\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { font: { name: \"Totally Real Font\" } });\r\n\r\n const elId = annotationTextStyle.insert();\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\r\n\r\n el1.settings = el1.settings.clone({ font: { name: \"\" } });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ font: { name: \"Totally Real Font\" }, textHeight: 0 });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\r\n\r\n el1.update();\r\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\r\n });\r\n\r\n it(\"uses default style if none specified\", async () => {\r\n const el0 = AnnotationTextStyle.fromJSON({\r\n classFullName: AnnotationTextStyle.classFullName,\r\n model: seedSubjectId,\r\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\r\n }, imodel);\r\n expect(el0.settings).not.to.be.undefined;\r\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\r\n });\r\n\r\n it(\"can update style via cloning\", async () => {\r\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { font: { name: \"Totally Real Font\" } });\r\n const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });\r\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\r\n el0.settings = newStyle;\r\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\r\n });\r\n\r\n describe(\"versioning\", () => {\r\n function makeStyle(props?: Partial<AnnotationTextStyleProps>): AnnotationTextStyle {\r\n return AnnotationTextStyle.fromJSON({\r\n model: \"0x34\",\r\n code: {\r\n spec: \"0x56\",\r\n scope: \"0x78\",\r\n value: \"style\"\r\n },\r\n classFullName: AnnotationTextStyle.classFullName,\r\n ...props,\r\n }, mockIModel());\r\n }\r\n\r\n it(\"throws if the JSON has no version\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n data: TextStyleSettings.defaultProps\r\n }),\r\n })).to.throw(\"JSON version is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON has no data\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n version: TEXT_STYLE_SETTINGS_JSON_VERSION,\r\n }),\r\n })).to.throw(\"JSON data is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON version is too new\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n version: \"999.999.999\",\r\n data: TextStyleSettings.defaultProps\r\n }),\r\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);\r\n });\r\n\r\n it(\"should migrate text style settings from 1.0.0\", () => {\r\n const oldStyleData: TextStyleSettingsProps = {\r\n ...TextStyleSettings.defaultProps,\r\n leader: {\r\n ...TextStyleSettings.defaultProps.leader,\r\n // Explicitly remove terminatorShape to simulate old data\r\n terminatorShape: undefined\r\n }\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.0\",\r\n data: oldStyleData\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const jsonVersion = JSON.parse(jsonStyleData.settings).version;\r\n expect(jsonVersion).to.equal(TEXT_STYLE_SETTINGS_JSON_VERSION);\r\n }\r\n\r\n expect(migratedStyle.settings.leader.terminatorShape).to.not.be.undefined;\r\n\r\n });\r\n\r\n it(\"should return same data when version is 1.0.1\", () => {\r\n const styleData: VersionedJSON<TextStyleSettingsProps> = {\r\n version: \"1.0.1\",\r\n data: TextStyleSettings.defaultProps\r\n\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: styleData.version,\r\n data: styleData.data\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const parsedJson = JSON.parse(jsonStyleData.settings);\r\n expect(parsedJson.version).to.equal(styleData.version);\r\n expect(parsedJson.data).to.deep.equal(styleData.data);\r\n }\r\n });\r\n\r\n it(\"should return defaultProps when styleData is unrecognized\", () => {\r\n const textStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.1\",\r\n data: { invalid: \"data\" }\r\n }),\r\n });\r\n expect(textStyle.settings).to.be.deep.equal(TextStyleSettings.defaultProps);\r\n });\r\n })\r\n\r\n describe(\"onCloned\", () => {\r\n let targetDb: StandaloneDb;\r\n let targetDefModel: string;\r\n\r\n before(async () => {\r\n // The source and target iModel will both contain the Karla font family.\r\n targetDb = await createIModel(\"AnnotationTextStyleTargetDb\");\r\n const jobSubjectId = createJobSubjectElement(targetDb, \"Job\").insert();\r\n targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, \"Definition\");\r\n\r\n // Embed a font into the source iModel that doesn't exist in the target iModel.\r\n const shxName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\r\n const shxBlob = fs.readFileSync(shxName);\r\n const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: \"Cdm\" });\r\n await imodel.fonts.embedFontFile({ file: shxFile });\r\n });\r\n\r\n after(() => targetDb.close());\r\n\r\n it(\"embeds font into target Db if not already embedded\", async () => {\r\n const getFontCounts = () => {\r\n let files = 0;\r\n for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {\r\n files++;\r\n }\r\n\r\n let families = 0;\r\n for (const _ of targetDb.fonts.queryMappedFamilies()) {\r\n families++;\r\n }\r\n\r\n return { files, families };\r\n }\r\n\r\n const initialCounts = getFontCounts();\r\n\r\n const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"karla-style\", TextStyleSettings.fromJSON({ font: { name: \"Karla\" } }));\r\n karlaStyle.insert();\r\n const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cdm-style\", TextStyleSettings.fromJSON({ font: { name: \"Cdm\", type: FontType.Shx } }));\r\n cdmStyle.insert();\r\n\r\n const context = new IModelElementCloneContext(imodel, targetDb);\r\n context.remapElement(seedDefinitionModel, targetDefModel);\r\n\r\n expect(targetDb.fonts.findId({ name: \"Karla\" })).not.to.be.undefined;\r\n await context.cloneElement(karlaStyle);\r\n expect(getFontCounts()).to.deep.equal(initialCounts);\r\n\r\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).to.be.undefined;\r\n await context.cloneElement(cdmStyle);\r\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).not.to.be.undefined;\r\n const finalCounts = getFontCounts();\r\n expect(finalCounts.files).greaterThan(initialCounts.files);\r\n expect(finalCounts.families).greaterThan(initialCounts.families);\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"appendTextAnnotationGeometry\", () => {\r\n let imodel: StandaloneDb;\r\n let seedDefinitionModelId: string;\r\n let seedCategoryId: string;\r\n let seedStyleId: string;\r\n let seedStyleId2: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"DefaultTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n expect(differentStyleId).not.to.be.undefined;\r\n\r\n seedDefinitionModelId = definitionModel;\r\n seedCategoryId = category;\r\n seedStyleId = styleId;\r\n seedStyleId2 = differentStyleId;\r\n });\r\n\r\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1): MockBuilder {\r\n const builder = new MockBuilder();\r\n\r\n const resolver = new TextStyleResolver({\r\n textBlock: annotation.textBlock,\r\n textStyleId: styleId,\r\n iModel: imodel,\r\n });\r\n\r\n const layout = layoutTextBlock({\r\n textBlock: annotation.textBlock,\r\n iModel: imodel,\r\n textStyleResolver: resolver,\r\n });\r\n\r\n const result = appendTextAnnotationGeometry({\r\n annotationProps: annotation.toJSON(),\r\n layout,\r\n textStyleResolver: resolver,\r\n scaleFactor,\r\n builder,\r\n categoryId: seedCategoryId,\r\n });\r\n\r\n expect(result).to.be.true;\r\n return builder;\r\n }\r\n\r\n it(\"produces the same geometry when given the same inputs\", () => {\r\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n\r\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\r\n expect(builder1.params).to.deep.equal(builder2.params);\r\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"produces no geometry when given an empty annotation\", () => {\r\n const block = TextBlock.create();\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\r\n\r\n expect(builder.geometries).to.be.empty;\r\n expect(builder.params).to.be.empty;\r\n expect(builder.textStrings).to.be.empty;\r\n });\r\n\r\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\r\n const block = TextBlock.create();\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n const styleId = createAnnotationTextStyle(\r\n imodel,\r\n seedDefinitionModelId,\r\n \"empty anno style\",\r\n {\r\n font: { name: \"Totally Real Font\" },\r\n frame: {\r\n shape: \"rectangle\",\r\n }\r\n }\r\n ).insert();\r\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\r\n\r\n expect(builder.geometries).not.to.be.empty;\r\n expect(builder.params).not.to.be.empty;\r\n expect(builder.textStrings).to.be.empty;\r\n });\r\n\r\n\r\n it(\"produces different geometry when given different text-content in annotations\", () => {\r\n const anno1 = createAnnotation();\r\n const anno2 = createAnnotation();\r\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { font: { name: \"Totally Real Font\" } } }));\r\n\r\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\r\n\r\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\r\n expect(builder1.params).to.deep.equal(builder2.params);\r\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"produces different geometry when given different default styles\", () => {\r\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\r\n\r\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\r\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"accounts for style overrides in the text\", () => {\r\n const block = TextBlock.create();\r\n block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } }\r\n block.appendParagraph();\r\n block.children[0].styleOverrides = { isBold: true };\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\r\n block.appendParagraph();\r\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\r\n\r\n const annotation = createAnnotation(block);\r\n\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\r\n\r\n expect(builder.textStrings.length).to.equal(2);\r\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\r\n // From override on paragraph\r\n expect(builder.textStrings[0].bold).to.be.true;\r\n // From default style\r\n expect(builder.textStrings[0].italic).to.be.true;\r\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\r\n // From default style\r\n expect(builder.textStrings[1].bold).to.be.false;\r\n // From override on run\r\n expect(builder.textStrings[1].italic).to.be.false;\r\n });\r\n\r\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\r\n const block = TextBlock.create();\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\r\n\r\n const annotation = createAnnotation(block);\r\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\r\n\r\n expect(builder.textStrings.length).to.equal(1);\r\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\r\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\r\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\r\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\r\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\r\n });\r\n\r\n it(\"scales geometry correctly\", () => {\r\n const annotation = createAnnotation();\r\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\r\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\r\n\r\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\r\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"TextAnnotation.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/TextAnnotation.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 { expect } from \"chai\";\r\nimport { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { AnnotationTextStyleProps, FieldRun, FontType, FractionRun, Placement2dProps, Placement3dProps, SubCategoryAppearance, TextAnnotation, TextAnnotation2dProps, TextBlock, TextRun, TextStyleSettings, TextStyleSettingsProps, VersionedJSON } from \"@itwin/core-common\";\r\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\r\nimport { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation2dCreateArgs, TextAnnotation3d, TextAnnotation3dCreateArgs } from \"../../annotations/TextAnnotationElement\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { GeometricElement2d, GeometricElement3d, Subject } from \"../../Element\";\r\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { DefinitionModel } from \"../../Model\";\r\nimport { DrawingCategory, SpatialCategory } from \"../../Category\";\r\nimport { DisplayStyle2d, DisplayStyle3d } from \"../../DisplayStyle\";\r\nimport { CategorySelector, DrawingViewDefinition, ModelSelector, SpatialViewDefinition } from \"../../ViewDefinition\";\r\nimport { FontFile } from \"../../FontFile\";\r\nimport { computeTextRangeAsStringLength, MockBuilder } from \"../AnnotationTestUtils\";\r\nimport { TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\r\nimport { layoutTextBlock, TextStyleResolver } from \"../../annotations/TextBlockLayout\";\r\nimport { appendTextAnnotationGeometry, RenderPriority } from \"../../annotations/TextAnnotationGeometry\";\r\nimport { IModelElementCloneContext } from \"../../IModelElementCloneContext\";\r\nimport * as fs from \"fs\";\r\n\r\nfunction mockIModel(): IModelDb {\r\n const iModel: Pick<IModelDb, \"fonts\" | \"computeRangesForText\" | \"forEachMetaData\"> = {\r\n fonts: {\r\n findId: () => 0,\r\n } as any,\r\n computeRangesForText: computeTextRangeAsStringLength,\r\n forEachMetaData: () => undefined,\r\n };\r\n\r\n return iModel as IModelDb;\r\n}\r\n\r\nfunction createAnnotation(textBlock?: TextBlock): TextAnnotation {\r\n const styleOverrides = { font: { name: \"Karla\" }, margins: { left: 0, right: 1, top: 2, bottom: 3 } };\r\n const block = textBlock ?? TextBlock.create({ styleOverrides });\r\n if (!textBlock) {\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\", styleOverrides }));\r\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides }));\r\n block.appendRun(FractionRun.create({ numerator: \"Harrison\", denominator: \"Wells\", styleOverrides }));\r\n }\r\n\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n annotation.anchor = { vertical: \"middle\", horizontal: \"right\" };\r\n annotation.orientation = YawPitchRollAngles.createDegrees(1, 0, -1);\r\n annotation.offset = Point3d.create(10, -5, 0);\r\n annotation.leaders = [{ startPoint: Point3d.createZero(), attachment: { mode: \"Nearest\" } }]\r\n return annotation;\r\n}\r\n\r\nconst createJobSubjectElement = (iModel: IModelDb, name: string): Subject => {\r\n const subj = Subject.create(iModel, iModel.elements.getRootSubject().id, name);\r\n subj.setJsonProperty(\"Subject\", { Job: name }); // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n return subj;\r\n}\r\n\r\n\r\nconst insertDrawingModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\r\n const category = DrawingCategory.insert(standaloneModel, definitionModel, \"DrawingCategory\", new SubCategoryAppearance());\r\n const [_, model] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Drawing' }, undefined, parentId);\r\n\r\n const displayStyle = DisplayStyle2d.insert(standaloneModel, definitionModel, \"DisplayStyle2d\");\r\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"DrawingCategories\", [category]);\r\n const viewRange = new Range2d(0, 0, 500, 500);\r\n DrawingViewDefinition.insert(standaloneModel, definitionModel, \"Drawing View\", model, categorySelector, displayStyle, viewRange);\r\n\r\n return { category, model };\r\n}\r\n\r\nconst insertSpatialModel = (standaloneModel: StandaloneDb, parentId: Id64String, definitionModel: Id64String) => {\r\n const category = SpatialCategory.insert(standaloneModel, definitionModel, \"spatialCategory\", new SubCategoryAppearance());\r\n const [_, model] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(standaloneModel, { spec: '0x1', scope: '0x1', value: 'Spatial' }, undefined, parentId);\r\n const modelSelector = ModelSelector.insert(standaloneModel, definitionModel, \"SpatialModelSelector\", [model]);\r\n\r\n const displayStyle = DisplayStyle3d.insert(standaloneModel, definitionModel, \"DisplayStyle3d\");\r\n const categorySelector = CategorySelector.insert(standaloneModel, definitionModel, \"spatialCategories\", [category]);\r\n const viewRange = new Range3d(0, 0, 0, 500, 500, 500);\r\n SpatialViewDefinition.insertWithCamera(standaloneModel, definitionModel, \"spatial View\", modelSelector, categorySelector, displayStyle, viewRange);\r\n\r\n return { category, model };\r\n}\r\n\r\nconst createIModel = async (name: string): Promise<StandaloneDb> => {\r\n const filePath = IModelTestUtils.prepareOutputFile(\"annotationTests\", `${name}.bim`);\r\n const iModel = StandaloneDb.createEmpty(filePath, {\r\n rootSubject: { name: `${name} tests`, description: `${name} tests` },\r\n client: \"integration tests\",\r\n globalOrigin: { x: 0, y: 0 },\r\n projectExtents: { low: { x: -500, y: -500, z: -50 }, high: { x: 500, y: 500, z: 50 } },\r\n guid: Guid.createValue(),\r\n });\r\n await iModel.fonts.embedFontFile({\r\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\r\n })\r\n\r\n return iModel;\r\n}\r\n\r\nconst createAnnotationTextStyle = (iModel: IModelDb, definitionModelId: Id64String, name: string, settings: TextStyleSettingsProps = TextStyleSettings.defaultProps): AnnotationTextStyle => {\r\n return AnnotationTextStyle.create(\r\n iModel,\r\n {\r\n definitionModelId,\r\n name,\r\n settings,\r\n description: \"description\",\r\n }\r\n )\r\n}\r\n\r\nfunction createElement2d(imodel: IModelDb, createArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">): TextAnnotation2d {\r\n const placement: Placement2dProps = {\r\n origin: { x: 0, y: 0 },\r\n angle: Angle.createDegrees(0).toJSON(),\r\n };\r\n\r\n return TextAnnotation2d.create(\r\n imodel,\r\n {\r\n ...createArgs,\r\n placement,\r\n }\r\n );\r\n}\r\n\r\nfunction createElement3d(imodel: IModelDb, createArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">): TextAnnotation3d {\r\n const placement: Placement3dProps = {\r\n origin: { x: 0, y: 0, z: 0 },\r\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\r\n };\r\n\r\n return TextAnnotation3d.create(\r\n imodel,\r\n {\r\n ...createArgs,\r\n placement,\r\n }\r\n );\r\n}\r\n\r\ndescribe(\"TextAnnotation element\", () => {\r\n function makeElement(props?: Partial<TextAnnotation2dProps>): TextAnnotation2d {\r\n return TextAnnotation2d.fromJSON({\r\n category: \"0x12\",\r\n model: \"0x34\",\r\n code: {\r\n spec: \"0x56\",\r\n scope: \"0x78\",\r\n },\r\n classFullName: TextAnnotation2d.classFullName,\r\n placement: {\r\n origin: { x: 0, y: 0 },\r\n angle: 0,\r\n },\r\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x21\").toJSON(),\r\n ...props,\r\n }, mockIModel());\r\n }\r\n\r\n describe(\"versioning\", () => {\r\n it(\"throws if the JSON has no version\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(\"JSON version is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON has no data\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n }),\r\n })).to.throw(\"JSON data is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON version is too new\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: \"999.999.999\",\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_ANNOTATION_JSON_VERSION}. Application update required to understand data.`);\r\n });\r\n\r\n it(\"throws if the JSON version is old and cannot be migrated\", () => {\r\n expect(() => makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: \"0.0.1\",\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n })).to.throw(`Migration for textAnnotationData from version 0.0.1 to ${TEXT_ANNOTATION_JSON_VERSION} failed.`);\r\n });\r\n })\r\n\r\n describe(\"getAnnotation\", () => {\r\n it(\"returns undefined if not provided\", () => {\r\n expect(makeElement().getAnnotation()).to.be.undefined;\r\n });\r\n\r\n it(\"converts JSON string to class instance\", () => {\r\n const elem = makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x42\").toJSON()\r\n });\r\n\r\n const anno = elem.getAnnotation()!;\r\n expect(anno).not.to.be.undefined;\r\n expect(anno.textBlock.isEmpty).to.be.true;\r\n expect(elem.defaultTextStyle).not.to.be.undefined;\r\n expect(elem.defaultTextStyle!.id).to.equal(\"0x42\");\r\n });\r\n\r\n it(\"produces a new object each time it is called\", () => {\r\n const elem = makeElement({\r\n textAnnotationData: JSON.stringify({\r\n version: TEXT_ANNOTATION_JSON_VERSION,\r\n data: {\r\n textBlock: TextBlock.create().toJSON()\r\n }\r\n }),\r\n });\r\n\r\n const anno1 = elem.getAnnotation()!;\r\n const anno2 = elem.getAnnotation()!;\r\n expect(anno1).not.to.equal(anno2);\r\n expect(anno1.textBlock.equals(anno2.textBlock)).to.be.true;\r\n });\r\n });\r\n\r\n describe(\"setAnnotation\", () => {\r\n it(\"updates properties\", () => {\r\n const elem = makeElement();\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(TextRun.create({ content: \"text\" }));\r\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\r\n elem.setAnnotation(annotation);\r\n\r\n expect(elem.getAnnotation()!.toJSON()).to.deep.equal(annotation.toJSON());\r\n expect(elem.getAnnotation()!.toJSON()).not.to.equal(annotation.toJSON());\r\n });\r\n });\r\n\r\n describe(\"getReferenceIds\", () => {\r\n function expectReferenceIds(expected: Id64String[], element: TextAnnotation2d): void {\r\n const actual = Array.from(element.getReferenceIds()).sort();\r\n\r\n // reference Ids get a prefix indicating their type ('e' for 'element')\r\n expected = expected.map((id) => `e${id}`);\r\n\r\n // the superclasses provide some reference Ids (code spec, model, category)\r\n const baseIds = [\"e0x12\", \"e0x78\", \"m0x34\"];\r\n expected.push(...baseIds);\r\n\r\n expected = expected.sort();\r\n expect(actual).to.deep.equal(expected);\r\n }\r\n\r\n it(\"reports default text style and field hosts\", () => {\r\n // makeElement sets defaultTextStyle to \"0x21\"\r\n const elem = makeElement();\r\n expectReferenceIds([\"0x21\"], elem);\r\n\r\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0x123\");\r\n expectReferenceIds([\"0x123\"], elem);\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x456\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }));\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x789\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"LastMod\" },\r\n }));\r\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\r\n expectReferenceIds([\"0x123\", \"0x456\", \"0x789\"], elem);\r\n\r\n elem.defaultTextStyle = undefined;\r\n expectReferenceIds([\"0x456\", \"0x789\"], elem);\r\n\r\n elem.setAnnotation(TextAnnotation.create());\r\n expectReferenceIds([], elem);\r\n });\r\n\r\n it(\"does not report invalid Ids\", () => {\r\n const elem = makeElement();\r\n elem.defaultTextStyle = undefined;\r\n expectReferenceIds([], elem);\r\n\r\n elem.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(\"0\");\r\n expectReferenceIds([], elem);\r\n\r\n const textBlock = TextBlock.create();\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }));\r\n textBlock.appendRun(FieldRun.create({\r\n propertyHost: { elementId: \"0x123\", schemaName: \"BisCore\", className: \"GeometricElement3d\" },\r\n propertyPath: { propertyName: \"LastMod\" },\r\n }));\r\n elem.setAnnotation(TextAnnotation.create({ textBlock }));\r\n\r\n expectReferenceIds([\"0x123\"], elem);\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation3d Persistence\", () => {\r\n let imodel: StandaloneDb;\r\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"TextAnnotation3d\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertSpatialModel(imodel, jobSubjectId, definitionModel);\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n\r\n createElement3dArgs = { category, model };\r\n });\r\n\r\n after(() => imodel.close());\r\n\r\n it(\"creating element does not automatically compute the geometry\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el = createElement3d(imodel, args);\r\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\r\n expect(el.geom).to.be.undefined;\r\n });\r\n\r\n function expectPlacement3d(el: GeometricElement3d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\r\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\r\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\r\n expect(el.placement.origin.z).to.equal(expectedOrigin[2]);\r\n expect(el.placement.angles.yaw.radians).to.equal(expectedYPR[0]);\r\n expect(el.placement.angles.pitch.radians).to.equal(expectedYPR[1]);\r\n expect(el.placement.angles.roll.radians).to.equal(expectedYPR[2]);\r\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\r\n }\r\n\r\n describe(\"inserts 3d element and round-trips through JSON\", async () => {\r\n async function test(annotation?: TextAnnotation): Promise<void> {\r\n const el0 = createElement3d(imodel, { ...createElement3dArgs });\r\n if (annotation) {\r\n el0.setAnnotation(annotation);\r\n }\r\n\r\n expectPlacement3d(el0, false);\r\n\r\n const elId = el0.insert()\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation3d).to.be.true;\r\n\r\n expectPlacement3d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\r\n\r\n const anno = el1.getAnnotation();\r\n\r\n if (!annotation) {\r\n expect(anno).to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\r\n } else {\r\n expect(anno).not.to.be.undefined;\r\n expect(anno!.equals(annotation)).to.be.true;\r\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\r\n }\r\n }\r\n\r\n it(\"roundtrips an empty annotation\", async () => { await test(); });\r\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation2d Persistence\", () => {\r\n let imodel: StandaloneDb;\r\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"TextAnnotation2d\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n\r\n createElement2dArgs = { category, model };\r\n });\r\n\r\n after(() => {\r\n imodel.saveChanges(\"tests\");\r\n imodel.close();\r\n });\r\n\r\n it(\"creating element does not automatically compute the geometry\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el = createElement2d(imodel, args);\r\n expect(el.getAnnotation()!.equals(annotation)).to.be.true;\r\n expect(el.geom).to.be.undefined;\r\n });\r\n\r\n function expectPlacement2d(el: GeometricElement2d, expectValidBBox: boolean, expectedOrigin = [0, 0, 0], expectedYPR = [0, 0, 0]): void {\r\n expect(el.placement.origin.x).to.equal(expectedOrigin[0]);\r\n expect(el.placement.origin.y).to.equal(expectedOrigin[1]);\r\n expect(el.placement.angle.degrees).to.equal(expectedYPR[0]);\r\n expect(el.placement.bbox.isNull).to.equal(!expectValidBBox);\r\n }\r\n\r\n describe(\"inserts 2d element and round-trips through JSON\", async () => {\r\n async function test(annotation?: TextAnnotation): Promise<void> {\r\n const el0 = createElement2d(imodel, createElement2dArgs);\r\n if (annotation) {\r\n el0.setAnnotation(annotation);\r\n }\r\n\r\n expectPlacement2d(el0, false);\r\n\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation2d).to.be.true;\r\n\r\n expectPlacement2d(el1, undefined !== annotation && !annotation.textBlock.isEmpty);\r\n\r\n const anno = el1.getAnnotation();\r\n\r\n if (!annotation) {\r\n expect(anno).to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.be.undefined;\r\n } else {\r\n expect(anno).not.to.be.undefined;\r\n expect(anno!.equals(annotation)).to.be.true;\r\n expect(el0.toJSON().elementGeometryBuilderParams).not.to.be.undefined;\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n }\r\n }\r\n\r\n it(\"roundtrips an empty annotation\", async () => { await test(); });\r\n it(\"roundtrips an annotation with a textBlock\", async () => { await test(createAnnotation()); });\r\n });\r\n });\r\n\r\n describe(\"defaultTextStyle\", () => {\r\n let imodel: StandaloneDb;\r\n let seedSubjectId: string;\r\n let seedDefinitionModelId: string;\r\n let seedStyleId: string;\r\n let seedStyleId2: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"DefaultTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n expect(differentStyleId).not.to.be.undefined;\r\n\r\n seedSubjectId = jobSubjectId;\r\n seedDefinitionModelId = definitionModel;\r\n seedStyleId = styleId;\r\n seedStyleId2 = differentStyleId;\r\n });\r\n\r\n after(() => {\r\n imodel.saveChanges(\"tests\");\r\n imodel.close();\r\n });\r\n\r\n describe(\"TextAnnotation2d\", () => {\r\n let createElement2dArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(() => {\r\n const { category, model } = insertDrawingModel(imodel, seedSubjectId, seedDefinitionModelId);\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n createElement2dArgs = { category, model };\r\n });\r\n\r\n it(\"preserves defaultTextStyle after round trip\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\r\n const el0 = createElement2d(imodel, args);\r\n expect(el0.defaultTextStyle).not.to.be.undefined;\r\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\r\n el0.insert();\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(el0.id);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1.defaultTextStyle).not.to.be.undefined;\r\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n });\r\n\r\n it(\"produces different geometry when defaultTextStyle changes\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el0 = createElement2d(imodel, args);\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\r\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\r\n\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\r\n\r\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\r\n expect(geom1).not.to.deep.equal(geom2);\r\n });\r\n\r\n it(\"allows defaultTextStyle to be undefined\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation2dCreateArgs, \"placement\"> = { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() };\r\n\r\n const el0 = createElement2d(imodel, args);\r\n el0.defaultTextStyle = undefined;\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<TextAnnotation2d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation2d).to.be.true;\r\n expect(el1.defaultTextStyle).to.be.undefined;\r\n });\r\n\r\n describe(\"onCloned\", () => {\r\n function insertStyledElement(styleId: Id64String | undefined, db: IModelDb): TextAnnotation2d {\r\n const args = { ...createElement2dArgs, defaultTextStyleId: styleId }\r\n const elem = createElement2d(db, args);\r\n elem.insert();\r\n imodel.saveChanges();\r\n return elem;\r\n }\r\n\r\n describe(\"within a single iModel\", () => {\r\n it(\"leaves property hosts intact\", async () => {\r\n const textBlock = TextBlock.create({\r\n styleOverrides: { font: { name: \"Karla\" } },\r\n children: [{\r\n children: [{\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0x123\",\r\n schemaName: \"Fields\",\r\n className: \"TestElement\",\r\n },\r\n propertyPath: { propertyName: \"intProp\" },\r\n }, {\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0xabc\",\r\n schemaName: \"BisCore\",\r\n className: \"Element\",\r\n },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }],\r\n }],\r\n });\r\n\r\n const annotation = TextAnnotation.create({ textBlock, });\r\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\r\n elem.insert();\r\n imodel.saveChanges();\r\n\r\n const context = new IModelElementCloneContext(imodel);\r\n context.remapElement(\"0x123\", \"0x456\");\r\n context.remapElement(\"0xabc\", \"0xdef\");\r\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\r\n\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.textAnnotationData).not.to.be.undefined;\r\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\r\n const para = anno.textBlock.children[0];\r\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x123\");\r\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xabc\");\r\n\r\n });\r\n\r\n it(\"leaves default text style intact\", async () => {\r\n async function clone(styleId: Id64String | undefined, expectedStyleId: Id64String | undefined): Promise<void> {\r\n const elem = insertStyledElement(styleId, imodel);\r\n const context = new IModelElementCloneContext(imodel);\r\n context.remapElement(createElement2dArgs.model, createElement2dArgs.model);\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);\r\n\r\n if (styleId) {\r\n // Even an explicit remapping is ignored when cloning within a single iModel\r\n // (per the examples set by most other elements, excluding RenderMaterial).\r\n context.remapElement(styleId, \"0x99887\");\r\n const props2 = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);\r\n }\r\n }\r\n\r\n await clone(seedStyleId, seedStyleId);\r\n await clone(undefined, undefined);\r\n await clone(\"0x12345\", \"0x12345\");\r\n await clone(Id64.invalid, undefined);\r\n });\r\n });\r\n\r\n describe(\"between iModels\", () => {\r\n let dstDb: StandaloneDb;\r\n let dstDefModel: Id64String;\r\n let dstElemArgs: Omit<TextAnnotation2dCreateArgs, \"placement\">;\r\n\r\n before(async () => {\r\n dstDb = await createIModel(\"CloneTarget\");\r\n const jobSubjectId = createJobSubjectElement(dstDb, \"Job\").insert();\r\n dstDefModel = DefinitionModel.insert(dstDb, jobSubjectId, \"Definition\");\r\n\r\n const { category, model } = insertDrawingModel(dstDb, jobSubjectId, dstDefModel);\r\n expect(category).not.to.equal(createElement2dArgs.category);\r\n expect(model).not.to.equal(createElement2dArgs.model);\r\n\r\n dstElemArgs = { category, model };\r\n });\r\n\r\n after(() => dstDb.close());\r\n\r\n it(\"remaps property hosts\", async () => {\r\n const textBlock = TextBlock.create({\r\n styleOverrides: { font: { name: \"Karla\" } },\r\n children: [{\r\n children: [{\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0x123\",\r\n schemaName: \"Fields\",\r\n className: \"TestElement\",\r\n },\r\n propertyPath: { propertyName: \"intProp\" },\r\n }, {\r\n type: \"field\",\r\n propertyHost: {\r\n elementId: \"0xabc\",\r\n schemaName: \"BisCore\",\r\n className: \"Element\",\r\n },\r\n propertyPath: { propertyName: \"CodeValue\" },\r\n }],\r\n }],\r\n });\r\n\r\n const annotation = TextAnnotation.create({ textBlock });\r\n const elem = createElement2d(imodel, { ...createElement2dArgs, textAnnotationProps: annotation.toJSON() });\r\n elem.insert();\r\n imodel.saveChanges();\r\n\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(\"0x123\", \"0x456\");\r\n context.remapElement(\"0xabc\", \"0xdef\");\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.textAnnotationData).not.to.be.undefined;\r\n const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);\r\n const para = anno.textBlock.children[0];\r\n expect((para.children[0] as FieldRun).propertyHost.elementId).to.equal(\"0x456\");\r\n expect((para.children[1] as FieldRun).propertyHost.elementId).to.equal(\"0xdef\");\r\n });\r\n\r\n it(\"sets default text style to undefined if source style does not exist\", async () => {\r\n const elem = insertStyledElement(\"0x12345\", imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n const props = await context.cloneElement(elem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle).to.be.undefined;\r\n });\r\n\r\n it(\"remaps to an existing text style with the same code if present\", async () => {\r\n const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, \"test\", { font: { name: \"Karla\" } }).insert();\r\n expect(dstStyleId).not.to.equal(seedStyleId);\r\n\r\n const srcElem = insertStyledElement(seedStyleId, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\r\n expect(props.defaultTextStyle?.id).to.equal(dstStyleId);\r\n });\r\n\r\n it(\"throws an error if definition model is not remapped\", async () => {\r\n const srcElem = insertStyledElement(seedStyleId2, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n\r\n await expect(context.cloneElement(srcElem)).to.be.rejectedWith(\"Invalid target model\");\r\n });\r\n\r\n it(\"imports default text style if necessary\", async () => {\r\n const srcElem = insertStyledElement(seedStyleId2, imodel);\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context.remapElement(seedDefinitionModelId, dstDefModel);\r\n\r\n const props = await context.cloneElement(srcElem) as TextAnnotation2dProps;\r\n const dstStyleId = props.defaultTextStyle!.id;\r\n expect(dstStyleId).not.to.be.undefined;\r\n expect(dstStyleId).not.to.equal(seedStyleId2);\r\n expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;\r\n });\r\n\r\n it(\"remaps multiple occurrences of same style to same Id\", async () => {\r\n const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, \"styyyle\", { font: { name: \"Karla\" } }).insert();\r\n const srcElem1 = insertStyledElement(srcStyleId, imodel);\r\n const srcElem2 = insertStyledElement(srcStyleId, imodel);\r\n const srcElem3 = insertStyledElement(srcStyleId, imodel);\r\n\r\n const context = new IModelElementCloneContext(imodel, dstDb);\r\n context.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context.remapElement(seedDefinitionModelId, dstDefModel);\r\n\r\n const props1 = await context.cloneElement(srcElem1) as TextAnnotation2dProps;\r\n const props2 = await context.cloneElement(srcElem2) as TextAnnotation2dProps;\r\n expect(props1.defaultTextStyle).not.to.be.undefined;\r\n expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);\r\n expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\r\n\r\n const context2 = new IModelElementCloneContext(imodel, dstDb);\r\n context2.remapElement(createElement2dArgs.model, dstElemArgs.model);\r\n context2.remapElement(seedDefinitionModelId, dstDefModel);\r\n const props3 = await context2.cloneElement(srcElem3) as TextAnnotation2dProps;\r\n expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);\r\n });\r\n });\r\n });\r\n });\r\n\r\n describe(\"TextAnnotation3d\", () => {\r\n let createElement3dArgs: Omit<TextAnnotation3dCreateArgs, \"placement\">;\r\n\r\n before(() => {\r\n const { category, model } = insertSpatialModel(imodel, seedSubjectId, seedDefinitionModelId);\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n createElement3dArgs = { category, model };\r\n });\r\n\r\n it(\"preserves defaultTextStyle after round trip\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON(), defaultTextStyleId: seedStyleId };\r\n const el0 = createElement3d(imodel, args);\r\n expect(el0.defaultTextStyle).not.to.be.undefined;\r\n expect(el0.defaultTextStyle!.id).to.equal(seedStyleId);\r\n el0.insert();\r\n\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(el0.id);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1.defaultTextStyle).not.to.be.undefined;\r\n expect(el1.defaultTextStyle!.id).to.equal(seedStyleId);\r\n expect(el0.toJSON().elementGeometryBuilderParams).to.deep.equal(el1.toJSON().elementGeometryBuilderParams);\r\n });\r\n\r\n it(\"produces different geometry when defaultTextStyle changes\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n const el0 = createElement3d(imodel, args);\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId);\r\n const geom1 = el0.toJSON().elementGeometryBuilderParams;\r\n\r\n el0.defaultTextStyle = new TextAnnotationUsesTextStyleByDefault(seedStyleId2);\r\n\r\n const geom2 = el0.toJSON().elementGeometryBuilderParams;\r\n expect(geom1).not.to.deep.equal(geom2);\r\n });\r\n\r\n it(\"allows defaultTextStyle to be undefined\", () => {\r\n const annotation = createAnnotation();\r\n const args: Omit<TextAnnotation3dCreateArgs, \"placement\"> = { ...createElement3dArgs, textAnnotationProps: annotation.toJSON() };\r\n\r\n const el0 = createElement3d(imodel, args);\r\n el0.defaultTextStyle = undefined;\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<TextAnnotation3d>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof TextAnnotation3d).to.be.true;\r\n expect(el1.defaultTextStyle).to.be.undefined;\r\n });\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"AnnotationTextStyle\", () => {\r\n let imodel: StandaloneDb;\r\n let seedSubjectId: string;\r\n let seedDefinitionModel: string;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"AnnotationTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n\r\n seedSubjectId = jobSubjectId;\r\n seedDefinitionModel = definitionModel;\r\n });\r\n\r\n after(() => {\r\n imodel.close();\r\n });\r\n\r\n it(\"inserts a style and round-trips through JSON\", async () => {\r\n const textStyle = TextStyleSettings.fromJSON({\r\n font: { name: \"Totally Real Font\" },\r\n isUnderlined: true,\r\n textHeight: 0.5\r\n })\r\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"round-trip\", textStyle.toJSON());\r\n\r\n const elId = el0.insert();\r\n\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n\r\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\r\n\r\n const style = el1.settings;\r\n expect(style).not.to.be.undefined;\r\n\r\n expect(style.toJSON()).to.deep.equal(textStyle.toJSON());\r\n });\r\n\r\n it(\"does not allow elements with invalid styles to be inserted\", async () => {\r\n // Default style should fail since it has no font\r\n let annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"default\");\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // font is required\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"no font\", { font: { name: \"\" } });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // textHeight should be positive\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid textHeight\", { font: { name: \"Totally Real Font\" }, textHeight: 0 });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n // stackedFractionScale should be positive\r\n annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"invalid stackedFractionScale\", { font: { name: \"Totally Real Font\" }, stackedFractionScale: 0 });\r\n expect(() => annotationTextStyle.insert()).to.throw();\r\n });\r\n\r\n it(\"does not allow updating of elements to invalid styles\", async () => {\r\n const annotationTextStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"valid style\", { font: { name: \"Totally Real Font\" } });\r\n\r\n const elId = annotationTextStyle.insert();\r\n expect(Id64.isValidId64(elId)).to.be.true;\r\n const el1 = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(el1).not.to.be.undefined;\r\n expect(el1 instanceof AnnotationTextStyle).to.be.true;\r\n\r\n el1.settings = el1.settings.clone({ font: { name: \"\" } });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ font: { name: \"Totally Real Font\" }, textHeight: 0 });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ textHeight: 2, stackedFractionScale: 0 });\r\n expect(() => el1.update()).to.throw();\r\n el1.settings = el1.settings.clone({ stackedFractionScale: 0.45 });\r\n\r\n el1.update();\r\n const updatedElement = imodel.elements.getElement<AnnotationTextStyle>(elId);\r\n expect(updatedElement.settings.toJSON()).to.deep.equal(el1.settings.toJSON());\r\n });\r\n\r\n it(\"uses default style if none specified\", async () => {\r\n const el0 = AnnotationTextStyle.fromJSON({\r\n classFullName: AnnotationTextStyle.classFullName,\r\n model: seedSubjectId,\r\n code: AnnotationTextStyle.createCode(imodel, seedSubjectId, \"style1\"),\r\n }, imodel);\r\n expect(el0.settings).not.to.be.undefined;\r\n expect(el0.settings.toJSON()).to.deep.equal(TextStyleSettings.defaultProps);\r\n });\r\n\r\n it(\"can update style via cloning\", async () => {\r\n const el0 = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cloning\", { font: { name: \"Totally Real Font\" } });\r\n const newStyle = el0.settings.clone({ isBold: true, lineSpacingFactor: 3 });\r\n expect(el0.settings.toJSON()).to.not.deep.equal(newStyle.toJSON());\r\n el0.settings = newStyle;\r\n expect(el0.settings.toJSON()).to.deep.equal(newStyle.toJSON());\r\n });\r\n\r\n describe(\"versioning\", () => {\r\n function makeStyle(props?: Partial<AnnotationTextStyleProps>): AnnotationTextStyle {\r\n return AnnotationTextStyle.fromJSON({\r\n model: \"0x34\",\r\n code: {\r\n spec: \"0x56\",\r\n scope: \"0x78\",\r\n value: \"style\"\r\n },\r\n classFullName: AnnotationTextStyle.classFullName,\r\n ...props,\r\n }, mockIModel());\r\n }\r\n\r\n it(\"throws if the JSON has no version\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n data: TextStyleSettings.defaultProps\r\n }),\r\n })).to.throw(\"JSON version is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON has no data\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n version: TEXT_STYLE_SETTINGS_JSON_VERSION,\r\n }),\r\n })).to.throw(\"JSON data is missing or invalid.\");\r\n });\r\n\r\n it(\"throws if the JSON version is too new\", () => {\r\n expect(() => makeStyle({\r\n settings: JSON.stringify({\r\n version: \"999.999.999\",\r\n data: TextStyleSettings.defaultProps\r\n }),\r\n })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);\r\n });\r\n\r\n it(\"should migrate text style settings from 1.0.0\", () => {\r\n const oldStyleData: TextStyleSettingsProps = {\r\n ...TextStyleSettings.defaultProps,\r\n leader: {\r\n ...TextStyleSettings.defaultProps.leader,\r\n // Explicitly remove terminatorShape to simulate old data\r\n terminatorShape: undefined\r\n }\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.0\",\r\n data: oldStyleData\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const jsonVersion = JSON.parse(jsonStyleData.settings).version;\r\n expect(jsonVersion).to.equal(TEXT_STYLE_SETTINGS_JSON_VERSION);\r\n }\r\n\r\n expect(migratedStyle.settings.leader.terminatorShape).to.not.be.undefined;\r\n\r\n });\r\n\r\n it(\"should return same data when version is 1.0.2\", () => {\r\n const styleData: VersionedJSON<TextStyleSettingsProps> = {\r\n version: \"1.0.2\",\r\n data: TextStyleSettings.defaultProps\r\n\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: styleData.version,\r\n data: styleData.data\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const parsedJson = JSON.parse(jsonStyleData.settings);\r\n expect(parsedJson.version).to.equal(styleData.version);\r\n expect(parsedJson.data).to.deep.equal(styleData.data);\r\n }\r\n });\r\n\r\n it(\"should migrate text style settings to 1.0.2\", () => {\r\n const oldStyleData: TextStyleSettingsProps = {\r\n ...TextStyleSettings.defaultProps,\r\n textHeight: 0.5,\r\n margins: { // old margin values which were stored as absolute values like textHeight*marginFactor i.e 0.5*0.5=0.25\r\n left: 0.25,\r\n right: 0.25,\r\n top: 0.25,\r\n bottom: 0.25\r\n }\r\n };\r\n const migratedStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.1\",\r\n data: oldStyleData\r\n }),\r\n })\r\n const jsonStyleData = migratedStyle.toJSON();\r\n if (jsonStyleData.settings) {\r\n const jsonVersion = JSON.parse(jsonStyleData.settings).version;\r\n expect(jsonVersion).to.equal(TEXT_STYLE_SETTINGS_JSON_VERSION);\r\n }\r\n\r\n // Margins should be converted back to margin factors i.e 0.25/0.5=0.5\r\n expect(migratedStyle.settings.margins).to.deep.equal({ left: 0.5, right: 0.5, top: 0.5, bottom: 0.5 });\r\n });\r\n\r\n it(\"should return defaultProps when styleData is unrecognized\", () => {\r\n const textStyle = makeStyle({\r\n settings: JSON.stringify({\r\n version: \"1.0.2\",\r\n data: { invalid: \"data\" }\r\n }),\r\n });\r\n expect(textStyle.settings).to.be.deep.equal(TextStyleSettings.defaultProps);\r\n });\r\n })\r\n\r\n describe(\"onCloned\", () => {\r\n let targetDb: StandaloneDb;\r\n let targetDefModel: string;\r\n\r\n before(async () => {\r\n // The source and target iModel will both contain the Karla font family.\r\n targetDb = await createIModel(\"AnnotationTextStyleTargetDb\");\r\n const jobSubjectId = createJobSubjectElement(targetDb, \"Job\").insert();\r\n targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, \"Definition\");\r\n\r\n // Embed a font into the source iModel that doesn't exist in the target iModel.\r\n const shxName = IModelTestUtils.resolveFontFile(\"Cdm.shx\");\r\n const shxBlob = fs.readFileSync(shxName);\r\n const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: \"Cdm\" });\r\n await imodel.fonts.embedFontFile({ file: shxFile });\r\n });\r\n\r\n after(() => targetDb.close());\r\n\r\n it(\"embeds font into target Db if not already embedded\", async () => {\r\n const getFontCounts = () => {\r\n let files = 0;\r\n for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {\r\n files++;\r\n }\r\n\r\n let families = 0;\r\n for (const _ of targetDb.fonts.queryMappedFamilies()) {\r\n families++;\r\n }\r\n\r\n return { files, families };\r\n }\r\n\r\n const initialCounts = getFontCounts();\r\n\r\n const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"karla-style\", TextStyleSettings.fromJSON({ font: { name: \"Karla\" } }));\r\n karlaStyle.insert();\r\n const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, \"cdm-style\", TextStyleSettings.fromJSON({ font: { name: \"Cdm\", type: FontType.Shx } }));\r\n cdmStyle.insert();\r\n\r\n const context = new IModelElementCloneContext(imodel, targetDb);\r\n context.remapElement(seedDefinitionModel, targetDefModel);\r\n\r\n expect(targetDb.fonts.findId({ name: \"Karla\" })).not.to.be.undefined;\r\n await context.cloneElement(karlaStyle);\r\n expect(getFontCounts()).to.deep.equal(initialCounts);\r\n\r\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).to.be.undefined;\r\n await context.cloneElement(cdmStyle);\r\n expect(targetDb.fonts.findId({ name: \"Cdm\", type: FontType.Shx })).not.to.be.undefined;\r\n const finalCounts = getFontCounts();\r\n expect(finalCounts.files).greaterThan(initialCounts.files);\r\n expect(finalCounts.families).greaterThan(initialCounts.families);\r\n });\r\n });\r\n});\r\n\r\ndescribe(\"appendTextAnnotationGeometry\", () => {\r\n let imodel: StandaloneDb;\r\n let seedDefinitionModelId: string;\r\n let seedCategoryId: string;\r\n let seedStyleId: string;\r\n let seedStyleId2: string;\r\n let annotationRenderPriority: RenderPriority;\r\n\r\n before(async () => {\r\n imodel = await createIModel(\"DefaultTextStyle\");\r\n const jobSubjectId = createJobSubjectElement(imodel, \"Job\").insert();\r\n const definitionModel = DefinitionModel.insert(imodel, jobSubjectId, \"Definition\");\r\n const { category, model } = insertDrawingModel(imodel, jobSubjectId, definitionModel);\r\n const styleId = createAnnotationTextStyle(imodel, definitionModel, \"test\", { font: { name: \"Totally Real Font\" }, textHeight: 0.25, isItalic: true }).insert();\r\n const differentStyleId = createAnnotationTextStyle(imodel, definitionModel, \"alt\", { font: { name: \"Karla\" }, textHeight: 0.5, isBold: true }).insert();\r\n\r\n expect(jobSubjectId).not.to.be.undefined;\r\n expect(definitionModel).not.to.be.undefined;\r\n expect(category).not.to.be.undefined;\r\n expect(model).not.to.be.undefined;\r\n expect(styleId).not.to.be.undefined;\r\n expect(differentStyleId).not.to.be.undefined;\r\n\r\n seedDefinitionModelId = definitionModel;\r\n seedCategoryId = category;\r\n seedStyleId = styleId;\r\n seedStyleId2 = differentStyleId;\r\n annotationRenderPriority = { annotation: 100, annotationLabels: 110 };\r\n });\r\n\r\n function runAppendTextAnnotationGeometry(annotation: TextAnnotation, styleId: Id64String, scaleFactor: number = 1, renderPriority?: RenderPriority): MockBuilder {\r\n const builder = new MockBuilder();\r\n\r\n const resolver = new TextStyleResolver({\r\n textBlock: annotation.textBlock,\r\n textStyleId: styleId,\r\n iModel: imodel,\r\n });\r\n\r\n const layout = layoutTextBlock({\r\n textBlock: annotation.textBlock,\r\n iModel: imodel,\r\n textStyleResolver: resolver,\r\n });\r\n\r\n const result = appendTextAnnotationGeometry({\r\n annotationProps: annotation.toJSON(),\r\n layout,\r\n textStyleResolver: resolver,\r\n scaleFactor,\r\n builder,\r\n categoryId: seedCategoryId,\r\n renderPriority\r\n });\r\n\r\n expect(result).to.be.true;\r\n return builder;\r\n }\r\n\r\n it(\"produces the same geometry when given the same inputs\", () => {\r\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n\r\n expect(builder1.geometries).to.deep.equal(builder2.geometries);\r\n expect(builder1.params).to.deep.equal(builder2.params);\r\n expect(builder1.textStrings).to.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"produces no geometry when given an empty annotation\", () => {\r\n const block = TextBlock.create();\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\r\n\r\n expect(builder.geometries).to.be.empty;\r\n expect(builder.params).to.be.empty;\r\n expect(builder.textStrings).to.be.empty;\r\n });\r\n\r\n it(\"produces geometry when given an empty annotation with frame styling\", () => {\r\n const block = TextBlock.create();\r\n const annotation = TextAnnotation.fromJSON({ textBlock: block.toJSON() });\r\n const styleId = createAnnotationTextStyle(\r\n imodel,\r\n seedDefinitionModelId,\r\n \"empty anno style\",\r\n {\r\n font: { name: \"Totally Real Font\" },\r\n frame: {\r\n shape: \"rectangle\",\r\n }\r\n }\r\n ).insert();\r\n const builder = runAppendTextAnnotationGeometry(annotation, styleId);\r\n\r\n expect(builder.geometries).not.to.be.empty;\r\n expect(builder.params).not.to.be.empty;\r\n expect(builder.textStrings).to.be.empty;\r\n });\r\n\r\n\r\n it(\"produces different geometry when given different text-content in annotations\", () => {\r\n const anno1 = createAnnotation();\r\n const anno2 = createAnnotation();\r\n anno2.textBlock.appendRun(TextRun.create({ content: \"extra\", styleOverrides: { font: { name: \"Totally Real Font\" } } }));\r\n\r\n const builder1 = runAppendTextAnnotationGeometry(anno1, seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(anno2, seedStyleId);\r\n\r\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\r\n expect(builder1.params).to.deep.equal(builder2.params);\r\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\r\n });\r\n\r\n it(\"produces different geometry when given different default styles\", () => {\r\n const builder1 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId);\r\n const builder2 = runAppendTextAnnotationGeometry(createAnnotation(), seedStyleId2);\r\n\r\n expect(builder1.geometries).to.not.deep.equal(builder2.geometries);\r\n expect(builder1.textStrings).to.not.deep.equal(builder2.textStrings);\r\n });\r\n it(\"applies render priority correctly\", () => {\r\n const annotation = createAnnotation();\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1, annotationRenderPriority);\r\n expect(builder.params.length).to.equal(2);\r\n expect(builder.params[0].elmPriority).to.equal(annotationRenderPriority.annotationLabels);\r\n expect(builder.params[1].elmPriority).to.equal(annotationRenderPriority.annotation);\r\n\r\n });\r\n\r\n it(\"accounts for style overrides in the text\", () => {\r\n const block = TextBlock.create();\r\n block.styleOverrides = { margins: { left: 0, right: 1, top: 2, bottom: 3 } }\r\n block.appendParagraph();\r\n block.children[0].styleOverrides = { isBold: true };\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\r\n block.appendParagraph();\r\n block.appendRun(TextRun.create({ content: \" RUN!!! \", styleOverrides: { isItalic: false } }));\r\n\r\n const annotation = createAnnotation(block);\r\n\r\n const builder = runAppendTextAnnotationGeometry(annotation, seedStyleId);\r\n\r\n expect(builder.textStrings.length).to.equal(2);\r\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\r\n // From override on paragraph\r\n expect(builder.textStrings[0].bold).to.be.true;\r\n // From default style\r\n expect(builder.textStrings[0].italic).to.be.true;\r\n expect(builder.textStrings[1].text).to.equal(\" RUN!!! \");\r\n // From default style\r\n expect(builder.textStrings[1].bold).to.be.false;\r\n // From override on run\r\n expect(builder.textStrings[1].italic).to.be.false;\r\n });\r\n\r\n it(\"uses TextStyleSettings.defaults when no default style is provided\", () => {\r\n const block = TextBlock.create();\r\n block.appendRun(TextRun.create({ content: \"Run, Barry,\" }));\r\n\r\n const annotation = createAnnotation(block);\r\n const builder = runAppendTextAnnotationGeometry(annotation, \"\");\r\n\r\n expect(builder.textStrings.length).to.equal(1);\r\n expect(builder.textStrings[0].text).to.equal(\"Run, Barry,\");\r\n expect(builder.textStrings[0].font).to.equal(0); // Font ID 0 is the \"missing\" font in the default text style\r\n expect(builder.textStrings[0].bold).to.equal(TextStyleSettings.defaultProps.isBold);\r\n expect(builder.textStrings[0].italic).to.equal(TextStyleSettings.defaultProps.isItalic);\r\n expect(builder.textStrings[0].underline).to.equal(TextStyleSettings.defaultProps.isUnderlined);\r\n });\r\n\r\n it(\"scales geometry correctly\", () => {\r\n const annotation = createAnnotation();\r\n const builder1 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 1);\r\n const builder2 = runAppendTextAnnotationGeometry(annotation, seedStyleId, 2);\r\n\r\n expect(builder1.textStrings[0].height * 2).to.equal(builder2.textStrings[0].height);\r\n expect(builder1.textStrings[0].width * 2).to.equal(builder2.textStrings[0].width);\r\n });\r\n});\r\n"]}