@@ -2953,18 +2953,15 @@ test.describe("Workspace Manager V2 bootstrap", () => {
29532953 });
29542954 await page.locator("#objectVectorStudioV2StrokeModeButton").click();
29552955 await rightClickPreviewShape(1);
2956- await expect(page.locator("#statusLog")).toHaveValue(/OK Applied transparent stroke to shape row 1 by right-click\./);
2957- await expect(page.locator("#objectVectorStudioV2JsonDetails")).toContainText('"stroke": "#00000000"');
2958- const shapeOneStyleAfterTransparentStroke = await page.evaluate(() => ({
2956+ await expect(page.locator("#statusLog")).toHaveValue(/OK Applied transparent fill to shape row 1 by right-click\./);
2957+ await expect(page.locator("#objectVectorStudioV2JsonDetails")).not. toContainText('"stroke": "#00000000"');
2958+ const shapeOneStyleAfterSecondRightClick = await page.evaluate(() => ({
29592959 contextMenuPrevented: window.__objectVectorStudioV2ContextMenuPrevented,
29602960 style: { ...window.__objectVectorStudioV2App.selectedShape().style }
29612961 }));
2962- expect(shapeOneStyleAfterTransparentStroke ).toEqual({
2962+ expect(shapeOneStyleAfterSecondRightClick ).toEqual({
29632963 contextMenuPrevented: true,
2964- style: {
2965- ...shapeOneStyleAfterTransparentFill.style,
2966- stroke: "#00000000"
2967- }
2964+ style: shapeOneStyleAfterTransparentFill.style
29682965 });
29692966 await expect(page.locator("#objectVectorStudioV2FillOpacity")).toHaveValue("128");
29702967 await expect(page.locator("#objectVectorStudioV2StrokeOpacity")).toHaveValue("166");
@@ -2973,7 +2970,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
29732970 await page.keyboard.press("I");
29742971 await expect(page.locator('[data-shape-tool="picker"]')).toHaveAttribute("aria-pressed", "true");
29752972 await clickPreviewShape(1);
2976- await expect(page.locator("#statusLog")).toHaveValue(/OK Picker sampled shape row 1: fill #00000000, stroke #00000000 , fill opacity 0\.502, stroke opacity 0\.651, stroke width 2\./);
2973+ await expect(page.locator("#statusLog")).toHaveValue(/OK Picker sampled shape row 1: fill #00000000, stroke #6fd3ff , fill opacity 0\.502, stroke opacity 0\.651, stroke width 2\./);
29772974 const pickerState = await page.evaluate(() => {
29782975 const app = window.__objectVectorStudioV2App;
29792976 return {
@@ -2995,7 +2992,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
29952992 paletteTarget: "stroke",
29962993 selectedFillColor: "#00000000",
29972994 selectedFillOpacity: 0.502,
2998- selectedStrokeColor: "#00000000 ",
2995+ selectedStrokeColor: "#6fd3ff ",
29992996 selectedStrokeOpacity: 0.651,
30002997 shapeStyle: shapeOneStyleBeforePicker,
30012998 strokeInput: "166",
@@ -3661,7 +3658,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
36613658 await drawObjectVectorShape(page, "circle", [{ x: 20, y: -20 }, { x: 45, y: -20 }]);
36623659 await drawObjectVectorShape(page, "ellipse", [{ x: 60, y: -30 }, { x: 95, y: -5 }]);
36633660 await drawObjectVectorShape(page, "triangle", [{ x: -30, y: 50 }, { x: 10, y: 80 }]);
3664- await drawObjectVectorShape(page, "text", [{ x: 50, y: 50 }]);
3661+ await drawObjectVectorShape(page, "text", [{ x: 50, y: 50 }, { x: 60, y: 62 } ]);
36653662 const strokeOnlyCreatedShapes = await page.evaluate(() => {
36663663 const createdTools = ["rectangle", "square", "circle", "ellipse", "triangle", "text"];
36673664 return window.__objectVectorStudioV2App.selectedObject().shapes
@@ -3726,6 +3723,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
37263723 const textPreview = await page.locator("#objectVectorStudioV2RenderSurface text.object-vector-studio-v2__drawing-preview").evaluate((preview) => ({
37273724 dash: preview.style.strokeDasharray,
37283725 fill: preview.getAttribute("fill"),
3726+ fontSize: Number(preview.getAttribute("font-size")),
37293727 stroke: preview.getAttribute("stroke"),
37303728 strokeWidth: Number(preview.getAttribute("stroke-width")),
37313729 text: preview.textContent.trim(),
@@ -3734,19 +3732,49 @@ test.describe("Workspace Manager V2 bootstrap", () => {
37343732 expect(textPreview).toEqual({
37353733 dash: "none",
37363734 fill: "#00000000",
3735+ fontSize: 60,
37373736 stroke: "#6fd3ff",
37383737 strokeWidth: 20,
37393738 text: "Text",
37403739 tool: "text"
37413740 });
37423741 await clickObjectVectorLogicalPoint(page, 76, 66);
3743- const committedTextStyle = await page.evaluate(() => ({ ...window.__objectVectorStudioV2App.selectedShape().style }));
3744- expect(committedTextStyle).toMatchObject({
3742+ const committedText = await page.evaluate(() => ({
3743+ geometry: { ...window.__objectVectorStudioV2App.selectedShape().geometry },
3744+ shapeCount: window.__objectVectorStudioV2App.selectedObject().shapes.length,
3745+ style: { ...window.__objectVectorStudioV2App.selectedShape().style }
3746+ }));
3747+ expect(committedText.geometry).toEqual({ fontSize: 6, text: "Text", x: 70, y: 66 });
3748+ expect(committedText.style).toMatchObject({
37453749 fill: "#00000000",
37463750 stroke: "#6fd3ff",
37473751 strokeOpacity: 1,
37483752 strokeWidth: 20
37493753 });
3754+ const previewToolbarAfterText = await page.evaluate(() => Array.from(document.querySelectorAll(".object-vector-studio-v2__preview-edit-toolbar button")).map((button) => ({
3755+ disabled: button.disabled,
3756+ label: button.textContent.trim()
3757+ })));
3758+ expect(previewToolbarAfterText).toEqual([
3759+ { disabled: false, label: "Undo" },
3760+ { disabled: true, label: "Redo" },
3761+ { disabled: false, label: "Copy" },
3762+ { disabled: true, label: "Paste" }
3763+ ]);
3764+ await page.locator("#objectVectorStudioV2PreviewCopyButton").click();
3765+ await expect(page.locator("#statusLog")).toHaveValue(/OK Copied shape row \d+ to Object Preview clipboard\./);
3766+ await expect(page.locator("#objectVectorStudioV2PreviewPasteButton")).toBeEnabled();
3767+ await page.locator("#objectVectorStudioV2PreviewPasteButton").click();
3768+ await expect(page.locator("#statusLog")).toHaveValue(/OK Pasted copied shape into Drawing Flow\./);
3769+ await expect.poll(async () => page.evaluate(() => window.__objectVectorStudioV2App.selectedObject().shapes.length)).toBe(committedText.shapeCount + 1);
3770+ await expect(page.locator("#objectVectorStudioV2PreviewUndoButton")).toBeEnabled();
3771+ await page.locator("#objectVectorStudioV2PreviewUndoButton").click();
3772+ await expect(page.locator("#statusLog")).toHaveValue(/OK Undo applied to Object Preview edits\./);
3773+ await expect.poll(async () => page.evaluate(() => window.__objectVectorStudioV2App.selectedObject().shapes.length)).toBe(committedText.shapeCount);
3774+ await expect(page.locator("#objectVectorStudioV2PreviewRedoButton")).toBeEnabled();
3775+ await page.locator("#objectVectorStudioV2PreviewRedoButton").click();
3776+ await expect(page.locator("#statusLog")).toHaveValue(/OK Redo applied to Object Preview edits\./);
3777+ await expect.poll(async () => page.evaluate(() => window.__objectVectorStudioV2App.selectedObject().shapes.length)).toBe(committedText.shapeCount + 1);
37503778
37513779 const shapeCountBeforeDoubleClick = await page.evaluate(() => window.__objectVectorStudioV2App.selectedObject().shapes.length);
37523780 await page.locator('[data-shape-tool="polygon"]').click();
0 commit comments