Start changing JS codemods
This commit is contained in:
@ -1,20 +1,17 @@
|
||||
import type { Page } from '@playwright/test'
|
||||
import type { LineInputsType } from '@src/lang/std/sketchcombos'
|
||||
import { uuidv4 } from '@src/lib/utils'
|
||||
import { Page } from '@playwright/test'
|
||||
import { test, expect } from './zoo-test'
|
||||
|
||||
import type { EditorFixture } from '@e2e/playwright/fixtures/editorFixture'
|
||||
import {
|
||||
deg,
|
||||
getUtils,
|
||||
orRunWhenFullSuiteEnabled,
|
||||
wiggleMove,
|
||||
} from '@e2e/playwright/test-utils'
|
||||
import { expect, test } from '@e2e/playwright/zoo-test'
|
||||
import { deg, getUtils, wiggleMove } from './test-utils'
|
||||
import { LineInputsType } from 'lang/std/sketchcombos'
|
||||
import { uuidv4 } from 'lib/utils'
|
||||
import { EditorFixture } from './fixtures/editorFixture'
|
||||
|
||||
test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
test('Hover over a segment should show its overlay, hovering over the input overlays should show its popover, clicking the input overlay should constrain/unconstrain it:\nfor the following segments', () => {
|
||||
test.fixme(
|
||||
'Hover over a segment should show its overlay, hovering over the input overlays should show its popover, clicking the input overlay should constrain/unconstrain it:\nfor the following segments',
|
||||
() => {
|
||||
// TODO: fix this test on mac after the electron migration
|
||||
test.fixme(orRunWhenFullSuiteEnabled())
|
||||
test.skip(process.platform === 'darwin', 'Skip on mac')
|
||||
/**
|
||||
* Clicks on an constrained element
|
||||
* @param {Page} page - The page to perform the action on
|
||||
@ -162,6 +159,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
const unconstrainedLocator = page.locator(
|
||||
`[data-constraint-type="${constraintType}"][data-is-constrained="false"]`
|
||||
)
|
||||
await expect(unconstrainedLocator).toBeVisible()
|
||||
await unconstrainedLocator.hover()
|
||||
await expect(
|
||||
await page.getByTestId('constraint-symbol-popover').count()
|
||||
@ -210,8 +208,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([5 + 0, 20 + 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||
@ -220,8 +217,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
|> yLine(endAbsolute = 20 + -10.77, tag = $a)
|
||||
|> xLine(length = 26.04)
|
||||
|> yLine(length = 21.14 + 0)
|
||||
|> angledLine(angle = 181 + 0, xLength = 23.14)
|
||||
|> angledLine(angle = -91, yLength = 19 + 0)
|
||||
|> angledLine(angle = 181 + 0, lengthX = 23.14)
|
||||
|> angledLine(angle = -91, lengthX = 19 + 0)
|
||||
|> angledLine(angle = 3 + 0, endAbsoluteX = 5 + 26)
|
||||
|> angledLine(angle = 89, endAbsoluteY = 20 + 9.14 + 0)
|
||||
|> angledLineThatIntersects({
|
||||
@ -277,8 +274,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
|
||||
let ang = 0
|
||||
|
||||
const line = await u.getBoundingBox('[data-overlay-index="0"]')
|
||||
ang = await u.getAngle('[data-overlay-index="0"]')
|
||||
const line = await u.getBoundingBox(`[data-overlay-index="${0}"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="${0}"]`)
|
||||
console.log('line1', line, ang)
|
||||
await clickConstrained({
|
||||
hoverPos: { x: line.x, y: line.y },
|
||||
@ -300,17 +297,16 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
locator: '[data-overlay-index="0"]',
|
||||
})
|
||||
|
||||
const angledLine = await u.getBoundingBox('[data-overlay-index="1"]')
|
||||
ang = await u.getAngle('[data-overlay-index="1"]')
|
||||
const angledLine = await u.getBoundingBox(`[data-overlay-index="1"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="1"]`)
|
||||
console.log('angledLine1')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: angledLine.x, y: angledLine.y },
|
||||
constraintType: 'angle',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLine(angle = 3 + 0, length = 32 + 0)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLine(angle = 3, length = 32 + 0)',
|
||||
expectFinal: 'angledLine(angle = angle001, length = 32 + 0)',
|
||||
'angledLine(angle = 3 + 0, length = 32 + 0 )',
|
||||
expectAfterUnconstrained: 'angledLine(angle = 3, length = 32 + 0 )',
|
||||
expectFinal: 'angledLine(angle = angle001, length = 32 + 0 )',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="1"]',
|
||||
})
|
||||
@ -319,10 +315,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
hoverPos: { x: angledLine.x, y: angledLine.y },
|
||||
constraintType: 'length',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLine(angle = angle001, length = 32 + 0)',
|
||||
'angledLine(angle = angle001, length = 32 + 0 )',
|
||||
expectAfterUnconstrained:
|
||||
'angledLine(angle = angle001, length = 32)',
|
||||
expectFinal: 'angledLine(angle = angle001, length = len001)',
|
||||
'angledLine(angle = angle001, length = 32 )',
|
||||
expectFinal: 'angledLine(angle = angle001, length = len001 )',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="1"]',
|
||||
})
|
||||
@ -330,8 +326,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
await page.mouse.move(700, 250)
|
||||
await page.waitForTimeout(100)
|
||||
|
||||
let lineTo = await u.getBoundingBox('[data-overlay-index="2"]')
|
||||
ang = await u.getAngle('[data-overlay-index="2"]')
|
||||
let lineTo = await u.getBoundingBox(`[data-overlay-index="2"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="2"]`)
|
||||
console.log('lineTo1')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: lineTo.x, y: lineTo.y },
|
||||
@ -356,8 +352,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
locator: '[data-overlay-toolbar-index="2"]',
|
||||
})
|
||||
|
||||
const xLineTo = await u.getBoundingBox('[data-overlay-index="3"]')
|
||||
ang = await u.getAngle('[data-overlay-index="3"]')
|
||||
const xLineTo = await u.getBoundingBox(`[data-overlay-index="3"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="3"]`)
|
||||
console.log('xlineTo1')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: xLineTo.x, y: xLineTo.y },
|
||||
@ -372,24 +368,20 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
|
||||
// Broken on main at time of writing!
|
||||
test('for segments [yLineTo, xLine]', async ({
|
||||
page,
|
||||
editor,
|
||||
homePage,
|
||||
}) => {
|
||||
test.fixme(orRunWhenFullSuiteEnabled())
|
||||
test.fixme(
|
||||
'for segments [yLineTo, xLine]',
|
||||
async ({ page, editor, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
yRel001 = -14
|
||||
`yRel001 = -14
|
||||
xRel001 = 0.5
|
||||
angle001 = 3
|
||||
len001 = 32
|
||||
yAbs001 = 11.5
|
||||
xAbs001 = 33
|
||||
xAbs002 = 4
|
||||
part001 = startSketchOn(XZ)
|
||||
part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, yRel001])
|
||||
|> angledLine(angle = angle001, length = len001 )
|
||||
@ -426,8 +418,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
|
||||
let ang = 0
|
||||
|
||||
const yLineTo = await u.getBoundingBox('[data-overlay-index="4"]')
|
||||
ang = await u.getAngle('[data-overlay-index="4"]')
|
||||
const yLineTo = await u.getBoundingBox(`[data-overlay-index="4"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="4"]`)
|
||||
console.log('ylineTo1')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: yLineTo.x, y: yLineTo.y - 200 },
|
||||
@ -439,8 +431,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
locator: '[data-overlay-toolbar-index="4"]',
|
||||
})
|
||||
|
||||
const xLine = await u.getBoundingBox('[data-overlay-index="5"]')
|
||||
ang = await u.getAngle('[data-overlay-index="5"]')
|
||||
const xLine = await u.getBoundingBox(`[data-overlay-index="5"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="5"]`)
|
||||
console.log('xline')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: xLine.x, y: xLine.y },
|
||||
@ -452,7 +444,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="5"]',
|
||||
})
|
||||
})
|
||||
}
|
||||
)
|
||||
test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({
|
||||
page,
|
||||
editor,
|
||||
@ -461,8 +454,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||
@ -508,8 +500,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
|
||||
let ang = 0
|
||||
|
||||
const yLine = await u.getBoundingBox('[data-overlay-index="6"]')
|
||||
ang = await u.getAngle('[data-overlay-index="6"]')
|
||||
const yLine = await u.getBoundingBox(`[data-overlay-index="6"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="6"]`)
|
||||
console.log('yline1')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: yLine.x, y: yLine.y },
|
||||
@ -522,9 +514,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
|
||||
const angledLineOfXLength = await u.getBoundingBox(
|
||||
'[data-overlay-index="7"]'
|
||||
`[data-overlay-index="7"]`
|
||||
)
|
||||
ang = await u.getAngle('[data-overlay-index="7"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="7"]`)
|
||||
console.log('angledLineOfXLength1')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y },
|
||||
@ -554,9 +546,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
})
|
||||
|
||||
const angledLineOfYLength = await u.getBoundingBox(
|
||||
'[data-overlay-index="8"]'
|
||||
`[data-overlay-index="8"]`
|
||||
)
|
||||
ang = await u.getAngle('[data-overlay-index="8"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="8"]`)
|
||||
console.log('angledLineOfYLength1')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y },
|
||||
@ -565,7 +557,8 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLineOfYLength({ angle = angle002, length = 19 + 0 }, %)',
|
||||
expectFinal: 'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
||||
expectFinal:
|
||||
'angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)',
|
||||
ang: ang + 180,
|
||||
steps: 6,
|
||||
locator: '[data-overlay-toolbar-index="8"]',
|
||||
@ -593,8 +586,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||
@ -614,62 +606,6 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
}, %)
|
||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
||||
`
|
||||
<<<<<<< HEAD
|
||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
||||
)
|
||||
localStorage.setItem('disableAxis', 'true')
|
||||
})
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// wait for execution done
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
||||
await page.waitForTimeout(100)
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
|
||||
|
||||
const clickUnconstrained = _clickUnconstrained(page, editor)
|
||||
const clickConstrained = _clickConstrained(page, editor)
|
||||
|
||||
let ang = 0
|
||||
|
||||
const angledLineToX = await u.getBoundingBox(`[data-overlay-index="9"]`)
|
||||
ang = await u.getAngle(`[data-overlay-index="9"]`)
|
||||
console.log('angledLineToX')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
||||
constraintType: 'angle',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToX({ angle = 3 + 0, to = 26 }, %)',
|
||||
expectAfterUnconstrained: 'angledLineToX({ angle = 3, to = 26 }, %)',
|
||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="9"]',
|
||||
})
|
||||
console.log('angledLineToX2')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
||||
constraintType: 'xAbsolute',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToX({ angle = angle001, to = 26 }, %)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLineToX({ angle = angle001, to = xAbs001 }, %)',
|
||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="9"]',
|
||||
})
|
||||
|
||||
const angledLineToY = await u.getBoundingBox(
|
||||
`[data-overlay-index="10"]`
|
||||
=======
|
||||
)
|
||||
localStorage.setItem('disableAxis', 'true')
|
||||
})
|
||||
@ -723,41 +659,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
|
||||
const angledLineToY = await u.getBoundingBox(
|
||||
`[data-overlay-index="10"]`
|
||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
||||
)
|
||||
<<<<<<< HEAD
|
||||
localStorage.setItem('disableAxis', 'true')
|
||||
})
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
||||
ang = await u.getAngle(`[data-overlay-index="10"]`)
|
||||
console.log('angledLineToY')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
||||
constraintType: 'angle',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLineToY({ angle = angle002, to = 9.14 + 0 }, %)',
|
||||
expectFinal: 'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
||||
steps: process.platform === 'darwin' ? 8 : 9,
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="10"]',
|
||||
})
|
||||
console.log('angledLineToY2')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
||||
constraintType: 'yAbsolute',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLineToY({ angle = 89, to = 9.14 }, %)',
|
||||
expectFinal: 'angledLineToY({ angle = 89, to = yAbs001 }, %)',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="10"]',
|
||||
})
|
||||
=======
|
||||
ang = await u.getAngle(`[data-overlay-index="10"]`)
|
||||
console.log('angledLineToY')
|
||||
await clickUnconstrained({
|
||||
@ -784,84 +686,11 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="10"]',
|
||||
})
|
||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// wait for execution done
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
||||
await page.waitForTimeout(100)
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
|
||||
|
||||
const clickUnconstrained = _clickUnconstrained(page, editor)
|
||||
const clickConstrained = _clickConstrained(page, editor)
|
||||
|
||||
let ang = 0
|
||||
|
||||
const angledLineToX = await u.getBoundingBox('[data-overlay-index="9"]')
|
||||
ang = await u.getAngle('[data-overlay-index="9"]')
|
||||
console.log('angledLineToX')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
||||
constraintType: 'angle',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToX({ angle = 3 + 0, to = 26 }, %)',
|
||||
expectAfterUnconstrained: 'angledLineToX({ angle = 3, to = 26 }, %)',
|
||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="9"]',
|
||||
})
|
||||
console.log('angledLineToX2')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: angledLineToX.x, y: angledLineToX.y },
|
||||
constraintType: 'xAbsolute',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToX({ angle = angle001, to = 26 }, %)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLineToX({ angle = angle001, to = xAbs001 }, %)',
|
||||
expectFinal: 'angledLineToX({ angle = angle001, to = 26 }, %)',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="9"]',
|
||||
})
|
||||
|
||||
const angledLineToY = await u.getBoundingBox('[data-overlay-index="10"]')
|
||||
ang = await u.getAngle('[data-overlay-index="10"]')
|
||||
console.log('angledLineToY')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
||||
constraintType: 'angle',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
||||
expectAfterUnconstrained:
|
||||
'angledLineToY({ angle = angle002, to = 9.14 + 0 }, %)',
|
||||
expectFinal: 'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
||||
steps: process.platform === 'darwin' ? 8 : 9,
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="10"]',
|
||||
})
|
||||
console.log('angledLineToY2')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: angledLineToY.x, y: angledLineToY.y },
|
||||
constraintType: 'yAbsolute',
|
||||
expectBeforeUnconstrained:
|
||||
'angledLineToY({ angle = 89, to = 9.14 + 0 }, %)',
|
||||
expectAfterUnconstrained: 'angledLineToY({ angle = 89, to = 9.14 }, %)',
|
||||
expectFinal: 'angledLineToY({ angle = 89, to = yAbs001 }, %)',
|
||||
ang: ang + 180,
|
||||
locator: '[data-overlay-toolbar-index="10"]',
|
||||
})
|
||||
|
||||
const angledLineThatIntersects = await u.getBoundingBox(
|
||||
'[data-overlay-index="11"]'
|
||||
`[data-overlay-index="11"]`
|
||||
)
|
||||
ang = await u.getAngle('[data-overlay-index="11"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="11"]`)
|
||||
console.log('angledLineThatIntersects')
|
||||
await clickUnconstrained({
|
||||
hoverPos: {
|
||||
@ -921,8 +750,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
|> angledLine(angle = 3 + 0, length = 32 + 0 )
|
||||
@ -992,145 +820,11 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|
||||
locator: '[data-overlay-toolbar-index="12"]',
|
||||
})
|
||||
})
|
||||
test('for segment [arcTo]', async ({
|
||||
page,
|
||||
editor,
|
||||
homePage,
|
||||
scene,
|
||||
cmdBar,
|
||||
}) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
sketch001 = startSketchOn(XZ)
|
||||
profile001 = startProfileAt([56.37, 120.33], sketch001)
|
||||
|> line(end = [162.86, 106.48])
|
||||
|> arcTo({
|
||||
interior = [360.16, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)
|
||||
|> yLine(-131.54, %)
|
||||
|> arc({
|
||||
radius = 126.46,
|
||||
angleStart = 33.53,
|
||||
angleEnd = -141.07
|
||||
}, %)
|
||||
`
|
||||
)
|
||||
localStorage.setItem('disableAxis', 'true')
|
||||
})
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await scene.connectionEstablished()
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
// wait for execution done
|
||||
|
||||
await page.getByText('line(end = [162.86, 106.48])').click()
|
||||
await page.waitForTimeout(100)
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(5)
|
||||
|
||||
const clickUnconstrained = _clickUnconstrained(page, editor)
|
||||
const clickConstrained = _clickConstrained(page, editor)
|
||||
|
||||
const arcTo = await u.getBoundingBox('[data-overlay-index="1"]')
|
||||
let ang = await u.getAngle('[data-overlay-index="1"]')
|
||||
console.log('arcTo interior x')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
||||
constraintType: 'xAbsolute',
|
||||
expectBeforeUnconstrained: `arcTo({
|
||||
interior = [360.16, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
expectAfterUnconstrained: `arcTo({
|
||||
interior = [360.16, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
expectFinal: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
ang: ang,
|
||||
steps: 6,
|
||||
locator: '[data-overlay-toolbar-index="1"]',
|
||||
})
|
||||
|
||||
console.log('arcTo interior y')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
||||
constraintType: 'yAbsolute',
|
||||
expectBeforeUnconstrained: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
expectAfterUnconstrained: `arcTo({
|
||||
interior = [xAbs001, yAbs001],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
expectFinal: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
ang: ang,
|
||||
steps: 10,
|
||||
locator: '[data-overlay-toolbar-index="1"]',
|
||||
})
|
||||
|
||||
console.log('arcTo end x')
|
||||
await clickConstrained({
|
||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
||||
constraintType: 'xAbsolute',
|
||||
expectBeforeUnconstrained: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
expectAfterUnconstrained: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [391.48, 131.54]
|
||||
}, %)`,
|
||||
expectFinal: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [xAbs002, 131.54]
|
||||
}, %)`,
|
||||
ang: ang + 180,
|
||||
steps: 6,
|
||||
locator: '[data-overlay-toolbar-index="1"]',
|
||||
})
|
||||
|
||||
console.log('arcTo end y')
|
||||
await clickUnconstrained({
|
||||
hoverPos: { x: arcTo.x, y: arcTo.y },
|
||||
constraintType: 'yAbsolute',
|
||||
expectBeforeUnconstrained: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [xAbs002, 131.54]
|
||||
}, %)`,
|
||||
expectAfterUnconstrained: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [xAbs002, yAbs002]
|
||||
}, %)`,
|
||||
expectFinal: `arcTo({
|
||||
interior = [xAbs001, 231.76],
|
||||
end = [xAbs002, 131.54]
|
||||
}, %)`,
|
||||
ang: ang + 180,
|
||||
steps: 10,
|
||||
locator: '[data-overlay-toolbar-index="1"]',
|
||||
})
|
||||
})
|
||||
test('for segment [circle]', async ({ page, editor, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> circle(center = [1 + 0, 0], radius = 8)
|
||||
`
|
||||
)
|
||||
@ -1174,7 +868,8 @@ part001 = startSketchOn(XZ)
|
||||
await clickUnconstrained({
|
||||
hoverPos,
|
||||
constraintType: 'yAbsolute',
|
||||
expectBeforeUnconstrained: 'circle(center = [xAbs001, 0], radius = 8)',
|
||||
expectBeforeUnconstrained:
|
||||
'circle(center = [xAbs001, 0], radius = 8)',
|
||||
expectAfterUnconstrained:
|
||||
'circle(center = [xAbs001, yAbs001], radius = 8)',
|
||||
expectFinal: 'circle(center = [xAbs001, 0], radius = 8)',
|
||||
@ -1186,7 +881,8 @@ part001 = startSketchOn(XZ)
|
||||
await clickUnconstrained({
|
||||
hoverPos,
|
||||
constraintType: 'radius',
|
||||
expectBeforeUnconstrained: 'circle(center = [xAbs001, 0], radius = 8)',
|
||||
expectBeforeUnconstrained:
|
||||
'circle(center = [xAbs001, 0], radius = 8)',
|
||||
expectAfterUnconstrained:
|
||||
'circle(center = [xAbs001, 0], radius = radius001)',
|
||||
expectFinal: 'circle(center = [xAbs001, 0], radius = 8)',
|
||||
@ -1195,7 +891,8 @@ part001 = startSketchOn(XZ)
|
||||
locator: '[data-overlay-toolbar-index="0"]',
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
)
|
||||
test.describe('Testing deleting a segment', () => {
|
||||
const _deleteSegmentSequence =
|
||||
(page: Page, editor: EditorFixture) =>
|
||||
@ -1230,78 +927,17 @@ part001 = startSketchOn(XZ)
|
||||
shouldNormalise: true,
|
||||
})
|
||||
|
||||
await page
|
||||
.locator(`[data-stdlib-fn-name="${stdLibFnName}"]`)
|
||||
.first()
|
||||
.click()
|
||||
await page.locator(`[data-stdlib-fn-name="${stdLibFnName}"]`).click()
|
||||
await page.getByText('Delete Segment').click()
|
||||
|
||||
await editor.expectEditor.not.toContain(codeToBeDeleted, {
|
||||
shouldNormalise: true,
|
||||
})
|
||||
}
|
||||
test('all segment types', async ({
|
||||
page,
|
||||
editor,
|
||||
homePage,
|
||||
scene,
|
||||
cmdBar,
|
||||
}) => {
|
||||
test('all segment types', async ({ page, editor, homePage }) => {
|
||||
await page.addInitScript(async () => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
<<<<<<< HEAD
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
|>startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|
||||
|> line(endAbsolute = [33, 11.5 + 0])
|
||||
|> xLine(endAbsolute = 9 - 5)
|
||||
|> yLine(endAbsolute = -10.77, tag = $a)
|
||||
|> xLine(length = 26.04)
|
||||
|> yLine(length = 21.14 + 0)
|
||||
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|
||||
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|
||||
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|
||||
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|
||||
|> angledLineThatIntersects({
|
||||
angle = 4.14,
|
||||
intersectTag = a,
|
||||
offset = 9
|
||||
}, %)
|
||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
||||
|> arcTo({
|
||||
interior = [16.25, 5.12],
|
||||
end = [21.61, 4.15]
|
||||
}, %)
|
||||
|> arc({
|
||||
radius = 9.03,
|
||||
angleStart = 40.27,
|
||||
angleEnd = -38.05
|
||||
}, %)
|
||||
|
||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|
||||
|> line(endAbsolute = [33, 11.5 + 0])
|
||||
|> xLine(endAbsolute = 9 - 5)
|
||||
|> yLine(endAbsolute = -10.77, tag = $a)
|
||||
|> xLine(length = 26.04)
|
||||
|> yLine(length = 21.14 + 0)
|
||||
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|
||||
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|
||||
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
|
||||
|> angledLineToY({ angle = 89, to = 9.14 + 0 }, %)
|
||||
|> angledLineThatIntersects({
|
||||
angle = 4.14,
|
||||
intersectTag = a,
|
||||
offset = 9
|
||||
}, %)
|
||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
||||
=======
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0.5, -14 + 0])
|
||||
@ -1321,7 +957,6 @@ part001 = startSketchOn(XZ)
|
||||
offset = 9
|
||||
}, %)
|
||||
|> tangentialArcTo([3.14 + 13, 1.14], %)
|
||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
||||
`
|
||||
)
|
||||
localStorage.setItem('disableAxis', 'true')
|
||||
@ -1330,55 +965,27 @@ part001 = startSketchOn(XZ)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
await scene.connectionEstablished()
|
||||
await scene.settled(cmdBar)
|
||||
await u.waitForPageLoad()
|
||||
|
||||
// wait for execution done
|
||||
await u.openDebugPanel()
|
||||
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||
await u.closeDebugPanel()
|
||||
|
||||
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
|
||||
await page.waitForTimeout(100)
|
||||
await page.getByRole('button', { name: 'Edit Sketch' }).click()
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(16)
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(13)
|
||||
const deleteSegmentSequence = _deleteSegmentSequence(page, editor)
|
||||
|
||||
let segmentToDelete
|
||||
|
||||
const getOverlayByIndex = (index: number) =>
|
||||
u.getBoundingBox(`[data - overlay - index="${index}"]`)
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(14)
|
||||
let ang = await u.getAngle('[data-overlay-index="14"]')
|
||||
|
||||
await editor.scrollToText('angleEnd')
|
||||
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: `arc({
|
||||
radius = 9.03,
|
||||
angleStart = 40.27,
|
||||
angleEnd = -38.05
|
||||
}, %)`,
|
||||
stdLibFnName: 'arc',
|
||||
ang: ang + 180,
|
||||
steps: 6,
|
||||
locator: '[data-overlay-toolbar-index="14"]',
|
||||
})
|
||||
segmentToDelete = await getOverlayByIndex(13)
|
||||
ang = await u.getAngle('[data-overlay-index="13"]')
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: `arcTo({
|
||||
interior =[16.25, 5.12],
|
||||
end =[21.61, 4.15]
|
||||
}, %)`,
|
||||
stdLibFnName: 'arcTo',
|
||||
ang: ang,
|
||||
steps: 6,
|
||||
locator: '[data-overlay-toolbar-index="13"]',
|
||||
})
|
||||
u.getBoundingBox(`[data-overlay-index="${index}"]`)
|
||||
segmentToDelete = await getOverlayByIndex(12)
|
||||
ang = await u.getAngle('[data-overlay-index="12"]')
|
||||
let ang = await u.getAngle(`[data-overlay-index="${12}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'tangentialArcTo([3.14 + 13, 1.14], %)',
|
||||
@ -1389,7 +996,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(11)
|
||||
ang = await u.getAngle('[data-overlay-index="11"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${11}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: `angledLineThatIntersects({
|
||||
@ -1404,7 +1011,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(10)
|
||||
ang = await u.getAngle('[data-overlay-index="10"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${10}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'angledLine(angle = 89, endAbsoluteY = 9.14 + 0)',
|
||||
@ -1414,7 +1021,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(9)
|
||||
ang = await u.getAngle('[data-overlay-index="9"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${9}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'angledLine(angle = 3 + 0, endAbsoluteX = 26)',
|
||||
@ -1424,7 +1031,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(8)
|
||||
ang = await u.getAngle('[data-overlay-index="8"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${8}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted:
|
||||
@ -1435,7 +1042,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(7)
|
||||
ang = await u.getAngle('[data-overlay-index="7"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${7}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted:
|
||||
@ -1446,7 +1053,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(6)
|
||||
ang = await u.getAngle('[data-overlay-index="6"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${6}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'yLine(length = 21.14 + 0)',
|
||||
@ -1456,7 +1063,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(5)
|
||||
ang = await u.getAngle('[data-overlay-index="5"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${5}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'xLine(length = 26.04)',
|
||||
@ -1466,7 +1073,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(4)
|
||||
ang = await u.getAngle('[data-overlay-index="4"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${4}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'yLine(endAbsolute = -10.77, tag = $a)',
|
||||
@ -1476,7 +1083,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(3)
|
||||
ang = await u.getAngle('[data-overlay-index="3"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${3}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'xLine(endAbsolute = 9 - 5)',
|
||||
@ -1486,7 +1093,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(2)
|
||||
ang = await u.getAngle('[data-overlay-index="2"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${2}"]`)
|
||||
await expect(page.getByText('Added variable')).not.toBeVisible()
|
||||
|
||||
const hoverPos = { x: segmentToDelete.x, y: segmentToDelete.y }
|
||||
@ -1519,7 +1126,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(1)
|
||||
ang = await u.getAngle('[data-overlay-index="1"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${1}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'angledLine(angle = 3 + 0, length = 32 + 0 )',
|
||||
@ -1529,7 +1136,7 @@ part001 = startSketchOn(XZ)
|
||||
})
|
||||
|
||||
segmentToDelete = await getOverlayByIndex(0)
|
||||
ang = await u.getAngle('[data-overlay-index="0"]')
|
||||
ang = await u.getAngle(`[data-overlay-index="${0}"]`)
|
||||
await deleteSegmentSequence({
|
||||
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
|
||||
codeToBeDeleted: 'line(end = [0.5, -14 + 0])',
|
||||
@ -1560,26 +1167,18 @@ part001 = startSketchOn(XZ)
|
||||
for (const doesHaveTagOutsideSketch of [true, false]) {
|
||||
for (const lineOfInterest of cases) {
|
||||
const isObj = lineOfInterest.includes('{ angle = 3,')
|
||||
test(`${ lineOfInterest.split('=')[0] }${ isObj? '-[obj-input]': '' }${
|
||||
doesHaveTagOutsideSketch? '-[tagOutsideSketch]': ''
|
||||
test(`${lineOfInterest.split('=')[0]}${isObj ? '-[obj-input]' : ''}${doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : ''
|
||||
}`, async ({ page, editor, homePage }) => {
|
||||
await page.addInitScript(
|
||||
async ({ lineToBeDeleted, extraLine }) => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([5, 6], %)
|
||||
|> ${ lineToBeDeleted }
|
||||
|> ${lineToBeDeleted}
|
||||
|> line(end = [-10, -15])
|
||||
<<<<<<< HEAD
|
||||
|> angledLine([-176, segLen(seg01)], %)
|
||||
||||||| parent of bcbec9f87 (Update KCL in JS project)
|
||||
|> angledLine([-176, segLen(seg01)], %)
|
||||
=======
|
||||
|> angledLine(angle = -176, length = segLen(seg01))
|
||||
>>>>>>> bcbec9f87 (Update KCL in JS project)
|
||||
${ extraLine? 'myVar = segLen(seg01)': '' }`
|
||||
${extraLine ? 'myVar = segLen(seg01)' : ''}`
|
||||
)
|
||||
},
|
||||
{
|
||||
@ -1607,8 +1206,7 @@ part001 = startSketchOn(XZ)
|
||||
page.getByRole('button', { name: 'Edit Sketch' })
|
||||
).toBeVisible()
|
||||
return true
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
} catch (_e) {
|
||||
} catch (_) {
|
||||
return false
|
||||
}
|
||||
})
|
||||
@ -1617,7 +1215,7 @@ part001 = startSketchOn(XZ)
|
||||
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
||||
const segmentToDelete = await u.getBoundingBox(
|
||||
`[data - overlay - index= "0"]`
|
||||
`[data-overlay-index="0"]`
|
||||
)
|
||||
|
||||
const isYLine = lineOfInterest.toLowerCase().includes('yline')
|
||||
@ -1730,7 +1328,7 @@ part001 = startSketchOn(XZ)
|
||||
|
||||
for (const { before, after } of cases) {
|
||||
const isObj = before.includes('{ angle = 3')
|
||||
test(`${ before.split('=')[0] }${ isObj? '-[obj-input]': '' }`, async ({
|
||||
test(`${before.split('=')[0]}${isObj ? '-[obj-input]' : ''}`, async ({
|
||||
page,
|
||||
editor,
|
||||
homePage,
|
||||
@ -1739,10 +1337,9 @@ part001 = startSketchOn(XZ)
|
||||
async ({ lineToBeDeleted }) => {
|
||||
localStorage.setItem(
|
||||
'persistCode',
|
||||
`@settings(defaultLengthUnit = in)
|
||||
part001 = startSketchOn(XZ)
|
||||
`part001 = startSketchOn('XZ')
|
||||
|> startProfileAt([5, 6], %)
|
||||
|> ${ lineToBeDeleted }
|
||||
|> ${lineToBeDeleted}
|
||||
|> line(end = [-10, -15])
|
||||
|> angledLine(angle = -176, length = segLen(seg01))`
|
||||
)
|
||||
@ -1766,8 +1363,8 @@ part001 = startSketchOn(XZ)
|
||||
await expect(page.getByTestId('segment-overlay')).toHaveCount(3)
|
||||
await expect(page.getByText('Added variable')).not.toBeVisible()
|
||||
|
||||
const hoverPos = await u.getBoundingBox(`[data - overlay - index="0"]`)
|
||||
let ang = await u.getAngle('[data-overlay-index="0"]')
|
||||
const hoverPos = await u.getBoundingBox(`[data-overlay-index="0"]`)
|
||||
let ang = await u.getAngle(`[data-overlay-index="${0}"]`)
|
||||
ang += 180
|
||||
|
||||
await page.mouse.move(0, 0)
|
||||
|
||||
@ -5,3 +5,8 @@ export const ARG_END_ABSOLUTE = 'endAbsolute'
|
||||
export const ARG_CIRCLE_CENTER = 'center'
|
||||
export const ARG_CIRCLE_RADIUS = 'radius'
|
||||
export const DETERMINING_ARGS = [ARG_LENGTH, ARG_END, ARG_END_ABSOLUTE]
|
||||
export const ARG_LENGTH_X = 'lengthX'
|
||||
export const ARG_LENGTH_Y = 'lengthY'
|
||||
export const ARG_ANGLE = 'angle'
|
||||
export const ARG_END_ABSOLUTE_X = 'endAbsoluteX'
|
||||
export const ARG_END_ABSOLUTE_Y = 'endAbsoluteY'
|
||||
|
||||
@ -182,6 +182,7 @@ const commonConstraintInfoHelper = (
|
||||
pathToNode: PathToNode,
|
||||
filterValue?: string
|
||||
) => {
|
||||
console.warn('ADAM: Must be updated to handle angled line kw args')
|
||||
if (callExp.type !== 'CallExpression' && callExp.type !== 'CallExpressionKw')
|
||||
return []
|
||||
const firstArg = (() => {
|
||||
@ -2169,7 +2170,7 @@ export const circleThreePoint: SketchLineHelperKw = {
|
||||
return finalConstraints
|
||||
},
|
||||
}
|
||||
export const angledLine: SketchLineHelper = {
|
||||
export const angledLine: SketchLineHelperKw = {
|
||||
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
||||
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { from, to } = segmentInput
|
||||
@ -2181,12 +2182,13 @@ export const angledLine: SketchLineHelper = {
|
||||
|
||||
const newAngleVal = createLiteral(roundOff(getAngle(from, to), 0))
|
||||
const newLengthVal = createLiteral(roundOff(getLength(from, to), 2))
|
||||
const newLine = createCallExpression('angledLine', [
|
||||
createArrayExpression([newAngleVal, newLengthVal]),
|
||||
createPipeSubstitution(),
|
||||
const newLine = createCallExpressionStdLibKw('angledLine', null, [
|
||||
createLabeledArg('angle', newAngleVal),
|
||||
createLabeledArg('length', newLengthVal),
|
||||
])
|
||||
|
||||
if (replaceExistingCallback) {
|
||||
console.warn('ADAM: Probably needs to be adjusted for kw args')
|
||||
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
||||
const result = replaceExistingCallback([
|
||||
{
|
||||
@ -2224,7 +2226,7 @@ export const angledLine: SketchLineHelper = {
|
||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { to, from } = input
|
||||
const _node = { ...node }
|
||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
||||
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||
if (err(nodeMeta)) return nodeMeta
|
||||
const { node: callExpression } = nodeMeta
|
||||
const angle = roundOff(getAngle(from, to), 0)
|
||||
@ -2234,18 +2236,17 @@ export const angledLine: SketchLineHelper = {
|
||||
const lengthLit = createLiteral(lineLength)
|
||||
|
||||
const firstArg = callExpression.arguments?.[0]
|
||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
||||
mutateObjExpProp(firstArg, lengthLit, 'length')
|
||||
}
|
||||
removeDeterminingArgs(callExpression)
|
||||
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||
mutateKwArg(ARG_LENGTH, callExpression, lengthLit)
|
||||
|
||||
return {
|
||||
modifiedAst: _node,
|
||||
pathToNode,
|
||||
}
|
||||
},
|
||||
getTag: getTag(),
|
||||
addTag: addTag(),
|
||||
getTag: getTagKwArg(),
|
||||
addTag: addTagKw(),
|
||||
getConstraintInfo: (callExp, ...args) =>
|
||||
commonConstraintInfoHelper(
|
||||
callExp,
|
||||
@ -2259,7 +2260,7 @@ export const angledLine: SketchLineHelper = {
|
||||
),
|
||||
}
|
||||
|
||||
export const angledLineOfXLength: SketchLineHelper = {
|
||||
export const angledLineOfXLength: SketchLineHelperKw = {
|
||||
add: ({
|
||||
node,
|
||||
variables,
|
||||
@ -2313,9 +2314,9 @@ export const angledLineOfXLength: SketchLineHelper = {
|
||||
if (err(result)) return result
|
||||
newLine = result.callExp
|
||||
} else {
|
||||
newLine = createCallExpression('angledLineOfXLength', [
|
||||
createArrayExpression([angle, xLength]),
|
||||
createPipeSubstitution(),
|
||||
newLine = createCallExpressionStdLibKw('angledLineOfXLength', null, [
|
||||
createLabeledArg(ARG_ANGLE, angle),
|
||||
createLabeledArg(ARG_LENGTH_X, xLength),
|
||||
])
|
||||
}
|
||||
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
||||
@ -2333,32 +2334,38 @@ export const angledLineOfXLength: SketchLineHelper = {
|
||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { to, from } = input
|
||||
const _node = { ...node }
|
||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
||||
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||
if (err(nodeMeta)) return nodeMeta
|
||||
const { node: callExpression } = nodeMeta
|
||||
const angle = roundOff(getAngle(from, to), 0)
|
||||
const xLength = roundOff(Math.abs(to[0] - from[0]), 2)
|
||||
|
||||
const firstArg = callExpression.arguments?.[0]
|
||||
const adjustedXLength = isAngleLiteral(firstArg)
|
||||
const oldAngle = findKwArg(ARG_ANGLE, callExpression)
|
||||
if (oldAngle === undefined) {
|
||||
return new Error(
|
||||
`expected an angle arg, but it was not found. Args were ${allLabels(
|
||||
callExpression
|
||||
)}`
|
||||
)
|
||||
}
|
||||
const adjustedXLength = isAngleLiteral(oldAngle)
|
||||
? Math.abs(xLength)
|
||||
: xLength // todo make work for variable angle > 180
|
||||
|
||||
const angleLit = createLiteral(angle)
|
||||
const lengthLit = createLiteral(adjustedXLength)
|
||||
|
||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
||||
mutateObjExpProp(firstArg, lengthLit, 'length')
|
||||
}
|
||||
removeDeterminingArgs(callExpression)
|
||||
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||
mutateKwArg(ARG_LENGTH_X, callExpression, lengthLit)
|
||||
|
||||
return {
|
||||
modifiedAst: _node,
|
||||
pathToNode,
|
||||
}
|
||||
},
|
||||
getTag: getTag(),
|
||||
addTag: addTag(),
|
||||
getTag: getTagKwArg(),
|
||||
addTag: addTagKw(),
|
||||
getConstraintInfo: (callExp, ...args) =>
|
||||
commonConstraintInfoHelper(
|
||||
callExp,
|
||||
@ -2372,7 +2379,7 @@ export const angledLineOfXLength: SketchLineHelper = {
|
||||
),
|
||||
}
|
||||
|
||||
export const angledLineOfYLength: SketchLineHelper = {
|
||||
export const angledLineOfYLength: SketchLineHelperKw = {
|
||||
add: ({
|
||||
node,
|
||||
variables,
|
||||
@ -2424,9 +2431,9 @@ export const angledLineOfYLength: SketchLineHelper = {
|
||||
if (err(result)) return result
|
||||
newLine = result.callExp
|
||||
} else {
|
||||
newLine = createCallExpression('angledLineOfYLength', [
|
||||
createArrayExpression([angle, yLength]),
|
||||
createPipeSubstitution(),
|
||||
newLine = createCallExpressionStdLibKw('angledLine', null, [
|
||||
createLabeledArg(ARG_ANGLE, angle),
|
||||
createLabeledArg(ARG_LENGTH_Y, yLength),
|
||||
])
|
||||
}
|
||||
const { index: callIndex } = splitPathAtPipeExpression(pathToNode)
|
||||
@ -2444,32 +2451,38 @@ export const angledLineOfYLength: SketchLineHelper = {
|
||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { to, from } = input
|
||||
const _node = { ...node }
|
||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
||||
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||
if (err(nodeMeta)) return nodeMeta
|
||||
const { node: callExpression } = nodeMeta
|
||||
const angle = roundOff(getAngle(from, to), 0)
|
||||
const yLength = roundOff(to[1] - from[1], 2)
|
||||
|
||||
const firstArg = callExpression.arguments?.[0]
|
||||
const adjustedYLength = isAngleLiteral(firstArg)
|
||||
const oldAngle = findKwArg(ARG_ANGLE, callExpression)
|
||||
if (oldAngle === undefined) {
|
||||
return new Error(
|
||||
`expected an angle arg, but it was not found. Args were ${allLabels(
|
||||
callExpression
|
||||
)}`
|
||||
)
|
||||
}
|
||||
const adjustedYLength = isAngleLiteral(oldAngle)
|
||||
? Math.abs(yLength)
|
||||
: yLength // todo make work for variable angle > 180
|
||||
|
||||
const angleLit = createLiteral(angle)
|
||||
const lengthLit = createLiteral(adjustedYLength)
|
||||
|
||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
||||
mutateObjExpProp(firstArg, lengthLit, 'length')
|
||||
}
|
||||
removeDeterminingArgs(callExpression)
|
||||
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||
mutateKwArg(ARG_LENGTH_Y, callExpression, lengthLit)
|
||||
|
||||
return {
|
||||
modifiedAst: _node,
|
||||
pathToNode,
|
||||
}
|
||||
},
|
||||
getTag: getTag(),
|
||||
addTag: addTag(),
|
||||
getTag: getTagKwArg(),
|
||||
addTag: addTagKw(),
|
||||
getConstraintInfo: (callExp, ...args) =>
|
||||
commonConstraintInfoHelper(
|
||||
callExp,
|
||||
@ -2483,7 +2496,7 @@ export const angledLineOfYLength: SketchLineHelper = {
|
||||
),
|
||||
}
|
||||
|
||||
export const angledLineToX: SketchLineHelper = {
|
||||
export const angledLineToX: SketchLineHelperKw = {
|
||||
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
||||
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { from, to } = segmentInput
|
||||
@ -2526,9 +2539,9 @@ export const angledLineToX: SketchLineHelper = {
|
||||
}
|
||||
}
|
||||
|
||||
const callExp = createCallExpression('angledLineToX', [
|
||||
createArrayExpression([angle, xArg]),
|
||||
createPipeSubstitution(),
|
||||
const callExp = createCallExpressionStdLibKw('angledLineToX', null, [
|
||||
createLabeledArg(ARG_ANGLE, angle),
|
||||
createLabeledArg(ARG_END_ABSOLUTE_X, xArg),
|
||||
])
|
||||
pipe.body = [...pipe.body, callExp]
|
||||
return {
|
||||
@ -2540,30 +2553,28 @@ export const angledLineToX: SketchLineHelper = {
|
||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { to, from } = input
|
||||
const _node = { ...node }
|
||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
||||
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||
if (err(nodeMeta)) return nodeMeta
|
||||
|
||||
const { node: callExpression } = nodeMeta
|
||||
const angle = roundOff(getAngle(from, to), 0)
|
||||
const xLength = roundOff(to[0], 2)
|
||||
|
||||
const firstArg = callExpression.arguments?.[0]
|
||||
const adjustedXLength = xLength
|
||||
|
||||
const angleLit = createLiteral(angle)
|
||||
const lengthLit = createLiteral(adjustedXLength)
|
||||
|
||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
||||
mutateObjExpProp(firstArg, lengthLit, 'to')
|
||||
}
|
||||
removeDeterminingArgs(callExpression)
|
||||
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||
mutateKwArg(ARG_END_ABSOLUTE_X, callExpression, lengthLit)
|
||||
return {
|
||||
modifiedAst: _node,
|
||||
pathToNode,
|
||||
}
|
||||
},
|
||||
getTag: getTag(),
|
||||
addTag: addTag(),
|
||||
getTag: getTagKwArg(),
|
||||
addTag: addTagKw(),
|
||||
getConstraintInfo: (callExp, ...args) =>
|
||||
commonConstraintInfoHelper(
|
||||
callExp,
|
||||
@ -2577,7 +2588,7 @@ export const angledLineToX: SketchLineHelper = {
|
||||
),
|
||||
}
|
||||
|
||||
export const angledLineToY: SketchLineHelper = {
|
||||
export const angledLineToY: SketchLineHelperKw = {
|
||||
add: ({ node, pathToNode, segmentInput, replaceExistingCallback }) => {
|
||||
if (segmentInput.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { from, to } = segmentInput
|
||||
@ -2622,9 +2633,9 @@ export const angledLineToY: SketchLineHelper = {
|
||||
}
|
||||
}
|
||||
|
||||
const newLine = createCallExpression('angledLineToY', [
|
||||
createArrayExpression([angle, yArg]),
|
||||
createPipeSubstitution(),
|
||||
const newLine = createCallExpressionStdLibKw('angledLine', null, [
|
||||
createLabeledArg(ARG_ANGLE, angle),
|
||||
createLabeledArg(ARG_END_ABSOLUTE_Y, yArg),
|
||||
])
|
||||
pipe.body = [...pipe.body, newLine]
|
||||
return {
|
||||
@ -2636,30 +2647,28 @@ export const angledLineToY: SketchLineHelper = {
|
||||
if (input.type !== 'straight-segment') return STRAIGHT_SEGMENT_ERR
|
||||
const { to, from } = input
|
||||
const _node = { ...node }
|
||||
const nodeMeta = getNodeFromPath<CallExpression>(_node, pathToNode)
|
||||
const nodeMeta = getNodeFromPath<CallExpressionKw>(_node, pathToNode)
|
||||
if (err(nodeMeta)) return nodeMeta
|
||||
|
||||
const { node: callExpression } = nodeMeta
|
||||
const angle = roundOff(getAngle(from, to), 0)
|
||||
const xLength = roundOff(to[1], 2)
|
||||
|
||||
const firstArg = callExpression.arguments?.[0]
|
||||
const adjustedXLength = xLength
|
||||
|
||||
const angleLit = createLiteral(angle)
|
||||
const lengthLit = createLiteral(adjustedXLength)
|
||||
|
||||
if (!mutateArrExp(firstArg, createArrayExpression([angleLit, lengthLit]))) {
|
||||
mutateObjExpProp(firstArg, angleLit, 'angle')
|
||||
mutateObjExpProp(firstArg, lengthLit, 'to')
|
||||
}
|
||||
removeDeterminingArgs(callExpression)
|
||||
mutateKwArg(ARG_ANGLE, callExpression, angleLit)
|
||||
mutateKwArg(ARG_END_ABSOLUTE_Y, callExpression, lengthLit)
|
||||
return {
|
||||
modifiedAst: _node,
|
||||
pathToNode,
|
||||
}
|
||||
},
|
||||
getTag: getTag(),
|
||||
addTag: addTag(),
|
||||
getTag: getTagKwArg(),
|
||||
addTag: addTagKw(),
|
||||
getConstraintInfo: (callExp, ...args) =>
|
||||
commonConstraintInfoHelper(
|
||||
callExp,
|
||||
@ -2918,11 +2927,6 @@ export const updateStartProfileAtArgs: SketchLineHelper['updateArgs'] = ({
|
||||
}
|
||||
|
||||
export const sketchLineHelperMap: { [key: string]: SketchLineHelper } = {
|
||||
angledLine,
|
||||
angledLineOfXLength,
|
||||
angledLineOfYLength,
|
||||
angledLineToX,
|
||||
angledLineToY,
|
||||
angledLineThatIntersects,
|
||||
tangentialArcTo,
|
||||
arc,
|
||||
@ -2938,6 +2942,11 @@ export const sketchLineHelperMapKw: { [key: string]: SketchLineHelperKw } = {
|
||||
yLine,
|
||||
xLineTo,
|
||||
yLineTo,
|
||||
angledLine,
|
||||
angledLineOfXLength,
|
||||
angledLineOfYLength,
|
||||
angledLineToX,
|
||||
angledLineToY,
|
||||
} as const
|
||||
|
||||
export function changeSketchArguments(
|
||||
@ -2983,10 +2992,10 @@ export function changeSketchArguments(
|
||||
})
|
||||
}
|
||||
if (fnName in sketchLineHelperMapKw) {
|
||||
const isAbsolute =
|
||||
callExpression.type === 'CallExpressionKw' &&
|
||||
findKwArg(ARG_END_ABSOLUTE, callExpression) !== undefined
|
||||
const correctFnName = fnNameToTooltip(isAbsolute, fnName)
|
||||
const correctFnName =
|
||||
callExpression.type === 'CallExpressionKw'
|
||||
? fnNameToTooltip(allLabels(callExpression), fnName)
|
||||
: fnName
|
||||
if (err(correctFnName)) {
|
||||
return correctFnName
|
||||
}
|
||||
@ -3015,9 +3024,11 @@ export function changeSketchArguments(
|
||||
* To put it another way, function names don't map cleanly to tooltips, but function names + arguments do.
|
||||
*/
|
||||
export function fnNameToTooltip(
|
||||
isAbsolute: boolean,
|
||||
argLabels: string[],
|
||||
fnName: string
|
||||
): ToolTip | Error {
|
||||
const isAbsolute =
|
||||
argLabels.findIndex((label) => label === ARG_END_ABSOLUTE) >= 0
|
||||
switch (fnName) {
|
||||
case 'line':
|
||||
return isAbsolute ? 'lineTo' : 'line'
|
||||
@ -3028,6 +3039,23 @@ export function fnNameToTooltip(
|
||||
case 'circleThreePoint':
|
||||
case 'circle':
|
||||
return fnName
|
||||
case 'angledLine': {
|
||||
const argmap: Record<string, ToolTip> = {
|
||||
ARG_LENGTH_X: 'angledLineOfXLength',
|
||||
ARG_LENGTH_Y: 'angledLineOfYLength',
|
||||
ARG_END_ABSOLUTE_X: 'angledLineToX',
|
||||
ARG_END_ABSOLUTE_Y: 'angledLineToY',
|
||||
ARG_LENGTH: 'angledLine',
|
||||
}
|
||||
for (const [arg, tooltip] of Object.entries(argmap)) {
|
||||
if (argLabels.findIndex((label) => label === arg) >= 0) {
|
||||
return tooltip
|
||||
}
|
||||
}
|
||||
const err = `Unknown angledline arguments, could not map to tooltip. Args were ${argLabels}`
|
||||
console.error(err)
|
||||
return new Error(err)
|
||||
}
|
||||
default:
|
||||
const err = `Unknown sketch line function ${fnName}`
|
||||
console.error(err)
|
||||
@ -3055,6 +3083,12 @@ export function tooltipToFnName(tooltip: ToolTip): string | Error {
|
||||
return 'xLine'
|
||||
case 'yLineTo':
|
||||
return 'yLine'
|
||||
case 'angledLine':
|
||||
case 'angledLineToX':
|
||||
case 'angledLineToY':
|
||||
case 'angledLineOfXLength':
|
||||
case 'angledLineOfYLength':
|
||||
return 'angledLine'
|
||||
default:
|
||||
return new Error(`Unknown tooltip function ${tooltip}`)
|
||||
}
|
||||
@ -3092,7 +3126,7 @@ export function getConstraintInfoKw(
|
||||
return []
|
||||
}
|
||||
if (!(fnName in sketchLineHelperMapKw)) return []
|
||||
const correctFnName = fnNameToTooltip(isAbsolute, fnName)
|
||||
const correctFnName = fnNameToTooltip(allLabels(callExpression), fnName)
|
||||
if (err(correctFnName)) {
|
||||
console.error(correctFnName)
|
||||
return []
|
||||
@ -3453,6 +3487,7 @@ export function getTagFromCallExpression(
|
||||
return new Error(`"${callExp.callee.name.name}" is not a sketch line helper`)
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
function isAngleLiteral(lineArugement: Expr): boolean {
|
||||
return lineArugement?.type === 'ArrayExpression'
|
||||
? isLiteralArrayOrStatic(lineArugement.elements[0])
|
||||
@ -3462,6 +3497,25 @@ function isAngleLiteral(lineArugement: Expr): boolean {
|
||||
?.value
|
||||
)
|
||||
: false
|
||||
||||||| parent of 27a8a2a50 (Start changing JS codemods)
|
||||
function isAngleLiteral(lineArugement: Expr): boolean {
|
||||
return lineArugement?.type === 'ArrayExpression'
|
||||
? isLiteralArrayOrStatic(lineArugement.elements[0])
|
||||
: lineArugement?.type === 'ObjectExpression'
|
||||
? isLiteralArrayOrStatic(
|
||||
lineArugement.properties.find(({ key }) => key.name === 'angle')?.value
|
||||
)
|
||||
: false
|
||||
=======
|
||||
function isAngleLiteral(lineArgument: Expr): boolean {
|
||||
return lineArgument?.type === 'ArrayExpression'
|
||||
? isLiteralArrayOrStatic(lineArgument.elements[0])
|
||||
: lineArgument?.type === 'ObjectExpression'
|
||||
? isLiteralArrayOrStatic(
|
||||
lineArgument.properties.find(({ key }) => key.name === 'angle')?.value
|
||||
)
|
||||
: lineArgument?.type === 'Literal'
|
||||
>>>>>>> 27a8a2a50 (Start changing JS codemods)
|
||||
}
|
||||
|
||||
type addTagFn = (
|
||||
@ -3782,7 +3836,7 @@ export function getArgForEnd(lineCall: CallExpressionKw):
|
||||
return getValuesForXYFns(arg)
|
||||
}
|
||||
case 'yLine':
|
||||
case 'xLine':
|
||||
case 'xLine': {
|
||||
const arg = findKwArgAny(DETERMINING_ARGS, lineCall)
|
||||
const tag = findKwArg(ARG_TAG, lineCall)
|
||||
if (arg === undefined) {
|
||||
@ -3790,6 +3844,30 @@ export function getArgForEnd(lineCall: CallExpressionKw):
|
||||
} else {
|
||||
return { val: arg, tag }
|
||||
}
|
||||
}
|
||||
case 'angledLine': {
|
||||
const angle = findKwArg(ARG_ANGLE, lineCall)
|
||||
if (angle === undefined) {
|
||||
return new Error(`call to ${name} needs an ${ARG_ANGLE} arg`)
|
||||
}
|
||||
const length = findKwArgAny(
|
||||
[
|
||||
ARG_LENGTH,
|
||||
ARG_LENGTH_X,
|
||||
ARG_LENGTH_Y,
|
||||
ARG_END_ABSOLUTE_X,
|
||||
ARG_END_ABSOLUTE_Y,
|
||||
],
|
||||
lineCall
|
||||
)
|
||||
if (length === undefined) {
|
||||
return new Error(
|
||||
`call to ${name} needs an arg like ${ARG_LENGTH}, or ${ARG_END_ABSOLUTE_X} or something`
|
||||
)
|
||||
}
|
||||
const tag = findKwArg(ARG_TAG, lineCall)
|
||||
return { val: [angle, length], tag }
|
||||
}
|
||||
default:
|
||||
return new Error(`unknown function ${name}`)
|
||||
}
|
||||
|
||||
@ -5,7 +5,12 @@ import {
|
||||
ARG_END_ABSOLUTE,
|
||||
ARG_LENGTH,
|
||||
ARG_TAG,
|
||||
ARG_ANGLE,
|
||||
DETERMINING_ARGS,
|
||||
ARG_END_ABSOLUTE_X,
|
||||
ARG_END_ABSOLUTE_Y,
|
||||
ARG_LENGTH_X,
|
||||
ARG_LENGTH_Y,
|
||||
} from '@src/lang/constants'
|
||||
import {
|
||||
createArrayExpression,
|
||||
@ -162,6 +167,43 @@ function createCallWrapper(
|
||||
valueUsedInTransform,
|
||||
}
|
||||
}
|
||||
if (
|
||||
tooltip === 'angledLine' ||
|
||||
tooltip === 'angledLineToX' ||
|
||||
tooltip === 'angledLineToY' ||
|
||||
tooltip === 'angledLineOfXLength' ||
|
||||
tooltip === 'angledLineOfYLength'
|
||||
) {
|
||||
const args = [createLabeledArg(ARG_ANGLE, val[0])]
|
||||
const v = val[1]
|
||||
args.push(
|
||||
(() => {
|
||||
switch (tooltip) {
|
||||
case 'angledLine':
|
||||
return createLabeledArg(ARG_LENGTH, v)
|
||||
case 'angledLineToX':
|
||||
return createLabeledArg(ARG_END_ABSOLUTE_X, v)
|
||||
case 'angledLineToY':
|
||||
return createLabeledArg(ARG_END_ABSOLUTE_Y, v)
|
||||
case 'angledLineOfXLength':
|
||||
return createLabeledArg(ARG_LENGTH_X, v)
|
||||
case 'angledLineOfYLength':
|
||||
return createLabeledArg(ARG_LENGTH_Y, v)
|
||||
}
|
||||
})()
|
||||
)
|
||||
if (tag) {
|
||||
args.push(createLabeledArg(ARG_TAG, tag))
|
||||
}
|
||||
return {
|
||||
callExp: createCallExpressionStdLibKw(
|
||||
'angledLine',
|
||||
null, // Assumes this is being called in a pipeline, so the first arg is optional and if not given, will become pipeline substitution.
|
||||
args
|
||||
),
|
||||
valueUsedInTransform,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// In this branch, `val` is an expression.
|
||||
const arg = (() => {
|
||||
@ -1685,8 +1727,7 @@ function getTransformMapPathKw(
|
||||
}
|
||||
return false
|
||||
}
|
||||
const isAbsolute = findKwArg(ARG_END_ABSOLUTE, sketchFnExp) !== undefined
|
||||
const tooltip = fnNameToTooltip(isAbsolute, name)
|
||||
const tooltip = fnNameToTooltip(allLabels(sketchFnExp), name)
|
||||
if (err(tooltip)) {
|
||||
return false
|
||||
}
|
||||
@ -1717,6 +1758,7 @@ function getTransformMapPathKw(
|
||||
}
|
||||
|
||||
// check what constraints the function has
|
||||
const isAbsolute = findKwArg(ARG_END_ABSOLUTE, sketchFnExp) !== undefined
|
||||
const lineInputType = getConstraintType(argForEnd.val, name, isAbsolute)
|
||||
if (lineInputType) {
|
||||
const info = transformMap?.[tooltip]?.[lineInputType]?.[constraintType]
|
||||
|
||||
@ -2,7 +2,7 @@ import type { Binary as BSONBinary } from 'bson'
|
||||
import { v4 } from 'uuid'
|
||||
import type { AnyMachineSnapshot } from 'xstate'
|
||||
|
||||
import type { SourceRange } from '@src/lang/wasm'
|
||||
import type { CallExpressionKw, SourceRange } from '@src/lang/wasm'
|
||||
import { isDesktop } from '@src/lib/isDesktop'
|
||||
import type { AsyncFn } from '@src/lib/types'
|
||||
|
||||
@ -469,3 +469,7 @@ export function binaryToUuid(
|
||||
hexValues.slice(10, 16).join(''),
|
||||
].join('-')
|
||||
}
|
||||
|
||||
export function allLabels(callExpression: CallExpressionKw): string[] {
|
||||
return callExpression.arguments.map((a) => a.label.name)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user