Update test KCL

This commit is contained in:
Adam Chalmers
2025-01-07 16:05:06 -06:00
committed by Nick Cameron
parent cc9a14ddd9
commit e917eb9af6
12 changed files with 584 additions and 584 deletions

View File

@ -11,8 +11,8 @@ describe('testing artifacts', () => {
const code = ` const code = `
const mySketch001 = startSketchOn('XY') const mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([-1.59, -1.54], %) |> line(endAbsolute = [-1.59, -1.54])
|> lineTo([0.46, -5.82], %) |> line(endAbsolute = [0.46, -5.82])
// |> rx(45, %)` // |> rx(45, %)`
const execState = await enginelessExecutor(assertParse(code)) const execState = await enginelessExecutor(assertParse(code))
// @ts-ignore // @ts-ignore
@ -66,10 +66,10 @@ const mySketch001 = startSketchOn('XY')
const code = ` const code = `
const mySketch001 = startSketchOn('XY') const mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([-1.59, -1.54], %) |> line(endAbsolute = [-1.59, -1.54])
|> lineTo([0.46, -5.82], %) |> line(endAbsolute = [0.46, -5.82])
// |> rx(45, %) // |> rx(45, %)
|> extrude(2, %)` |> extrude(length = 2)`
const execState = await enginelessExecutor(assertParse(code)) const execState = await enginelessExecutor(assertParse(code))
// @ts-ignore // @ts-ignore
const sketch001 = execState.memory.get('mySketch001') const sketch001 = execState.memory.get('mySketch001')
@ -142,21 +142,21 @@ const mySketch001 = startSketchOn('XY')
const code = ` const code = `
const sk1 = startSketchOn('XY') const sk1 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([-2.5, 0], %) |> line(endAbsolute = [-2.5, 0])
|> lineTo([0, 10], %, $p) |> line(endAbsolute = [0, 10], tag = $p)
|> lineTo([2.5, 0], %) |> line(endAbsolute = [2.5, 0])
// |> rx(45, %) // |> rx(45, %)
// |> translate([1,0,1], %) // |> translate([1,0,1], %)
// |> ry(5, %) // |> ry(5, %)
const theExtrude = extrude(2, sk1) const theExtrude = extrude(sk1, length = 2)
// const theTransf = getExtrudeWallTransform('p', theExtrude) // const theTransf = getExtrudeWallTransform('p', theExtrude)
const sk2 = startSketchOn('XY') const sk2 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([-2.5, 0], %) |> line(endAbsolute = [-2.5, 0])
|> lineTo([0, 3], %, $o) |> line(endAbsolute = [0, 3], tag = $o)
|> lineTo([2.5, 0], %) |> line(endAbsolute = [2.5, 0])
// |> transform(theTransf, %) // |> transform(theTransf, %)
|> extrude(2, %) |> extrude(length = 2)
` `
const execState = await enginelessExecutor(assertParse(code)) const execState = await enginelessExecutor(assertParse(code))

View File

@ -53,10 +53,10 @@ const newVar = myVar + 1`
it('sketch declaration', async () => { it('sketch declaration', async () => {
let code = `const mySketch = startSketchOn('XY') let code = `const mySketch = startSketchOn('XY')
|> startProfileAt([0,0], %) |> startProfileAt([0,0], %)
|> lineTo([0,2], %, $myPath) |> line(endAbsolute = [0,2], tag = $myPath)
|> lineTo([2,3], %) |> line(endAbsolute = [2,3])
|> lineTo([5,-1], %, $rightPath) |> line(endAbsolute = [5,-1], tag = $rightPath)
// |> close(%) // |> close()
` `
const mem = await exe(code) const mem = await exe(code)
// geo is three js buffer geometry and is very bloated to have in tests // geo is three js buffer geometry and is very bloated to have in tests
@ -124,9 +124,9 @@ const newVar = myVar + 1`
// it('rotated sketch', async () => { // it('rotated sketch', async () => {
// const code = [ // const code = [
// 'const mySk1 = startSketchAt([0,0])', // 'const mySk1 = startSketchAt([0,0])',
// ' |> lineTo([1,1], %)', // ' |> line(endAbsolute = [1,1])',
// ' |> lineTo([0, 1], %, "myPath")', // ' |> line(endAbsolute = [0, 1], tag = "myPath")',
// ' |> lineTo([1, 1], %)', // ' |> line(endAbsolute = [1, 1])',
// 'const rotated = rx(90, mySk1)', // 'const rotated = rx(90, mySk1)',
// ].join('\n') // ].join('\n')
// const mem = await exe(code) // const mem = await exe(code)
@ -151,9 +151,9 @@ const newVar = myVar + 1`
const code = [ const code = [
"const mySk1 = startSketchOn('XY')", "const mySk1 = startSketchOn('XY')",
' |> startProfileAt([0,0], %)', ' |> startProfileAt([0,0], %)',
' |> lineTo([1,1], %)', ' |> line(endAbsolute = [1,1])',
' |> lineTo([0, 1], %, $myPath)', ' |> line(endAbsolute = [0, 1], tag = $myPath)',
' |> lineTo([1,1], %)', ' |> line(endAbsolute = [1,1])',
// ' |> rx(90, %)', // ' |> rx(90, %)',
].join('\n') ].join('\n')
const mem = await exe(code) const mem = await exe(code)
@ -421,7 +421,7 @@ describe('testing math operators', () => {
const code = [ const code = [
"const part001 = startSketchOn('XY')", "const part001 = startSketchOn('XY')",
' |> startProfileAt([0, 0], %)', ' |> startProfileAt([0, 0], %)',
'|> line([-2.21, -legLen(5, min(3, 999))], %)', '|> line(end = [-2.21, -legLen(5, min(3, 999))])',
].join('\n') ].join('\n')
const mem = await exe(code) const mem = await exe(code)
const sketch = sketchFromKclValue(mem.get('part001'), 'part001') const sketch = sketchFromKclValue(mem.get('part001'), 'part001')
@ -434,7 +434,7 @@ describe('testing math operators', () => {
`const myVar = 3`, `const myVar = 3`,
`const part001 = startSketchOn('XY')`, `const part001 = startSketchOn('XY')`,
` |> startProfileAt([0, 0], %)`, ` |> startProfileAt([0, 0], %)`,
` |> line([3, 4], %, $seg01)`, ` |> line(end = [3, 4], tag = $seg01)`,
` |> line([`, ` |> line([`,
` min(segLen(seg01), myVar),`, ` min(segLen(seg01), myVar),`,
` -legLen(segLen(seg01), myVar)`, ` -legLen(segLen(seg01), myVar)`,
@ -476,11 +476,11 @@ describe('Testing Errors', () => {
const code = `const myVar = 5 const code = `const myVar = 5
const theExtrude = startSketchOn('XY') const theExtrude = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([-2.4, 5], %) |> line(end = [-2.4, 5])
|> line(myVarZ, %) |> line(end = myVarZ)
|> line([5,5], %) |> line(end = [5,5])
|> close(%) |> close()
|> extrude(4, %)` |> extrude(length = 4)`
await expect(exe(code)).rejects.toEqual( await expect(exe(code)).rejects.toEqual(
new KCLError( new KCLError(
'undefined_value', 'undefined_value',

View File

@ -18,11 +18,11 @@ describe('testing getNodePathFromSourceRange', () => {
const code = ` const code = `
const myVar = 5 const myVar = 5
const sk3 = startSketchAt([0, 0]) const sk3 = startSketchAt([0, 0])
|> lineTo([1, 2], %) |> line(endAbsolute = [1, 2])
|> lineTo([3, 4], %, $yo) |> line(endAbsolute = [3, 4], tag = $yo)
|> close(%) |> close()
` `
const subStr = 'lineTo([3, 4], %, $yo)' const subStr = 'line(endAbsolute = [3, 4], tag = $yo)'
const lineToSubstringIndex = code.indexOf(subStr) const lineToSubstringIndex = code.indexOf(subStr)
const sourceRange = topLevelRange( const sourceRange = topLevelRange(
lineToSubstringIndex, lineToSubstringIndex,
@ -41,9 +41,9 @@ const sk3 = startSketchAt([0, 0])
it('gets path right for function definition params', () => { it('gets path right for function definition params', () => {
const code = `fn cube = (pos, scale) => { const code = `fn cube = (pos, scale) => {
const sg = startSketchAt(pos) const sg = startSketchAt(pos)
|> line([0, scale], %) |> line(end = [0, scale])
|> line([scale, 0], %) |> line(end = [scale, 0])
|> line([0, -scale], %) |> line(end = [0, -scale])
return sg return sg
} }
@ -73,9 +73,9 @@ const b1 = cube([0,0], 10)`
it('gets path right for deep within function definition body', () => { it('gets path right for deep within function definition body', () => {
const code = `fn cube = (pos, scale) => { const code = `fn cube = (pos, scale) => {
const sg = startSketchAt(pos) const sg = startSketchAt(pos)
|> line([0, scale], %) |> line(end = [0, scale])
|> line([scale, 0], %) |> line(end = [scale, 0])
|> line([0, -scale], %) |> line(end = [0, -scale])
return sg return sg
} }

View File

@ -141,7 +141,7 @@ describe('Testing addSketchTo', () => {
const str = recast(result.modifiedAst) const str = recast(result.modifiedAst)
expect(str).toBe(`sketch001 = startSketchOn('YZ') expect(str).toBe(`sketch001 = startSketchOn('YZ')
|> startProfileAt('default', %) |> startProfileAt('default', %)
|> line('default', %) |> line(end = 'default')
`) `)
}) })
}) })
@ -167,34 +167,34 @@ function giveSketchFnCallTagTestHelper(
describe('Testing giveSketchFnCallTag', () => { describe('Testing giveSketchFnCallTag', () => {
const code = `part001 = startSketchOn('XY') const code = `part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([-2.57, -0.13], %) |> line(end = [-2.57, -0.13])
|> line([0, 0.83], %) |> line(end = [0, 0.83])
|> line([0.82, 0.34], %)` |> line(end = [0.82, 0.34])`
it('Should add tag to a sketch function call', () => { it('Should add tag to a sketch function call', () => {
const { newCode, tag, isTagExisting } = giveSketchFnCallTagTestHelper( const { newCode, tag, isTagExisting } = giveSketchFnCallTagTestHelper(
code, code,
'line([0, 0.83], %)' 'line(end = [0, 0.83])'
) )
expect(newCode).toContain('line([0, 0.83], %, $seg01)') expect(newCode).toContain('line(end = [0, 0.83], tag = $seg01)')
expect(tag).toBe('seg01') expect(tag).toBe('seg01')
expect(isTagExisting).toBe(false) expect(isTagExisting).toBe(false)
}) })
it('Should create a unique tag if seg01 already exists', () => { it('Should create a unique tag if seg01 already exists', () => {
let _code = code.replace( let _code = code.replace(
'line([-2.57, -0.13], %)', 'line(end = [-2.57, -0.13])',
'line([-2.57, -0.13], %, $seg01)' 'line(end = [-2.57, -0.13], tag = $seg01)'
) )
const { newCode, tag, isTagExisting } = giveSketchFnCallTagTestHelper( const { newCode, tag, isTagExisting } = giveSketchFnCallTagTestHelper(
_code, _code,
'line([0, 0.83], %)' 'line(end = [0, 0.83])'
) )
expect(newCode).toContain('line([0, 0.83], %, $seg02)') expect(newCode).toContain('line(end = [0, 0.83], tag = $seg02)')
expect(tag).toBe('seg02') expect(tag).toBe('seg02')
expect(isTagExisting).toBe(false) expect(isTagExisting).toBe(false)
}) })
it('Should return existing tag if it already exists', () => { it('Should return existing tag if it already exists', () => {
const lineButWithTag = 'line([-2.57, -0.13], %, $butts)' const lineButWithTag = 'line(end = [-2.57, -0.13], tag = $butts)'
let _code = code.replace('line([-2.57, -0.13], %)', lineButWithTag) let _code = code.replace('line(end = [-2.57, -0.13])', lineButWithTag)
const { newCode, tag, isTagExisting } = giveSketchFnCallTagTestHelper( const { newCode, tag, isTagExisting } = giveSketchFnCallTagTestHelper(
_code, _code,
lineButWithTag lineButWithTag
@ -219,7 +219,7 @@ const identifierGuy = 5
yo = 5 + 6 yo = 5 + 6
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([-1.2, 4.83], %) |> startProfileAt([-1.2, 4.83], %)
|> line([2.8, 0], %) |> line(end = [2.8, 0])
|> angledLine([100 + 100, 3.09], %) |> angledLine([100 + 100, 3.09], %)
|> angledLine([abc, 3.09], %) |> angledLine([abc, 3.09], %)
|> angledLine([def(yo), 3.09], %) |> angledLine([def(yo), 3.09], %)
@ -252,7 +252,7 @@ yo2 = hmm([identifierGuy + 5])`
) )
const newCode = recast(modifiedAst) const newCode = recast(modifiedAst)
expect(newCode).toContain(`newVar = 2.8`) expect(newCode).toContain(`newVar = 2.8`)
expect(newCode).toContain(`line([newVar, 0], %)`) expect(newCode).toContain(`line(end = [newVar, 0])`)
}) })
it('should move a callExpression into a new variable', async () => { it('should move a callExpression into a new variable', async () => {
const ast = assertParse(code) const ast = assertParse(code)
@ -302,19 +302,19 @@ describe('testing sketchOnExtrudedFace', () => {
test('it should be able to extrude on regular segments', async () => { test('it should be able to extrude on regular segments', async () => {
const code = `part001 = startSketchOn('-XZ') const code = `part001 = startSketchOn('-XZ')
|> startProfileAt([3.58, 2.06], %) |> startProfileAt([3.58, 2.06], %)
|> line([9.7, 9.19], %) |> line(end = [9.7, 9.19])
|> line([8.62, -9.57], %) |> line(end = [8.62, -9.57])
|> close(%) |> close()
|> extrude(5 + 7, %)` |> extrude(length = 5 + 7)`
const ast = assertParse(code) const ast = assertParse(code)
const segmentSnippet = `line([9.7, 9.19], %)` const segmentSnippet = `line(end = [9.7, 9.19])`
const segmentRange = topLevelRange( const segmentRange = topLevelRange(
code.indexOf(segmentSnippet), code.indexOf(segmentSnippet),
code.indexOf(segmentSnippet) + segmentSnippet.length code.indexOf(segmentSnippet) + segmentSnippet.length
) )
const segmentPathToNode = getNodePathFromSourceRange(ast, segmentRange) const segmentPathToNode = getNodePathFromSourceRange(ast, segmentRange)
const extrudeSnippet = `extrude(5 + 7, %)` const extrudeSnippet = `extrude(length = 5 + 7)`
const extrudeRange = topLevelRange( const extrudeRange = topLevelRange(
code.indexOf(extrudeSnippet), code.indexOf(extrudeSnippet),
code.indexOf(extrudeSnippet) + extrudeSnippet.length code.indexOf(extrudeSnippet) + extrudeSnippet.length
@ -332,27 +332,27 @@ describe('testing sketchOnExtrudedFace', () => {
const newCode = recast(modifiedAst) const newCode = recast(modifiedAst)
expect(newCode).toContain(`part001 = startSketchOn('-XZ') expect(newCode).toContain(`part001 = startSketchOn('-XZ')
|> startProfileAt([3.58, 2.06], %) |> startProfileAt([3.58, 2.06], %)
|> line([9.7, 9.19], %, $seg01) |> line(end = [9.7, 9.19], tag = $seg01)
|> line([8.62, -9.57], %) |> line(end = [8.62, -9.57])
|> close(%) |> close()
|> extrude(5 + 7, %) |> extrude(length = 5 + 7)
sketch001 = startSketchOn(part001, seg01)`) sketch001 = startSketchOn(part001, seg01)`)
}) })
test('it should be able to extrude on close segments', async () => { test('it should be able to extrude on close segments', async () => {
const code = `part001 = startSketchOn('-XZ') const code = `part001 = startSketchOn('-XZ')
|> startProfileAt([3.58, 2.06], %) |> startProfileAt([3.58, 2.06], %)
|> line([9.7, 9.19], %) |> line(end = [9.7, 9.19])
|> line([8.62, -9.57], %) |> line(end = [8.62, -9.57])
|> close(%) |> close()
|> extrude(5 + 7, %)` |> extrude(length = 5 + 7)`
const ast = assertParse(code) const ast = assertParse(code)
const segmentSnippet = `close(%)` const segmentSnippet = `close()`
const segmentRange = topLevelRange( const segmentRange = topLevelRange(
code.indexOf(segmentSnippet), code.indexOf(segmentSnippet),
code.indexOf(segmentSnippet) + segmentSnippet.length code.indexOf(segmentSnippet) + segmentSnippet.length
) )
const segmentPathToNode = getNodePathFromSourceRange(ast, segmentRange) const segmentPathToNode = getNodePathFromSourceRange(ast, segmentRange)
const extrudeSnippet = `extrude(5 + 7, %)` const extrudeSnippet = `extrude(length = 5 + 7)`
const extrudeRange = topLevelRange( const extrudeRange = topLevelRange(
code.indexOf(extrudeSnippet), code.indexOf(extrudeSnippet),
code.indexOf(extrudeSnippet) + extrudeSnippet.length code.indexOf(extrudeSnippet) + extrudeSnippet.length
@ -370,19 +370,19 @@ sketch001 = startSketchOn(part001, seg01)`)
const newCode = recast(modifiedAst) const newCode = recast(modifiedAst)
expect(newCode).toContain(`part001 = startSketchOn('-XZ') expect(newCode).toContain(`part001 = startSketchOn('-XZ')
|> startProfileAt([3.58, 2.06], %) |> startProfileAt([3.58, 2.06], %)
|> line([9.7, 9.19], %) |> line(end = [9.7, 9.19])
|> line([8.62, -9.57], %) |> line(end = [8.62, -9.57])
|> close(%, $seg01) |> close(tag = $seg01)
|> extrude(5 + 7, %) |> extrude(length = 5 + 7)
sketch001 = startSketchOn(part001, seg01)`) sketch001 = startSketchOn(part001, seg01)`)
}) })
test('it should be able to extrude on start-end caps', async () => { test('it should be able to extrude on start-end caps', async () => {
const code = `part001 = startSketchOn('-XZ') const code = `part001 = startSketchOn('-XZ')
|> startProfileAt([3.58, 2.06], %) |> startProfileAt([3.58, 2.06], %)
|> line([9.7, 9.19], %) |> line(end = [9.7, 9.19])
|> line([8.62, -9.57], %) |> line(end = [8.62, -9.57])
|> close(%) |> close()
|> extrude(5 + 7, %)` |> extrude(length = 5 + 7)`
const ast = assertParse(code) const ast = assertParse(code)
const sketchSnippet = `startProfileAt([3.58, 2.06], %)` const sketchSnippet = `startProfileAt([3.58, 2.06], %)`
const sketchRange = topLevelRange( const sketchRange = topLevelRange(
@ -390,7 +390,7 @@ sketch001 = startSketchOn(part001, seg01)`)
code.indexOf(sketchSnippet) + sketchSnippet.length code.indexOf(sketchSnippet) + sketchSnippet.length
) )
const sketchPathToNode = getNodePathFromSourceRange(ast, sketchRange) const sketchPathToNode = getNodePathFromSourceRange(ast, sketchRange)
const extrudeSnippet = `extrude(5 + 7, %)` const extrudeSnippet = `extrude(length = 5 + 7)`
const extrudeRange = topLevelRange( const extrudeRange = topLevelRange(
code.indexOf(extrudeSnippet), code.indexOf(extrudeSnippet),
code.indexOf(extrudeSnippet) + extrudeSnippet.length code.indexOf(extrudeSnippet) + extrudeSnippet.length
@ -409,35 +409,35 @@ sketch001 = startSketchOn(part001, seg01)`)
const newCode = recast(modifiedAst) const newCode = recast(modifiedAst)
expect(newCode).toContain(`part001 = startSketchOn('-XZ') expect(newCode).toContain(`part001 = startSketchOn('-XZ')
|> startProfileAt([3.58, 2.06], %) |> startProfileAt([3.58, 2.06], %)
|> line([9.7, 9.19], %) |> line(end = [9.7, 9.19])
|> line([8.62, -9.57], %) |> line(end = [8.62, -9.57])
|> close(%) |> close()
|> extrude(5 + 7, %) |> extrude(length = 5 + 7)
sketch001 = startSketchOn(part001, 'END')`) sketch001 = startSketchOn(part001, 'END')`)
}) })
test('it should ensure that the new sketch is inserted after the extrude', async () => { test('it should ensure that the new sketch is inserted after the extrude', async () => {
const code = `sketch001 = startSketchOn('-XZ') const code = `sketch001 = startSketchOn('-XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([2.66, 1.17], %) |> line(end = [2.66, 1.17])
|> line([3.75, 0.46], %) |> line(end = [3.75, 0.46])
|> line([4.99, -0.46], %) |> line(end = [4.99, -0.46])
|> line([3.3, -2.12], %) |> line(end = [3.3, -2.12])
|> line([2.16, -3.33], %) |> line(end = [2.16, -3.33])
|> line([0.85, -3.08], %) |> line(end = [0.85, -3.08])
|> line([-0.18, -3.36], %) |> line(end = [-0.18, -3.36])
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%) |> close()
part001 = extrude(5 + 7, sketch001)` part001 = extrude(sketch001, length = 5 + 7)`
const ast = assertParse(code) const ast = assertParse(code)
const segmentSnippet = `line([4.99, -0.46], %)` const segmentSnippet = `line(end = [4.99, -0.46])`
const segmentRange = topLevelRange( const segmentRange = topLevelRange(
code.indexOf(segmentSnippet), code.indexOf(segmentSnippet),
code.indexOf(segmentSnippet) + segmentSnippet.length code.indexOf(segmentSnippet) + segmentSnippet.length
) )
const segmentPathToNode = getNodePathFromSourceRange(ast, segmentRange) const segmentPathToNode = getNodePathFromSourceRange(ast, segmentRange)
const extrudeSnippet = `extrude(5 + 7, sketch001)` const extrudeSnippet = `extrude(sketch001, length = 5 + 7)`
const extrudeRange = topLevelRange( const extrudeRange = topLevelRange(
code.indexOf(extrudeSnippet), code.indexOf(extrudeSnippet),
code.indexOf(extrudeSnippet) + extrudeSnippet.length code.indexOf(extrudeSnippet) + extrudeSnippet.length
@ -451,7 +451,7 @@ sketch001 = startSketchOn(part001, 'END')`)
) )
if (err(updatedAst)) throw updatedAst if (err(updatedAst)) throw updatedAst
const newCode = recast(updatedAst.modifiedAst) const newCode = recast(updatedAst.modifiedAst)
expect(newCode).toContain(`part001 = extrude(5 + 7, sketch001) expect(newCode).toContain(`part001 = extrude(sketch001, length = 5 + 7)
sketch002 = startSketchOn(part001, seg01)`) sketch002 = startSketchOn(part001, seg01)`)
}) })
}) })
@ -460,12 +460,12 @@ describe('Testing deleteSegmentFromPipeExpression', () => {
it('Should delete a segment withOUT any dependent segments', async () => { it('Should delete a segment withOUT any dependent segments', async () => {
const code = `part001 = startSketchOn('-XZ') const code = `part001 = startSketchOn('-XZ')
|> startProfileAt([54.78, -95.91], %) |> startProfileAt([54.78, -95.91], %)
|> line([306.21, 198.82], %) |> line(end = [306.21, 198.82])
|> line([306.21, 198.85], %, $a) |> line(end = [306.21, 198.85], tag = $a)
|> line([306.21, 198.87], %)` |> line(end = [306.21, 198.87])`
const ast = assertParse(code) const ast = assertParse(code)
const execState = await enginelessExecutor(ast) const execState = await enginelessExecutor(ast)
const lineOfInterest = 'line([306.21, 198.85], %, $a)' const lineOfInterest = 'line(end = [306.21, 198.85], tag = $a)'
const range = topLevelRange( const range = topLevelRange(
code.indexOf(lineOfInterest), code.indexOf(lineOfInterest),
code.indexOf(lineOfInterest) + lineOfInterest.length code.indexOf(lineOfInterest) + lineOfInterest.length
@ -482,8 +482,8 @@ describe('Testing deleteSegmentFromPipeExpression', () => {
const newCode = recast(modifiedAst) const newCode = recast(modifiedAst)
expect(newCode).toBe(`part001 = startSketchOn('-XZ') expect(newCode).toBe(`part001 = startSketchOn('-XZ')
|> startProfileAt([54.78, -95.91], %) |> startProfileAt([54.78, -95.91], %)
|> line([306.21, 198.82], %) |> line(end = [306.21, 198.82])
|> line([306.21, 198.87], %) |> line(end = [306.21, 198.87])
`) `)
}) })
describe('Should delete a segment WITH any dependent segments, unconstraining the dependent parts', () => { describe('Should delete a segment WITH any dependent segments, unconstraining the dependent parts', () => {
@ -493,17 +493,17 @@ describe('Testing deleteSegmentFromPipeExpression', () => {
replace2 = '' replace2 = ''
) => `part001 = startSketchOn('-XZ') ) => `part001 = startSketchOn('-XZ')
|> startProfileAt([54.78, -95.91], %) |> startProfileAt([54.78, -95.91], %)
|> line([306.21, 198.82], %, $b) |> line(end = [306.21, 198.82], tag = $b)
${!replace1 ? ` |> ${line}\n` : ''} |> angledLine([-65, ${ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine([-65, ${
!replace1 ? 'segLen(a)' : replace1 !replace1 ? 'segLen(a)' : replace1
}], %) }], %)
|> line([306.21, 198.87], %) |> line(end = [306.21, 198.87])
|> angledLine([65, ${!replace2 ? 'segAng(a)' : replace2}], %) |> angledLine([65, ${!replace2 ? 'segAng(a)' : replace2}], %)
|> line([-963.39, -154.67], %) |> line(end = [-963.39, -154.67])
` `
test.each([ test.each([
['line', 'line([306.21, 198.85], %, $a)', ['365.11', '33']], ['line', 'line(end = [306.21, 198.85], tag = $a)', ['365.11', '33']],
['lineTo', 'lineTo([306.21, 198.85], %, $a)', ['110.48', '119.73']], ['lineTo', 'line(endAbsolute = [306.21, 198.85], tag = $a)', ['110.48', '119.73']],
['yLine', 'yLine(198.85, %, $a)', ['198.85', '90']], ['yLine', 'yLine(198.85, %, $a)', ['198.85', '90']],
['xLine', 'xLine(198.85, %, $a)', ['198.85', '0']], ['xLine', 'xLine(198.85, %, $a)', ['198.85', '0']],
['yLineTo', 'yLineTo(198.85, %, $a)', ['95.94', '90']], ['yLineTo', 'yLineTo(198.85, %, $a)', ['95.94', '90']],
@ -567,9 +567,9 @@ describe('Testing removeSingleConstraintInfo', () => {
describe('with mostly object notation', () => { describe('with mostly object notation', () => {
const code = `part001 = startSketchOn('-XZ') const code = `part001 = startSketchOn('-XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([3 + 0, 4 + 0], %) |> line(end = [3 + 0, 4 + 0])
|> angledLine({ angle = 3 + 0, length = 3.14 + 0 }, %) |> angledLine({ angle = 3 + 0, length = 3.14 + 0 }, %)
|> lineTo([6.14 + 0, 3.14 + 0], %) |> line(endAbsolute = [6.14 + 0, 3.14 + 0])
|> xLineTo(8 + 0, %) |> xLineTo(8 + 0, %)
|> yLineTo(5 + 0, %) |> yLineTo(5 + 0, %)
|> yLine(3.14 + 0, %, $a) |> yLine(3.14 + 0, %, $a)
@ -585,13 +585,13 @@ describe('Testing removeSingleConstraintInfo', () => {
}, %) }, %)
|> tangentialArcTo([3.14 + 0, 13.14 + 0], %)` |> tangentialArcTo([3.14 + 0, 13.14 + 0], %)`
test.each([ test.each([
[' line([3 + 0, 4], %)', 'arrayIndex', 1], [' line(end = [3 + 0, 4])', 'arrayIndex', 1],
[ [
'angledLine({ angle = 3, length = 3.14 + 0 }, %)', 'angledLine({ angle = 3, length = 3.14 + 0 }, %)',
'objectProperty', 'objectProperty',
'angle', 'angle',
], ],
['lineTo([6.14, 3.14 + 0], %)', 'arrayIndex', 0], ['line(endAbsolute = [6.14, 3.14 + 0])', 'arrayIndex', 0],
['xLineTo(8, %)', '', ''], ['xLineTo(8, %)', '', ''],
['yLineTo(5, %)', '', ''], ['yLineTo(5, %)', '', ''],
['yLine(3.14, %, $a)', '', ''], ['yLine(3.14, %, $a)', '', ''],
@ -724,12 +724,12 @@ describe('Testing deleteFromSelection', () => {
codeBefore: `myVar = 5 codeBefore: `myVar = 5
sketch003 = startSketchOn('XZ') sketch003 = startSketchOn('XZ')
|> startProfileAt([3.82, 13.6], %) |> startProfileAt([3.82, 13.6], %)
|> line([-2.94, 2.7], %) |> line(end = [-2.94, 2.7])
|> line([7.7, 0.16], %) |> line(end = [7.7, 0.16])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%)`, |> close()`,
codeAfter: `myVar = 5\n`, codeAfter: `myVar = 5\n`,
lineOfInterest: 'line([-2.94, 2.7], %)', lineOfInterest: 'line(end = [-2.94, 2.7])',
type: 'segment', type: 'segment',
}, },
], ],
@ -738,24 +738,24 @@ sketch003 = startSketchOn('XZ')
{ {
codeBefore: `sketch001 = startSketchOn('XZ') codeBefore: `sketch001 = startSketchOn('XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([2.66, 1.17], %) |> line(end = [2.66, 1.17])
|> line([3.75, 0.46], %) |> line(end = [3.75, 0.46])
|> line([4.99, -0.46], %, $seg01) |> line(end = [4.99, -0.46], tag = $seg01)
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%) |> close()
const extrude001 = extrude(10, sketch001)`, const extrude001 = extrude(sketch001, length = 10)`,
codeAfter: `sketch001 = startSketchOn('XZ') codeAfter: `sketch001 = startSketchOn('XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([2.66, 1.17], %) |> line(end = [2.66, 1.17])
|> line([3.75, 0.46], %) |> line(end = [3.75, 0.46])
|> line([4.99, -0.46], %, $seg01) |> line(end = [4.99, -0.46], tag = $seg01)
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%)\n`, |> close()\n`,
lineOfInterest: 'line([2.66, 1.17], %)', lineOfInterest: 'line(end = [2.66, 1.17])',
type: 'wall', type: 'wall',
}, },
], ],
@ -765,35 +765,35 @@ const extrude001 = extrude(10, sketch001)`,
codeBefore: `myVar = 5 codeBefore: `myVar = 5
sketch001 = startSketchOn('XZ') sketch001 = startSketchOn('XZ')
|> startProfileAt([4.46, 5.12], %, $tag) |> startProfileAt([4.46, 5.12], %, $tag)
|> line([0.08, myVar], %) |> line(end = [0.08, myVar])
|> line([13.03, 2.02], %, $seg01) |> line(end = [13.03, 2.02], tag = $seg01)
|> line([3.9, -7.6], %) |> line(end = [3.9, -7.6])
|> line([-11.18, -2.15], %) |> line(end = [-11.18, -2.15])
|> line([5.41, -9.61], %) |> line(end = [5.41, -9.61])
|> line([-8.54, -2.51], %) |> line(end = [-8.54, -2.51])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
const extrude001 = extrude(5, sketch001) const extrude001 = extrude(sketch001, length = 5)
sketch002 = startSketchOn(extrude001, seg01) sketch002 = startSketchOn(extrude001, seg01)
|> startProfileAt([-12.55, 2.89], %) |> startProfileAt([-12.55, 2.89], %)
|> line([3.02, 1.9], %) |> line(end = [3.02, 1.9])
|> line([1.82, -1.49], %, $seg02) |> line(end = [1.82, -1.49], tag = $seg02)
|> angledLine([-86, segLen(seg02)], %) |> angledLine([-86, segLen(seg02)], %)
|> line([-3.97, -0.53], %) |> line(end = [-3.97, -0.53])
|> line([0.3, 0.84], %) |> line(end = [0.3, 0.84])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%)`, |> close()`,
codeAfter: `myVar = 5 codeAfter: `myVar = 5
sketch001 = startSketchOn('XZ') sketch001 = startSketchOn('XZ')
|> startProfileAt([4.46, 5.12], %, $tag) |> startProfileAt([4.46, 5.12], %, $tag)
|> line([0.08, myVar], %) |> line(end = [0.08, myVar])
|> line([13.03, 2.02], %, $seg01) |> line(end = [13.03, 2.02], tag = $seg01)
|> line([3.9, -7.6], %) |> line(end = [3.9, -7.6])
|> line([-11.18, -2.15], %) |> line(end = [-11.18, -2.15])
|> line([5.41, -9.61], %) |> line(end = [5.41, -9.61])
|> line([-8.54, -2.51], %) |> line(end = [-8.54, -2.51])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch002 = startSketchOn({ sketch002 = startSketchOn({
plane = { plane = {
origin = { x = 1, y = 2, z = 3 }, origin = { x = 1, y = 2, z = 3 },
@ -803,15 +803,15 @@ sketch002 = startSketchOn({
} }
}) })
|> startProfileAt([-12.55, 2.89], %) |> startProfileAt([-12.55, 2.89], %)
|> line([3.02, 1.9], %) |> line(end = [3.02, 1.9])
|> line([1.82, -1.49], %, $seg02) |> line(end = [1.82, -1.49], tag = $seg02)
|> angledLine([-86, segLen(seg02)], %) |> angledLine([-86, segLen(seg02)], %)
|> line([-3.97, -0.53], %) |> line(end = [-3.97, -0.53])
|> line([0.3, 0.84], %) |> line(end = [0.3, 0.84])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
`, `,
lineOfInterest: 'line([-11.18, -2.15], %)', lineOfInterest: 'line(end = [-11.18, -2.15])',
type: 'wall', type: 'wall',
}, },
], ],
@ -821,35 +821,35 @@ sketch002 = startSketchOn({
codeBefore: `myVar = 5 codeBefore: `myVar = 5
sketch001 = startSketchOn('XZ') sketch001 = startSketchOn('XZ')
|> startProfileAt([4.46, 5.12], %, $tag) |> startProfileAt([4.46, 5.12], %, $tag)
|> line([0.08, myVar], %) |> line(end = [0.08, myVar])
|> line([13.03, 2.02], %, $seg01) |> line(end = [13.03, 2.02], tag = $seg01)
|> line([3.9, -7.6], %) |> line(end = [3.9, -7.6])
|> line([-11.18, -2.15], %) |> line(end = [-11.18, -2.15])
|> line([5.41, -9.61], %) |> line(end = [5.41, -9.61])
|> line([-8.54, -2.51], %) |> line(end = [-8.54, -2.51])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
const extrude001 = extrude(5, sketch001) const extrude001 = extrude(sketch001, length = 5)
sketch002 = startSketchOn(extrude001, seg01) sketch002 = startSketchOn(extrude001, seg01)
|> startProfileAt([-12.55, 2.89], %) |> startProfileAt([-12.55, 2.89], %)
|> line([3.02, 1.9], %) |> line(end = [3.02, 1.9])
|> line([1.82, -1.49], %, $seg02) |> line(end = [1.82, -1.49], tag = $seg02)
|> angledLine([-86, segLen(seg02)], %) |> angledLine([-86, segLen(seg02)], %)
|> line([-3.97, -0.53], %) |> line(end = [-3.97, -0.53])
|> line([0.3, 0.84], %) |> line(end = [0.3, 0.84])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%)`, |> close()`,
codeAfter: `myVar = 5 codeAfter: `myVar = 5
sketch001 = startSketchOn('XZ') sketch001 = startSketchOn('XZ')
|> startProfileAt([4.46, 5.12], %, $tag) |> startProfileAt([4.46, 5.12], %, $tag)
|> line([0.08, myVar], %) |> line(end = [0.08, myVar])
|> line([13.03, 2.02], %, $seg01) |> line(end = [13.03, 2.02], tag = $seg01)
|> line([3.9, -7.6], %) |> line(end = [3.9, -7.6])
|> line([-11.18, -2.15], %) |> line(end = [-11.18, -2.15])
|> line([5.41, -9.61], %) |> line(end = [5.41, -9.61])
|> line([-8.54, -2.51], %) |> line(end = [-8.54, -2.51])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch002 = startSketchOn({ sketch002 = startSketchOn({
plane = { plane = {
origin = { x = 1, y = 2, z = 3 }, origin = { x = 1, y = 2, z = 3 },
@ -859,13 +859,13 @@ sketch002 = startSketchOn({
} }
}) })
|> startProfileAt([-12.55, 2.89], %) |> startProfileAt([-12.55, 2.89], %)
|> line([3.02, 1.9], %) |> line(end = [3.02, 1.9])
|> line([1.82, -1.49], %, $seg02) |> line(end = [1.82, -1.49], tag = $seg02)
|> angledLine([-86, segLen(seg02)], %) |> angledLine([-86, segLen(seg02)], %)
|> line([-3.97, -0.53], %) |> line(end = [-3.97, -0.53])
|> line([0.3, 0.84], %) |> line(end = [0.3, 0.84])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
`, `,
lineOfInterest: 'startProfileAt([4.46, 5.12], %, $tag)', lineOfInterest: 'startProfileAt([4.46, 5.12], %, $tag)',
type: 'cap', type: 'cap',
@ -875,7 +875,7 @@ sketch002 = startSketchOn({
test.each(cases)( test.each(cases)(
'%s', '%s',
async (name, { codeBefore, codeAfter, lineOfInterest, type }) => { async (name, { codeBefore, codeAfter, lineOfInterest, type }) => {
// const lineOfInterest = 'line([-2.94, 2.7], %)' // const lineOfInterest = 'line(end = [-2.94, 2.7])'
const ast = assertParse(codeBefore) const ast = assertParse(codeBefore)
const execState = await enginelessExecutor(ast) const execState = await enginelessExecutor(ast)

View File

@ -152,14 +152,14 @@ describe('Testing getPathToExtrudeForSegmentSelection', () => {
it('should return the correct paths for a valid selection and extrusion', async () => { it('should return the correct paths for a valid selection and extrusion', async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001)` extrude001 = extrude(sketch001, length = -15)`
const selectedSegmentSnippet = `line([20, 0], %)` const selectedSegmentSnippet = `line(end = [20, 0])`
const expectedExtrudeSnippet = `extrude001 = extrude(-15, sketch001)` const expectedExtrudeSnippet = `extrude001 = extrude(sketch001, length = -15)`
await runGetPathToExtrudeForSegmentSelectionTest( await runGetPathToExtrudeForSegmentSelectionTest(
code, code,
selectedSegmentSnippet, selectedSegmentSnippet,
@ -169,14 +169,14 @@ extrude001 = extrude(-15, sketch001)`
it('should return the correct paths when extrusion occurs within the sketch pipe', async () => { it('should return the correct paths when extrusion occurs within the sketch pipe', async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
|> extrude(15, %)` |> extrude(length = 15)`
const selectedSegmentSnippet = `line([20, 0], %)` const selectedSegmentSnippet = `line(end = [20, 0])`
const expectedExtrudeSnippet = `extrude(15, %)` const expectedExtrudeSnippet = `extrude(length = 15)`
await runGetPathToExtrudeForSegmentSelectionTest( await runGetPathToExtrudeForSegmentSelectionTest(
code, code,
selectedSegmentSnippet, selectedSegmentSnippet,
@ -186,30 +186,30 @@ extrude001 = extrude(-15, sketch001)`
it('should return the correct paths for a valid selection and extrusion in case of several extrusions and sketches', async () => { it('should return the correct paths for a valid selection and extrusion in case of several extrusions and sketches', async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-30, 30], %) |> startProfileAt([-30, 30], %)
|> line([15, 0], %) |> line(end = [15, 0])
|> line([0, -15], %) |> line(end = [0, -15])
|> line([-15, 0], %) |> line(end = [-15, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch002 = startSketchOn('XY') sketch002 = startSketchOn('XY')
|> startProfileAt([30, 30], %) |> startProfileAt([30, 30], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch003 = startSketchOn('XY') sketch003 = startSketchOn('XY')
|> startProfileAt([30, -30], %) |> startProfileAt([30, -30], %)
|> line([25, 0], %) |> line(end = [25, 0])
|> line([0, -25], %) |> line(end = [0, -25])
|> line([-25, 0], %) |> line(end = [-25, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
extrude002 = extrude(-15, sketch002) extrude002 = extrude(sketch002, length = -15)
extrude003 = extrude(-15, sketch003)` extrude003 = extrude(sketch003, length = -15)`
const selectedSegmentSnippet = `line([20, 0], %)` const selectedSegmentSnippet = `line(end = [20, 0])`
const expectedExtrudeSnippet = `extrude002 = extrude(-15, sketch002)` const expectedExtrudeSnippet = `extrude002 = extrude(sketch002, length = -15)`
await runGetPathToExtrudeForSegmentSelectionTest( await runGetPathToExtrudeForSegmentSelectionTest(
code, code,
selectedSegmentSnippet, selectedSegmentSnippet,
@ -219,28 +219,28 @@ extrude003 = extrude(-15, sketch003)`
it('should not return any path for missing extrusion', async () => { it('should not return any path for missing extrusion', async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-30, 30], %) |> startProfileAt([-30, 30], %)
|> line([15, 0], %) |> line(end = [15, 0])
|> line([0, -15], %) |> line(end = [0, -15])
|> line([-15, 0], %) |> line(end = [-15, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch002 = startSketchOn('XY') sketch002 = startSketchOn('XY')
|> startProfileAt([30, 30], %) |> startProfileAt([30, 30], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch003 = startSketchOn('XY') sketch003 = startSketchOn('XY')
|> startProfileAt([30, -30], %) |> startProfileAt([30, -30], %)
|> line([25, 0], %) |> line(end = [25, 0])
|> line([0, -25], %) |> line(end = [0, -25])
|> line([-25, 0], %) |> line(end = [-25, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
extrude003 = extrude(-15, sketch003)` extrude003 = extrude(sketch003, length = -15)`
const selectedSegmentSnippet = `line([20, 0], %)` const selectedSegmentSnippet = `line(end = [20, 0])`
const expectedExtrudeSnippet = `` const expectedExtrudeSnippet = ``
await runGetPathToExtrudeForSegmentSelectionTest( await runGetPathToExtrudeForSegmentSelectionTest(
code, code,
@ -334,21 +334,21 @@ Object.values(EdgeTreatmentType).forEach(
it(`should add a ${edgeTreatmentType} to a specific segment`, async () => { it(`should add a ${edgeTreatmentType} to a specific segment`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001)` extrude001 = extrude(sketch001, length = -15)`
const segmentSnippets = ['line([0, -20], %)'] const segmentSnippets = ['line(end = [0, -20])']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %, $seg01) |> line(end = [0, -20], tag = $seg01)
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01] }, %)`
await runModifyAstCloneWithEdgeTreatmentAndTag( await runModifyAstCloneWithEdgeTreatmentAndTag(
@ -361,21 +361,21 @@ extrude001 = extrude(-15, sketch001)
it(`should add a ${edgeTreatmentType} to the sketch pipe`, async () => { it(`should add a ${edgeTreatmentType} to the sketch pipe`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
|> extrude(-15, %)` |> extrude(length = -15)`
const segmentSnippets = ['line([0, -20], %)'] const segmentSnippets = ['line(end = [0, -20])']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %, $seg01) |> line(end = [0, -20], tag = $seg01)
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
|> extrude(-15, %) |> extrude(length = -15)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01] }, %)`
await runModifyAstCloneWithEdgeTreatmentAndTag( await runModifyAstCloneWithEdgeTreatmentAndTag(
@ -388,21 +388,21 @@ extrude001 = extrude(-15, sketch001)
it(`should add a ${edgeTreatmentType} to an already tagged segment`, async () => { it(`should add a ${edgeTreatmentType} to an already tagged segment`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %, $seg01) |> line(end = [0, -20], tag = $seg01)
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001)` extrude001 = extrude(sketch001, length = -15)`
const segmentSnippets = ['line([0, -20], %, $seg01)'] const segmentSnippets = ['line(end = [0, -20], tag = $seg01)']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %, $seg01) |> line(end = [0, -20], tag = $seg01)
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01] }, %)`
await runModifyAstCloneWithEdgeTreatmentAndTag( await runModifyAstCloneWithEdgeTreatmentAndTag(
@ -415,21 +415,21 @@ extrude001 = extrude(-15, sketch001)
it(`should add a ${edgeTreatmentType} with existing tag on other segment`, async () => { it(`should add a ${edgeTreatmentType} with existing tag on other segment`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001)` extrude001 = extrude(sketch001, length = -15)`
const segmentSnippets = ['line([-20, 0], %)'] const segmentSnippets = ['line(end = [-20, 0])']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %, $seg02) |> line(end = [-20, 0], tag = $seg02)
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg02] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg02] }, %)`
await runModifyAstCloneWithEdgeTreatmentAndTag( await runModifyAstCloneWithEdgeTreatmentAndTag(
@ -442,22 +442,22 @@ extrude001 = extrude(-15, sketch001)
it(`should add a ${edgeTreatmentType} with existing fillet on other segment`, async () => { it(`should add a ${edgeTreatmentType} with existing fillet on other segment`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> fillet({ radius = 5, tags = [seg01] }, %)` |> fillet({ radius = 5, tags = [seg01] }, %)`
const segmentSnippets = ['line([-20, 0], %)'] const segmentSnippets = ['line(end = [-20, 0])']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %, $seg02) |> line(end = [-20, 0], tag = $seg02)
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> fillet({ radius = 5, tags = [seg01] }, %) |> fillet({ radius = 5, tags = [seg01] }, %)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg02] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg02] }, %)`
@ -471,22 +471,22 @@ extrude001 = extrude(-15, sketch001)
it(`should add a ${edgeTreatmentType} with existing chamfer on other segment`, async () => { it(`should add a ${edgeTreatmentType} with existing chamfer on other segment`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> chamfer({ length = 5, tags = [seg01] }, %)` |> chamfer({ length = 5, tags = [seg01] }, %)`
const segmentSnippets = ['line([-20, 0], %)'] const segmentSnippets = ['line(end = [-20, 0])']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %, $seg02) |> line(end = [-20, 0], tag = $seg02)
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> chamfer({ length = 5, tags = [seg01] }, %) |> chamfer({ length = 5, tags = [seg01] }, %)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg02] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg02] }, %)`
@ -500,21 +500,21 @@ extrude001 = extrude(-15, sketch001)
it(`should add a ${edgeTreatmentType} to two segments of a single extrusion`, async () => { it(`should add a ${edgeTreatmentType} to two segments of a single extrusion`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001)` extrude001 = extrude(sketch001, length = -15)`
const segmentSnippets = ['line([20, 0], %)', 'line([-20, 0], %)'] const segmentSnippets = ['line(end = [20, 0], %)', 'line([-20, 0])']
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %, $seg02) |> line(end = [-20, 0], tag = $seg02)
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01, seg02] }, %)` |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01, seg02] }, %)`
await runModifyAstCloneWithEdgeTreatmentAndTag( await runModifyAstCloneWithEdgeTreatmentAndTag(
@ -527,42 +527,42 @@ extrude001 = extrude(-15, sketch001)
it(`should add ${edgeTreatmentType}s to two bodies`, async () => { it(`should add ${edgeTreatmentType}s to two bodies`, async () => {
const code = `sketch001 = startSketchOn('XY') const code = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
sketch002 = startSketchOn('XY') sketch002 = startSketchOn('XY')
|> startProfileAt([30, 10], %) |> startProfileAt([30, 10], %)
|> line([15, 0], %) |> line(end = [15, 0])
|> line([0, -15], %) |> line(end = [0, -15])
|> line([-15, 0], %) |> line(end = [-15, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude002 = extrude(-25, sketch002)` // <--- body 2 extrude002 = extrude(sketch002, length = -25)` // <--- body 2
const segmentSnippets = [ const segmentSnippets = [
'line([20, 0], %)', 'line(end = [20, 0])',
'line([-20, 0], %)', 'line(end = [-20, 0])',
'line([0, -15], %)', 'line(end = [0, -15])',
] ]
const expectedCode = `sketch001 = startSketchOn('XY') const expectedCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %, $seg01) |> line(end = [20, 0], tag = $seg01)
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %, $seg02) |> line(end = [-20, 0], tag = $seg02)
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-15, sketch001) extrude001 = extrude(sketch001, length = -15)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01, seg02] }, %) |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg01, seg02] }, %)
sketch002 = startSketchOn('XY') sketch002 = startSketchOn('XY')
|> startProfileAt([30, 10], %) |> startProfileAt([30, 10], %)
|> line([15, 0], %) |> line(end = [15, 0])
|> line([0, -15], %, $seg03) |> line(end = [0, -15], tag = $seg03)
|> line([-15, 0], %) |> line(end = [-15, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude002 = extrude(-25, sketch002) extrude002 = extrude(sketch002, length = -25)
|> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg03] }, %)` // <-- able to add a new one |> ${edgeTreatmentType}({ ${parameterName} = 3, tags = [seg03] }, %)` // <-- able to add a new one
await runModifyAstCloneWithEdgeTreatmentAndTag( await runModifyAstCloneWithEdgeTreatmentAndTag(
@ -579,11 +579,11 @@ extrude002 = extrude(-25, sketch002)
describe('Testing isTagUsedInEdgeTreatment', () => { describe('Testing isTagUsedInEdgeTreatment', () => {
const code = `sketch001 = startSketchOn('XZ') const code = `sketch001 = startSketchOn('XZ')
|> startProfileAt([7.72, 4.13], %) |> startProfileAt([7.72, 4.13], %)
|> line([7.11, 3.48], %, $seg01) |> line(end = [7.11, 3.48], tag = $seg01)
|> line([-3.29, -13.85], %) |> line(end = [-3.29, -13.85])
|> line([-6.37, 3.88], %, $seg02) |> line(end = [-6.37, 3.88], tag = $seg02)
|> close(%) |> close()
extrude001 = extrude(-5, sketch001) extrude001 = extrude(sketch001, length = -5)
|> fillet({ |> fillet({
radius = 1.11, radius = 1.11,
tags = [ tags = [
@ -595,7 +595,7 @@ extrude001 = extrude(-5, sketch001)
` `
it('should correctly identify getOppositeEdge and baseEdge edges', () => { it('should correctly identify getOppositeEdge and baseEdge edges', () => {
const ast = assertParse(code) const ast = assertParse(code)
const lineOfInterest = `line([7.11, 3.48], %, $seg01)` const lineOfInterest = `line(end = [7.11, 3.48], tag = $seg01)`
const range = topLevelRange( const range = topLevelRange(
code.indexOf(lineOfInterest), code.indexOf(lineOfInterest),
code.indexOf(lineOfInterest) + lineOfInterest.length code.indexOf(lineOfInterest) + lineOfInterest.length
@ -613,7 +613,7 @@ extrude001 = extrude(-5, sketch001)
}) })
it('should correctly identify getPreviousAdjacentEdge edges', () => { it('should correctly identify getPreviousAdjacentEdge edges', () => {
const ast = assertParse(code) const ast = assertParse(code)
const lineOfInterest = `line([-6.37, 3.88], %, $seg02)` const lineOfInterest = `line(end = [-6.37, 3.88], tag = $seg02)`
const range = topLevelRange( const range = topLevelRange(
code.indexOf(lineOfInterest), code.indexOf(lineOfInterest),
code.indexOf(lineOfInterest) + lineOfInterest.length code.indexOf(lineOfInterest) + lineOfInterest.length
@ -631,7 +631,7 @@ extrude001 = extrude(-5, sketch001)
}) })
it('should correctly identify no edges', () => { it('should correctly identify no edges', () => {
const ast = assertParse(code) const ast = assertParse(code)
const lineOfInterest = `line([-3.29, -13.85], %)` const lineOfInterest = `line(end = [-3.29, -13.85])`
const range = topLevelRange( const range = topLevelRange(
code.indexOf(lineOfInterest), code.indexOf(lineOfInterest),
code.indexOf(lineOfInterest) + lineOfInterest.length code.indexOf(lineOfInterest) + lineOfInterest.length
@ -685,28 +685,28 @@ describe('Testing button states', () => {
const codeWithBody: string = ` const codeWithBody: string = `
sketch001 = startSketchOn('XY') sketch001 = startSketchOn('XY')
|> startProfileAt([-20, -5], %) |> startProfileAt([-20, -5], %)
|> line([0, 10], %) |> line(end = [0, 10])
|> line([10, 0], %) |> line(end = [10, 0])
|> line([0, -10], %) |> line(end = [0, -10])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
extrude001 = extrude(-10, sketch001) extrude001 = extrude(sketch001, length = -10)
` `
const codeWithoutBodies: string = ` const codeWithoutBodies: string = `
sketch001 = startSketchOn('XY') sketch001 = startSketchOn('XY')
|> startProfileAt([-20, -5], %) |> startProfileAt([-20, -5], %)
|> line([0, 10], %) |> line(end = [0, 10])
|> line([10, 0], %) |> line(end = [10, 0])
|> line([0, -10], %) |> line(end = [0, -10])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
` `
// body is missing // body is missing
it('should return false when body is missing and nothing is selected', async () => { it('should return false when body is missing and nothing is selected', async () => {
await runButtonStateTest(codeWithoutBodies, '', false) await runButtonStateTest(codeWithoutBodies, '', false)
}) })
it('should return false when body is missing and segment is selected', async () => { it('should return false when body is missing and segment is selected', async () => {
await runButtonStateTest(codeWithoutBodies, `line([10, 0], %)`, false) await runButtonStateTest(codeWithoutBodies, `line(end = [10, 0])`, false)
}) })
// body exists // body exists
@ -714,9 +714,9 @@ describe('Testing button states', () => {
await runButtonStateTest(codeWithBody, '', true) await runButtonStateTest(codeWithBody, '', true)
}) })
it('should return true when body exists and segment is selected', async () => { it('should return true when body exists and segment is selected', async () => {
await runButtonStateTest(codeWithBody, `line([10, 0], %)`, true) await runButtonStateTest(codeWithBody, `line(end = [10, 0])`, true)
}) })
it('should return false when body exists and not a segment is selected', async () => { it('should return false when body exists and not a segment is selected', async () => {
await runButtonStateTest(codeWithBody, `close(%)`, false) await runButtonStateTest(codeWithBody, `close()`, false)
}) })
}) })

View File

@ -77,7 +77,7 @@ variableBelowShouldNotBeIncluded = 3
describe('testing argIsNotIdentifier', () => { describe('testing argIsNotIdentifier', () => {
const code = `part001 = startSketchOn('XY') const code = `part001 = startSketchOn('XY')
|> startProfileAt([-1.2, 4.83], %) |> startProfileAt([-1.2, 4.83], %)
|> line([2.8, 0], %) |> line(end = [2.8, 0])
|> angledLine([100 + 100, 3.09], %) |> angledLine([100 + 100, 3.09], %)
|> angledLine([abc, 3.09], %) |> angledLine([abc, 3.09], %)
|> angledLine([def('yo'), 3.09], %) |> angledLine([def('yo'), 3.09], %)
@ -150,7 +150,7 @@ yo2 = hmm([identifierGuy + 5])`
expect(result.isSafe).toBe(false) expect(result.isSafe).toBe(false)
expect(result.value?.type).toBe('CallExpression') expect(result.value?.type).toBe('CallExpression')
expect(code.slice(result.value.start, result.value.end)).toBe( expect(code.slice(result.value.start, result.value.end)).toBe(
'line([2.8, 0], %)' 'line(end = [2.8, 0])'
) )
}) })
it("find a safe BinaryExpression that's assigned to a variable", () => { it("find a safe BinaryExpression that's assigned to a variable", () => {
@ -237,10 +237,10 @@ yo2 = hmm([identifierGuy + 5])`
describe('testing getNodePathFromSourceRange', () => { describe('testing getNodePathFromSourceRange', () => {
const code = `part001 = startSketchOn('XY') const code = `part001 = startSketchOn('XY')
|> startProfileAt([0.39, -0.05], %) |> startProfileAt([0.39, -0.05], %)
|> line([0.94, 2.61], %) |> line(end = [0.94, 2.61])
|> line([-0.21, -1.4], %)` |> line(end = [-0.21, -1.4])`
it('finds the second line when cursor is put at the end', () => { it('finds the second line when cursor is put at the end', () => {
const searchLn = `line([0.94, 2.61], %)` const searchLn = `line(end = [0.94, 2.61])`
const sourceIndex = code.indexOf(searchLn) + searchLn.length const sourceIndex = code.indexOf(searchLn) + searchLn.length
const ast = assertParse(code) const ast = assertParse(code)
@ -258,7 +258,7 @@ describe('testing getNodePathFromSourceRange', () => {
]) ])
}) })
it('finds the last line when cursor is put at the end', () => { it('finds the last line when cursor is put at the end', () => {
const searchLn = `line([-0.21, -1.4], %)` const searchLn = `line(end = [-0.21, -1.4])`
const sourceIndex = code.indexOf(searchLn) + searchLn.length const sourceIndex = code.indexOf(searchLn) + searchLn.length
const ast = assertParse(code) const ast = assertParse(code)
@ -380,9 +380,9 @@ describe('testing hasExtrudeSketch', () => {
it('find sketch', async () => { it('find sketch', async () => {
const exampleCode = `length001 = 2 const exampleCode = `length001 = 2
part001 = startSketchAt([-1.41, 3.46]) part001 = startSketchAt([-1.41, 3.46])
|> line([19.49, 1.16], %, $seg01) |> line(end = [19.49, 1.16], tag = $seg01)
|> angledLine([-35, length001], %) |> angledLine([-35, length001], %)
|> line([-3.22, -7.36], %) |> line(end = [-3.22, -7.36])
|> angledLine([-175, segLen(seg01)], %)` |> angledLine([-175, segLen(seg01)], %)`
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
@ -399,11 +399,11 @@ part001 = startSketchAt([-1.41, 3.46])
it('find solid', async () => { it('find solid', async () => {
const exampleCode = `length001 = 2 const exampleCode = `length001 = 2
part001 = startSketchAt([-1.41, 3.46]) part001 = startSketchAt([-1.41, 3.46])
|> line([19.49, 1.16], %, $seg01) |> line(end = [19.49, 1.16], tag = $seg01)
|> angledLine([-35, length001], %) |> angledLine([-35, length001], %)
|> line([-3.22, -7.36], %) |> line(end = [-3.22, -7.36])
|> angledLine([-175, segLen(seg01)], %) |> angledLine([-175, segLen(seg01)], %)
|> extrude(1, %)` |> extrude(length = 1)`
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const execState = await enginelessExecutor(ast) const execState = await enginelessExecutor(ast)
@ -435,10 +435,10 @@ part001 = startSketchAt([-1.41, 3.46])
describe('Testing findUsesOfTagInPipe', () => { describe('Testing findUsesOfTagInPipe', () => {
const exampleCode = `part001 = startSketchOn('-XZ') const exampleCode = `part001 = startSketchOn('-XZ')
|> startProfileAt([68.12, 156.65], %) |> startProfileAt([68.12, 156.65], %)
|> line([306.21, 198.82], %) |> line(end = [306.21, 198.82])
|> line([306.21, 198.85], %, $seg01) |> line(end = [306.21, 198.85], tag = $seg01)
|> angledLine([-65, segLen(seg01)], %) |> angledLine([-65, segLen(seg01)], %)
|> line([306.21, 198.87], %) |> line(end = [306.21, 198.87])
|> angledLine([65, segLen(seg01)], %)` |> angledLine([65, segLen(seg01)], %)`
it('finds the current segment', async () => { it('finds the current segment', async () => {
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
@ -459,7 +459,7 @@ describe('Testing findUsesOfTagInPipe', () => {
it('find no tag if line has no tag', () => { it('find no tag if line has no tag', () => {
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const lineOfInterest = `line([306.21, 198.82], %)` const lineOfInterest = `line(end = [306.21, 198.82])`
const characterIndex = const characterIndex =
exampleCode.indexOf(lineOfInterest) + lineOfInterest.length exampleCode.indexOf(lineOfInterest) + lineOfInterest.length
const pathToNode = getNodePathFromSourceRange( const pathToNode = getNodePathFromSourceRange(
@ -474,39 +474,39 @@ describe('Testing findUsesOfTagInPipe', () => {
describe('Testing hasSketchPipeBeenExtruded', () => { describe('Testing hasSketchPipeBeenExtruded', () => {
const exampleCode = `sketch001 = startSketchOn('XZ') const exampleCode = `sketch001 = startSketchOn('XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([2.66, 1.17], %) |> line(end = [2.66, 1.17])
|> line([3.75, 0.46], %) |> line(end = [3.75, 0.46])
|> line([4.99, -0.46], %, $seg01) |> line(end = [4.99, -0.46], tag = $seg01)
|> line([3.3, -2.12], %) |> line(end = [3.3, -2.12])
|> line([2.16, -3.33], %) |> line(end = [2.16, -3.33])
|> line([0.85, -3.08], %) |> line(end = [0.85, -3.08])
|> line([-0.18, -3.36], %) |> line(end = [-0.18, -3.36])
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%) |> close()
extrude001 = extrude(10, sketch001) extrude001 = extrude(sketch001, length = 10)
sketch002 = startSketchOn(extrude001, seg01) sketch002 = startSketchOn(extrude001, seg01)
|> startProfileAt([-12.94, 6.6], %) |> startProfileAt([-12.94, 6.6], %)
|> line([2.45, -0.2], %) |> line(end = [2.45, -0.2])
|> line([-2, -1.25], %) |> line(end = [-2, -1.25])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
sketch003 = startSketchOn(extrude001, 'END') sketch003 = startSketchOn(extrude001, 'END')
|> startProfileAt([8.14, 2.8], %) |> startProfileAt([8.14, 2.8], %)
|> line([-1.24, 4.39], %) |> line(end = [-1.24, 4.39])
|> line([3.79, 1.91], %) |> line(end = [3.79, 1.91])
|> line([1.77, -2.95], %) |> line(end = [1.77, -2.95])
|> line([3.12, 1.74], %) |> line(end = [3.12, 1.74])
|> line([1.91, -4.09], %) |> line(end = [1.91, -4.09])
|> line([-5.6, -2.75], %) |> line(end = [-5.6, -2.75])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
|> extrude(3.14, %) |> extrude(length = 3.14)
` `
it('identifies sketch001 pipe as extruded (extrusion after pipe)', async () => { it('identifies sketch001 pipe as extruded (extrusion after pipe)', async () => {
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const lineOfInterest = `line([4.99, -0.46], %, $seg01)` const lineOfInterest = `line(end = [4.99, -0.46], tag = $seg01)`
const characterIndex = const characterIndex =
exampleCode.indexOf(lineOfInterest) + lineOfInterest.length exampleCode.indexOf(lineOfInterest) + lineOfInterest.length
const extruded = hasSketchPipeBeenExtruded( const extruded = hasSketchPipeBeenExtruded(
@ -522,7 +522,7 @@ sketch003 = startSketchOn(extrude001, 'END')
}) })
it('identifies sketch002 pipe as not extruded', async () => { it('identifies sketch002 pipe as not extruded', async () => {
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const lineOfInterest = `line([2.45, -0.2], %)` const lineOfInterest = `line(end = [2.45, -0.2])`
const characterIndex = const characterIndex =
exampleCode.indexOf(lineOfInterest) + lineOfInterest.length exampleCode.indexOf(lineOfInterest) + lineOfInterest.length
const extruded = hasSketchPipeBeenExtruded( const extruded = hasSketchPipeBeenExtruded(
@ -538,7 +538,7 @@ sketch003 = startSketchOn(extrude001, 'END')
}) })
it('identifies sketch003 pipe as extruded (extrusion within pipe)', async () => { it('identifies sketch003 pipe as extruded (extrusion within pipe)', async () => {
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const lineOfInterest = `|> line([3.12, 1.74], %)` const lineOfInterest = `|> line(end = [3.12, 1.74])`
const characterIndex = const characterIndex =
exampleCode.indexOf(lineOfInterest) + lineOfInterest.length exampleCode.indexOf(lineOfInterest) + lineOfInterest.length
const extruded = hasSketchPipeBeenExtruded( const extruded = hasSketchPipeBeenExtruded(
@ -558,17 +558,17 @@ describe('Testing doesSceneHaveSweepableSketch', () => {
it('finds sketch001 pipe to be extruded', async () => { it('finds sketch001 pipe to be extruded', async () => {
const exampleCode = `sketch001 = startSketchOn('XZ') const exampleCode = `sketch001 = startSketchOn('XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%) |> close()
extrude001 = extrude(10, sketch001) extrude001 = extrude(sketch001, length = 10)
sketch002 = startSketchOn(extrude001, $seg01) sketch002 = startSketchOn(extrude001, $seg01)
|> startProfileAt([-12.94, 6.6], %) |> startProfileAt([-12.94, 6.6], %)
|> line([2.45, -0.2], %) |> line(end = [2.45, -0.2])
|> line([-2, -1.25], %) |> line(end = [-2, -1.25])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
` `
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const extrudable = doesSceneHaveSweepableSketch(ast) const extrudable = doesSceneHaveSweepableSketch(ast)
@ -588,11 +588,11 @@ sketch002 = startSketchOn(plane001)
it('find sketch002 NOT pipe to be extruded', async () => { it('find sketch002 NOT pipe to be extruded', async () => {
const exampleCode = `sketch001 = startSketchOn('XZ') const exampleCode = `sketch001 = startSketchOn('XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%) |> close()
extrude001 = extrude(10, sketch001) extrude001 = extrude(sketch001, length = 10)
` `
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
const extrudable = doesSceneHaveSweepableSketch(ast) const extrudable = doesSceneHaveSweepableSketch(ast)
@ -604,7 +604,7 @@ describe('Testing doesSceneHaveExtrudedSketch', () => {
it('finds extruded sketch as variable', async () => { it('finds extruded sketch as variable', async () => {
const exampleCode = `sketch001 = startSketchOn('XZ') const exampleCode = `sketch001 = startSketchOn('XZ')
|> circle({ center = [0, 0], radius = 1 }, %) |> circle({ center = [0, 0], radius = 1 }, %)
extrude001 = extrude(1, sketch001) extrude001 = extrude(sketch001, length = 1)
` `
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
if (err(ast)) throw ast if (err(ast)) throw ast
@ -614,7 +614,7 @@ extrude001 = extrude(1, sketch001)
it('finds extruded sketch in pipe', async () => { it('finds extruded sketch in pipe', async () => {
const exampleCode = `extrude001 = startSketchOn('XZ') const exampleCode = `extrude001 = startSketchOn('XZ')
|> circle({ center = [0, 0], radius = 1 }, %) |> circle({ center = [0, 0], radius = 1 }, %)
|> extrude(1, %) |> extrude(length = 1)
` `
const ast = assertParse(exampleCode) const ast = assertParse(exampleCode)
if (err(ast)) throw ast if (err(ast)) throw ast
@ -643,10 +643,10 @@ describe('Testing traverse and pathToNode', () => {
const code = `myVar = 5 const code = `myVar = 5
sketch001 = startSketchOn('XZ') sketch001 = startSketchOn('XZ')
|> startProfileAt([3.29, 7.86], %) |> startProfileAt([3.29, 7.86], %)
|> line([2.48, 2.44], %) |> line(end = [2.48, 2.44])
|> line([-3.86, -2.73], %) |> line(end = [-3.86, -2.73])
|> line([-17.67, 0.85], %) |> line(end = [-17.67, 0.85])
|> close(%) |> close()
bing = { yo: 55 } bing = { yo: 55 }
myNestedVar = [ myNestedVar = [
{ {

View File

@ -76,10 +76,10 @@ log(5, myVar)
}) })
it('recast sketch declaration', () => { it('recast sketch declaration', () => {
let code = `mySketch = startSketchAt([0, 0]) let code = `mySketch = startSketchAt([0, 0])
|> lineTo([0, 1], %, $myPath) |> line(endAbsolute = [0, 1], tag = $myPath)
|> lineTo([1, 1], %) |> line(endAbsolute = [1, 1])
|> lineTo([1, 0], %, $rightPath) |> line(endAbsolute = [1, 0], tag = $rightPath)
|> close(%) |> close()
` `
const { ast } = code2ast(code) const { ast } = code2ast(code)
const recasted = recast(ast) const recasted = recast(ast)
@ -89,9 +89,9 @@ log(5, myVar)
it('sketch piped into callExpression', () => { it('sketch piped into callExpression', () => {
const code = [ const code = [
'mySk1 = startSketchAt([0, 0])', 'mySk1 = startSketchAt([0, 0])',
' |> lineTo([1, 1], %)', ' |> line(endAbsolute = [1, 1])',
' |> lineTo([0, 1], %, $myTag)', ' |> line(endAbsolute = [0, 1], tag = $myTag)',
' |> lineTo([1, 1], %)', ' |> line(endAbsolute = [1, 1])',
' |> rx(90, %)', ' |> rx(90, %)',
].join('\n') ].join('\n')
const { ast } = code2ast(code) const { ast } = code2ast(code)
@ -263,9 +263,9 @@ key = 'c'
it('comments in a pipe expression', () => { it('comments in a pipe expression', () => {
const code = [ const code = [
'mySk1 = startSketchAt([0, 0])', 'mySk1 = startSketchAt([0, 0])',
' |> lineTo([1, 1], %)', ' |> line(endAbsolute = [1, 1])',
' |> lineTo([0, 1], %, $myTag)', ' |> line(endAbsolute = [0, 1], tag = $myTag)',
' |> lineTo([1, 1], %)', ' |> line(endAbsolute = [1, 1])',
' // a comment', ' // a comment',
' |> rx(90, %)', ' |> rx(90, %)',
].join('\n') ].join('\n')
@ -279,10 +279,10 @@ key = 'c'
/* comment at start */ /* comment at start */
mySk1 = startSketchAt([0, 0]) mySk1 = startSketchAt([0, 0])
|> lineTo([1, 1], %) |> line(endAbsolute = [1, 1])
// comment here // comment here
|> lineTo([0, 1], %, $myTag) |> line(endAbsolute = [0, 1], tag = $myTag)
|> lineTo([1, 1], %) /* and |> line(endAbsolute = [1, 1]) /* and
here here
*/ */
// a comment between pipe expression statements // a comment between pipe expression statements
@ -302,10 +302,10 @@ one more for good measure
expect(recasted).toBe(`/* comment at start */ expect(recasted).toBe(`/* comment at start */
mySk1 = startSketchAt([0, 0]) mySk1 = startSketchAt([0, 0])
|> lineTo([1, 1], %) |> line(endAbsolute = [1, 1])
// comment here // comment here
|> lineTo([0, 1], %, $myTag) |> line(endAbsolute = [0, 1], tag = $myTag)
|> lineTo([1, 1], %) /* and |> line(endAbsolute = [1, 1]) /* and
here */ here */
// a comment between pipe expression statements // a comment between pipe expression statements
|> rx(90, %) |> rx(90, %)
@ -342,7 +342,7 @@ describe('testing call Expressions in BinaryExpressions and UnaryExpressions', (
it('with unaryExpression in sketch situation', () => { it('with unaryExpression in sketch situation', () => {
const code = [ const code = [
'part001 = startSketchAt([0, 0])', 'part001 = startSketchAt([0, 0])',
' |> line([-2.21, -legLen(5, min(3, 999))], %)', ' |> line(end = [-2.21, -legLen(5, min(3, 999))])',
].join('\n') ].join('\n')
const { ast } = code2ast(code) const { ast } = code2ast(code)
const recasted = recast(ast) const recasted = recast(ast)
@ -354,14 +354,14 @@ describe('testing call Expressions in BinaryExpressions and UnaryExpressions', (
describe('it recasts wrapped object expressions in pipe bodies with correct indentation', () => { describe('it recasts wrapped object expressions in pipe bodies with correct indentation', () => {
it('with a single line', () => { it('with a single line', () => {
const code = `part001 = startSketchAt([-0.01, -0.08]) const code = `part001 = startSketchAt([-0.01, -0.08])
|> line([0.62, 4.15], %, $seg01) |> line(end = [0.62, 4.15], tag = $seg01)
|> line([2.77, -1.24], %) |> line(end = [2.77, -1.24])
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle = 201, angle = 201,
offset = -1.35, offset = -1.35,
intersectTag = $seg01 intersectTag = $seg01
}, %) }, %)
|> line([-0.42, -1.72], %) |> line(end = [-0.42, -1.72])
` `
const { ast } = code2ast(code) const { ast } = code2ast(code)
const recasted = recast(ast) const recasted = recast(ast)

View File

@ -103,14 +103,14 @@ describe('testing getXComponent', () => {
}) })
describe('testing changeSketchArguments', () => { describe('testing changeSketchArguments', () => {
const lineToChange = 'lineTo([-1.59, -1.54], %)' const lineToChange = 'line(endAbsolute = [-1.59, -1.54])'
const lineAfterChange = 'lineTo([2, 3], %)' const lineAfterChange = 'line(endAbsolute = [2, 3])'
test('changeSketchArguments', async () => { test('changeSketchArguments', async () => {
// Enable rotations #152 // Enable rotations #152
const genCode = (line: string) => `mySketch001 = startSketchOn('XY') const genCode = (line: string) => `mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> ${line} |> ${line}
|> lineTo([0.46, -5.82], %) |> line(endAbsolute = [0.46, -5.82])
// |> rx(45, %) // |> rx(45, %)
` `
const code = genCode(lineToChange) const code = genCode(lineToChange)
@ -141,15 +141,15 @@ describe('testing changeSketchArguments', () => {
}) })
describe('testing addNewSketchLn', () => { describe('testing addNewSketchLn', () => {
const lineToChange = 'lineTo([-1.59, -1.54], %)' const lineToChange = 'line(endAbsolute = [-1.59, -1.54])'
test('addNewSketchLn', async () => { test('addNewSketchLn', async () => {
// Enable rotations #152 // Enable rotations #152
const code = ` const code = `
mySketch001 = startSketchOn('XY') mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
// |> rx(45, %) // |> rx(45, %)
|> lineTo([-1.59, -1.54], %) |> line(endAbsolute = [-1.59, -1.54])
|> lineTo([0.46, -5.82], %)` |> line(endAbsolute = [0.46, -5.82])`
const ast = assertParse(code) const ast = assertParse(code)
const execState = await enginelessExecutor(ast) const execState = await enginelessExecutor(ast)
@ -177,9 +177,9 @@ mySketch001 = startSketchOn('XY')
let expectedCode = `mySketch001 = startSketchOn('XY') let expectedCode = `mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
// |> rx(45, %) // |> rx(45, %)
|> lineTo([-1.59, -1.54], %) |> line(endAbsolute = [-1.59, -1.54])
|> lineTo([0.46, -5.82], %) |> line(endAbsolute = [0.46, -5.82])
|> lineTo([2, 3], %) |> line(endAbsolute = [2, 3])
` `
const { modifiedAst } = newSketchLnRetVal const { modifiedAst } = newSketchLnRetVal
@ -200,9 +200,9 @@ mySketch001 = startSketchOn('XY')
expectedCode = `mySketch001 = startSketchOn('XY') expectedCode = `mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
// |> rx(45, %) // |> rx(45, %)
|> lineTo([-1.59, -1.54], %) |> line(endAbsolute = [-1.59, -1.54])
|> lineTo([0.46, -5.82], %) |> line(endAbsolute = [0.46, -5.82])
|> close(%) |> close()
` `
expect(recast(modifiedAst2)).toBe(expectedCode) expect(recast(modifiedAst2)).toBe(expectedCode)
}) })
@ -210,13 +210,13 @@ mySketch001 = startSketchOn('XY')
describe('testing addTagForSketchOnFace', () => { describe('testing addTagForSketchOnFace', () => {
it('needs to be in it', async () => { it('needs to be in it', async () => {
const originalLine = 'lineTo([-1.59, -1.54], %)' const originalLine = 'line(endAbsolute = [-1.59, -1.54])'
// Enable rotations #152 // Enable rotations #152
const genCode = (line: string) => `mySketch001 = startSketchOn('XY') const genCode = (line: string) => `mySketch001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
// |> rx(45, %) // |> rx(45, %)
|> ${line} |> ${line}
|> lineTo([0.46, -5.82], %) |> line(endAbsolute = [0.46, -5.82])
` `
const code = genCode(originalLine) const code = genCode(originalLine)
const ast = assertParse(code) const ast = assertParse(code)
@ -240,7 +240,7 @@ describe('testing addTagForSketchOnFace', () => {
if (err(sketchOnFaceRetVal)) return sketchOnFaceRetVal if (err(sketchOnFaceRetVal)) return sketchOnFaceRetVal
const { modifiedAst } = sketchOnFaceRetVal const { modifiedAst } = sketchOnFaceRetVal
const expectedCode = genCode('lineTo([-1.59, -1.54], %, $seg01)') const expectedCode = genCode('line(endAbsolute = [-1.59, -1.54], tag = $seg01)')
expect(recast(modifiedAst)).toBe(expectedCode) expect(recast(modifiedAst)).toBe(expectedCode)
}) })
const chamferTestCases = [ const chamferTestCases = [
@ -284,9 +284,9 @@ describe('testing addTagForSketchOnFace', () => {
segAng(rectangleSegmentA001), segAng(rectangleSegmentA001),
-segLen(rectangleSegmentA001) -segLen(rectangleSegmentA001)
], %) ], %)
|> lineTo([profileStartX(%), profileStartY(%)], %, $seg02) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close(%) |> close()
extrude001 = extrude(100, sketch001) extrude001 = extrude(sketch001, length = 100)
${insertCode} ${insertCode}
` `
const code = genCode(originalChamfer) const code = genCode(originalChamfer)
@ -326,12 +326,12 @@ describe('testing getConstraintInfo', () => {
describe('object notation', () => { describe('object notation', () => {
const code = `const part001 = startSketchOn('-XZ') const code = `const part001 = startSketchOn('-XZ')
|> startProfileAt([0,0], %) |> startProfileAt([0,0], %)
|> line([3, 4], %) |> line(end = [3, 4])
|> angledLine({ |> angledLine({
angle = 3.14, angle = 3.14,
length = 3.14, length = 3.14,
}, %) }, %)
|> lineTo([6.14, 3.14], %) |> line(endAbsolute = [6.14, 3.14])
|> xLineTo(8, %) |> xLineTo(8, %)
|> yLineTo(5, %) |> yLineTo(5, %)
|> yLine(3.14, %, $a) |> yLine(3.14, %, $a)
@ -700,9 +700,9 @@ describe('testing getConstraintInfo', () => {
describe('array notation', () => { describe('array notation', () => {
const code = `const part001 = startSketchOn('-XZ') const code = `const part001 = startSketchOn('-XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([3, 4], %) |> line(end = [3, 4])
|> angledLine([3.14, 3.14], %) |> angledLine([3.14, 3.14], %)
|> lineTo([6.14, 3.14], %) |> line(endAbsolute = [6.14, 3.14])
|> xLineTo(8, %) |> xLineTo(8, %)
|> yLineTo(5, %) |> yLineTo(5, %)
|> yLine(3.14, %, $a) |> yLine(3.14, %, $a)
@ -854,9 +854,9 @@ describe('testing getConstraintInfo', () => {
describe('constrained', () => { describe('constrained', () => {
const code = `const part001 = startSketchOn('-XZ') const code = `const part001 = startSketchOn('-XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([3 + 0, 4 + 0], %) |> line(end = [3 + 0, 4 + 0])
|> angledLine({ angle = 3.14 + 0, length = 3.14 + 0 }, %) |> angledLine({ angle = 3.14 + 0, length = 3.14 + 0 }, %)
|> lineTo([6.14 + 0, 3.14 + 0], %) |> line(endAbsolute = [6.14 + 0, 3.14 + 0])
|> xLineTo(8 + 0, %) |> xLineTo(8 + 0, %)
|> yLineTo(5 + 0, %) |> yLineTo(5 + 0, %)
|> yLine(3.14 + 0, %, $a) |> yLine(3.14 + 0, %, $a)

View File

@ -73,8 +73,8 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => {
const bigExampleArr = [ const bigExampleArr = [
`part001 = startSketchOn('XY')`, `part001 = startSketchOn('XY')`,
` |> startProfileAt([0, 0], %)`, ` |> startProfileAt([0, 0], %)`,
` |> lineTo([1, 1], %, $abc1)`, ` |> line(endAbsolute = [1, 1], tag = $abc1)`,
` |> line([-2.04, -0.7], %, $abc2)`, ` |> line(end = [-2.04, -0.7], tag = $abc2)`,
` |> angledLine({ angle = 157, length = 1.69 }, %, $abc3)`, ` |> angledLine({ angle = 157, length = 1.69 }, %, $abc3)`,
` |> angledLineOfXLength({ angle = 217, length = 0.86 }, %, $abc4)`, ` |> angledLineOfXLength({ angle = 217, length = 0.86 }, %, $abc4)`,
` |> angledLineOfYLength({ angle = 104, length = 1.58 }, %, $abc5)`, ` |> angledLineOfYLength({ angle = 104, length = 1.58 }, %, $abc5)`,
@ -84,8 +84,8 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => {
` |> yLine(1.57, %, $abc9)`, ` |> yLine(1.57, %, $abc9)`,
` |> xLineTo(1.49, %, $abc10)`, ` |> xLineTo(1.49, %, $abc10)`,
` |> yLineTo(2.64, %, $abc11)`, ` |> yLineTo(2.64, %, $abc11)`,
` |> lineTo([2.55, 3.58], %) // lineTo`, ` |> line(endAbsolute = [2.55, 3.58]) // lineTo`,
` |> line([0.73, -0.75], %)`, ` |> line(end = [0.73, -0.75])`,
` |> angledLine([63, 1.38], %) // angledLine`, ` |> angledLine([63, 1.38], %) // angledLine`,
` |> angledLineOfXLength([319, 1.15], %) // angledLineOfXLength`, ` |> angledLineOfXLength([319, 1.15], %) // angledLineOfXLength`,
` |> angledLineOfYLength([50, 1.35], %) // angledLineOfYLength`, ` |> angledLineOfYLength([50, 1.35], %) // angledLineOfYLength`,
@ -98,7 +98,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => {
] ]
const bigExample = bigExampleArr.join('\n') const bigExample = bigExampleArr.join('\n')
it('line with tag converts to xLine', async () => { it('line with tag converts to xLine', async () => {
const callToSwap = 'line([-2.04, -0.7], %, $abc2)' const callToSwap = 'line(end = [-2.04, -0.7], tag = $abc2)'
const expectedLine = 'xLine(-2.04, %, $abc2)' const expectedLine = 'xLine(-2.04, %, $abc2)'
const { newCode, originalRange } = await testingSwapSketchFnCall({ const { newCode, originalRange } = await testingSwapSketchFnCall({
inputCode: bigExample, inputCode: bigExample,
@ -110,7 +110,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => {
expect(originalRange[0]).toBe(newCode.indexOf(expectedLine)) expect(originalRange[0]).toBe(newCode.indexOf(expectedLine))
}) })
it('line w/o tag converts to xLine', async () => { it('line w/o tag converts to xLine', async () => {
const callToSwap = 'line([0.73, -0.75], %)' const callToSwap = 'line(end = [0.73, -0.75])'
const expectedLine = 'xLine(0.73, %)' const expectedLine = 'xLine(0.73, %)'
const { newCode, originalRange } = await testingSwapSketchFnCall({ const { newCode, originalRange } = await testingSwapSketchFnCall({
inputCode: bigExample, inputCode: bigExample,
@ -124,7 +124,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => {
it('lineTo with tag converts to xLineTo', async () => { it('lineTo with tag converts to xLineTo', async () => {
const { newCode, originalRange } = await testingSwapSketchFnCall({ const { newCode, originalRange } = await testingSwapSketchFnCall({
inputCode: bigExample, inputCode: bigExample,
callToSwap: 'lineTo([1, 1], %, $abc1)', callToSwap: 'line(endAbsolute = [1, 1], tag = $abc1)',
constraintType: 'horizontal', constraintType: 'horizontal',
}) })
const expectedLine = 'xLineTo(1, %, $abc1)' const expectedLine = 'xLineTo(1, %, $abc1)'
@ -135,7 +135,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => {
it('lineTo w/o tag converts to xLineTo', async () => { it('lineTo w/o tag converts to xLineTo', async () => {
const { newCode, originalRange } = await testingSwapSketchFnCall({ const { newCode, originalRange } = await testingSwapSketchFnCall({
inputCode: bigExample, inputCode: bigExample,
callToSwap: 'lineTo([2.55, 3.58], %)', callToSwap: 'line(endAbsolute = [2.55, 3.58])',
constraintType: 'horizontal', constraintType: 'horizontal',
}) })
const expectedLine = 'xLineTo(2.55, %) // lineTo' const expectedLine = 'xLineTo(2.55, %) // lineTo'
@ -272,21 +272,21 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var
`part001 = startSketchOn('XY')`, `part001 = startSketchOn('XY')`,
` |> startProfileAt([0, 0], %)`, ` |> startProfileAt([0, 0], %)`,
// ` |> rx(90, %)`, // ` |> rx(90, %)`,
` |> lineTo([1, 1], %)`, ` |> line(endAbsolute = [1, 1])`,
` |> line([lineX, 2.13], %)`, ` |> line(end = [lineX, 2.13])`,
` |> lineTo([lineToX, 2.85], %)`, ` |> line(endAbsolute = [lineToX, 2.85])`,
` |> angledLine([angledLineAngle, 1.64], %)`, ` |> angledLine([angledLineAngle, 1.64], %)`,
` |> angledLineOfXLength([329, angledLineOfXLengthX], %)`, ` |> angledLineOfXLength([329, angledLineOfXLengthX], %)`,
` |> angledLineOfYLength([222, angledLineOfYLengthY], %)`, ` |> angledLineOfYLength([222, angledLineOfYLengthY], %)`,
` |> angledLineToX([330, angledLineToXx], %)`, ` |> angledLineToX([330, angledLineToXx], %)`,
` |> angledLineToY([217, angledLineToYy], %)`, ` |> angledLineToY([217, angledLineToYy], %)`,
` |> line([0.89, -0.1], %)`, ` |> line(end = [0.89, -0.1])`,
] ]
const varExample = variablesExampleArr.join('\n') const varExample = variablesExampleArr.join('\n')
it('line keeps variable when converted to xLine', async () => { it('line keeps variable when converted to xLine', async () => {
const { newCode, originalRange } = await testingSwapSketchFnCall({ const { newCode, originalRange } = await testingSwapSketchFnCall({
inputCode: varExample, inputCode: varExample,
callToSwap: 'line([lineX, 2.13], %)', callToSwap: 'line(end = [lineX, 2.13])',
constraintType: 'horizontal', constraintType: 'horizontal',
}) })
const expectedLine = 'xLine(lineX, %)' const expectedLine = 'xLine(lineX, %)'
@ -297,7 +297,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var
it('lineTo keeps variable when converted to xLineTo', async () => { it('lineTo keeps variable when converted to xLineTo', async () => {
const { newCode, originalRange } = await testingSwapSketchFnCall({ const { newCode, originalRange } = await testingSwapSketchFnCall({
inputCode: varExample, inputCode: varExample,
callToSwap: 'lineTo([lineToX, 2.85], %)', callToSwap: 'line(endAbsolute = [lineToX, 2.85])',
constraintType: 'horizontal', constraintType: 'horizontal',
}) })
const expectedLine = 'xLineTo(lineToX, %)' const expectedLine = 'xLineTo(lineToX, %)'
@ -365,9 +365,9 @@ describe('testing getSketchSegmentIndexFromSourceRange', () => {
const code = ` const code = `
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0.04], %) // segment-in-start |> startProfileAt([0, 0.04], %) // segment-in-start
|> line([0, 0.4], %) |> line(end = [0, 0.4])
|> xLine(3.48, %) |> xLine(3.48, %)
|> line([2.14, 1.35], %) // normal-segment |> line(end = [2.14, 1.35]) // normal-segment
|> xLine(3.54, %)` |> xLine(3.54, %)`
it('normal case works', async () => { it('normal case works', async () => {
const execState = await enginelessExecutor(assertParse(code)) const execState = await enginelessExecutor(assertParse(code))

View File

@ -28,12 +28,12 @@ beforeAll(async () => {
describe('testing getConstraintType', () => { describe('testing getConstraintType', () => {
const helper = getConstraintTypeFromSourceHelper const helper = getConstraintTypeFromSourceHelper
it('testing line', () => { it('testing line', () => {
expect(helper(`line([5, myVar], %)`)).toBe('yRelative') expect(helper(`line(end = [5, myVar])`)).toBe('yRelative')
expect(helper(`line([myVar, 5], %)`)).toBe('xRelative') expect(helper(`line(end = [myVar, 5])`)).toBe('xRelative')
}) })
it('testing lineTo', () => { it('testing lineTo', () => {
expect(helper(`lineTo([5, myVar], %)`)).toBe('yAbsolute') expect(helper(`line(endAbsolute = [5, myVar])`)).toBe('yAbsolute')
expect(helper(`lineTo([myVar, 5], %)`)).toBe('xAbsolute') expect(helper(`line(endAbsolute = [myVar, 5])`)).toBe('xAbsolute')
}) })
it('testing angledLine', () => { it('testing angledLine', () => {
expect(helper(`angledLine([5, myVar], %)`)).toBe('length') expect(helper(`angledLine([5, myVar], %)`)).toBe('length')
@ -105,17 +105,17 @@ describe('testing transformAstForSketchLines for equal length constraint', () =>
describe(`should always reorder selections to have the base selection first`, () => { describe(`should always reorder selections to have the base selection first`, () => {
const inputScript = `sketch001 = startSketchOn('XZ') const inputScript = `sketch001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([5, 5], %) |> line(end = [5, 5])
|> line([-2, 5], %) |> line(end = [-2, 5])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%)` |> close()`
const expectedModifiedScript = `sketch001 = startSketchOn('XZ') const expectedModifiedScript = `sketch001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([5, 5], %, $seg01) |> line(end = [5, 5], tag = $seg01)
|> angledLine([112, segLen(seg01)], %) |> angledLine([112, segLen(seg01)], %)
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
` `
const selectLine = ( const selectLine = (
@ -193,26 +193,26 @@ myAng = 40
myAng2 = 134 myAng2 = 134
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([1, 3.82], %) // ln-should-get-tag |> line(end = [1, 3.82]) // ln-should-get-tag
|> lineTo([myVar, 1], %) // ln-lineTo-xAbsolute should use angleToMatchLengthX helper |> line(endAbsolute = [myVar, 1]) // ln-lineTo-xAbsolute should use angleToMatchLengthX helper
|> lineTo([1, myVar], %) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper |> line(endAbsolute = [1, myVar]) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper
|> lineTo([2, 4], %) // ln-lineTo-free should become angledLine |> line(endAbsolute = [2, 4]) // ln-lineTo-free should become angledLine
|> angledLineToX([45, 2.5], %) // ln-angledLineToX-free should become angledLine |> angledLineToX([45, 2.5], %) // ln-angledLineToX-free should become angledLine
|> angledLineToX([myAng, 3], %) // ln-angledLineToX-angle should become angledLine |> angledLineToX([myAng, 3], %) // ln-angledLineToX-angle should become angledLine
|> angledLineToX([45, myVar2], %) // ln-angledLineToX-xAbsolute should use angleToMatchLengthX to get angle |> angledLineToX([45, myVar2], %) // ln-angledLineToX-xAbsolute should use angleToMatchLengthX to get angle
|> angledLineToY([135, 5], %) // ln-angledLineToY-free should become angledLine |> angledLineToY([135, 5], %) // ln-angledLineToY-free should become angledLine
|> angledLineToY([myAng2, 4], %) // ln-angledLineToY-angle should become angledLine |> angledLineToY([myAng2, 4], %) // ln-angledLineToY-angle should become angledLine
|> angledLineToY([45, myVar3], %) // ln-angledLineToY-yAbsolute should use angleToMatchLengthY to get angle |> angledLineToY([45, myVar3], %) // ln-angledLineToY-yAbsolute should use angleToMatchLengthY to get angle
|> line([myVar, 1], %) // ln-should use legLen for y |> line(end = [myVar, 1]) // ln-should use legLen for y
|> line([myVar, -1], %) // ln-legLen but negative |> line(end = [myVar, -1]) // ln-legLen but negative
|> line([-0.62, -1.54], %) // ln-should become angledLine |> line(end = [-0.62, -1.54]) // ln-should become angledLine
|> angledLine([myVar, 1.04], %) // ln-use segLen for second arg |> angledLine([myVar, 1.04], %) // ln-use segLen for second arg
|> angledLine([45, 1.04], %) // ln-segLen again |> angledLine([45, 1.04], %) // ln-segLen again
|> angledLineOfXLength([54, 2.35], %) // ln-should be transformed to angledLine |> angledLineOfXLength([54, 2.35], %) // ln-should be transformed to angledLine
|> angledLineOfXLength([50, myVar], %) // ln-should use legAngX to calculate angle |> angledLineOfXLength([50, myVar], %) // ln-should use legAngX to calculate angle
|> angledLineOfXLength([209, myVar], %) // ln-same as above but should have + 180 to match original quadrant |> angledLineOfXLength([209, myVar], %) // ln-same as above but should have + 180 to match original quadrant
|> line([1, myVar], %) // ln-legLen again but yRelative |> line(end = [1, myVar]) // ln-legLen again but yRelative
|> line([-1, myVar], %) // ln-negative legLen yRelative |> line(end = [-1, myVar]) // ln-negative legLen yRelative
|> angledLineOfYLength([58, 0.7], %) // ln-angledLineOfYLength-free should become angledLine |> angledLineOfYLength([58, 0.7], %) // ln-angledLineOfYLength-free should become angledLine
|> angledLineOfYLength([myAng, 0.7], %) // ln-angledLineOfYLength-angle should become angledLine |> angledLineOfYLength([myAng, 0.7], %) // ln-angledLineOfYLength-angle should become angledLine
|> angledLineOfYLength([35, myVar], %) // ln-angledLineOfYLength-yRelative use legAngY |> angledLineOfYLength([35, myVar], %) // ln-angledLineOfYLength-yRelative use legAngY
@ -229,7 +229,7 @@ myAng = 40
myAng2 = 134 myAng2 = 134
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([1, 3.82], %, $seg01) // ln-should-get-tag |> line(end = [1, 3.82], tag = $seg01) // ln-should-get-tag
|> angledLineToX([ |> angledLineToX([
-angleToMatchLengthX(seg01, myVar, %), -angleToMatchLengthX(seg01, myVar, %),
myVar myVar
@ -334,15 +334,15 @@ myVar2 = 12
myVar3 = -10 myVar3 = -10
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([1, 1], %) |> line(endAbsolute = [1, 1])
|> line([-6.28, 1.4], %) // select for horizontal constraint 1 |> line(end = [-6.28, 1.4]) // select for horizontal constraint 1
|> line([-1.07, myVar], %) // select for vertical constraint 1 |> line(end = [-1.07, myVar]) // select for vertical constraint 1
|> line([myVar, 4.32], %) // select for horizontal constraint 2 |> line(end = [myVar, 4.32]) // select for horizontal constraint 2
|> line([6.35, -1.12], %) // select for vertical constraint 2 |> line(end = [6.35, -1.12]) // select for vertical constraint 2
|> lineTo([5, 8], %) // select for horizontal constraint 3 |> line(endAbsolute = [5, 8]) // select for horizontal constraint 3
|> lineTo([3, 11], %) // select for vertical constraint 3 |> line(endAbsolute = [3, 11]) // select for vertical constraint 3
|> lineTo([myVar2, 12.63], %) // select for horizontal constraint 4 |> line(endAbsolute = [myVar2, 12.63]) // select for horizontal constraint 4
|> lineTo([4.08, myVar2], %) // select for vertical constraint 4 |> line(endAbsolute = [4.08, myVar2]) // select for vertical constraint 4
|> angledLine([156, 1.34], %) // select for horizontal constraint 5 |> angledLine([156, 1.34], %) // select for horizontal constraint 5
|> angledLine([103, 1.44], %) // select for vertical constraint 5 |> angledLine([103, 1.44], %) // select for vertical constraint 5
|> angledLine([-178, myVar], %) // select for horizontal constraint 6 |> angledLine([-178, myVar], %) // select for horizontal constraint 6
@ -362,15 +362,15 @@ myVar2 = 12
myVar3 = -10 myVar3 = -10
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([1, 1], %) |> line(endAbsolute = [1, 1])
|> xLine(-6.28, %) // select for horizontal constraint 1 |> xLine(-6.28, %) // select for horizontal constraint 1
|> line([-1.07, myVar], %) // select for vertical constraint 1 |> line(end = [-1.07, myVar]) // select for vertical constraint 1
|> xLine(myVar, %) // select for horizontal constraint 2 |> xLine(myVar, %) // select for horizontal constraint 2
|> line([6.35, -1.12], %) // select for vertical constraint 2 |> line(end = [6.35, -1.12]) // select for vertical constraint 2
|> xLineTo(5, %) // select for horizontal constraint 3 |> xLineTo(5, %) // select for horizontal constraint 3
|> lineTo([3, 11], %) // select for vertical constraint 3 |> line(endAbsolute = [3, 11]) // select for vertical constraint 3
|> xLineTo(myVar2, %) // select for horizontal constraint 4 |> xLineTo(myVar2, %) // select for horizontal constraint 4
|> lineTo([4.08, myVar2], %) // select for vertical constraint 4 |> line(endAbsolute = [4.08, myVar2]) // select for vertical constraint 4
|> xLine(-1.22, %) // select for horizontal constraint 5 |> xLine(-1.22, %) // select for horizontal constraint 5
|> angledLine([103, 1.44], %) // select for vertical constraint 5 |> angledLine([103, 1.44], %) // select for vertical constraint 5
|> xLine(-myVar, %) // select for horizontal constraint 6 |> xLine(-myVar, %) // select for horizontal constraint 6
@ -422,14 +422,14 @@ myVar2 = 12
myVar3 = -10 myVar3 = -10
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([1, 1], %) |> line(endAbsolute = [1, 1])
|> line([-6.28, 1.4], %) // select for horizontal constraint 1 |> line(end = [-6.28, 1.4]) // select for horizontal constraint 1
|> yLine(myVar, %) // select for vertical constraint 1 |> yLine(myVar, %) // select for vertical constraint 1
|> line([myVar, 4.32], %) // select for horizontal constraint 2 |> line(end = [myVar, 4.32]) // select for horizontal constraint 2
|> yLine(-1.12, %) // select for vertical constraint 2 |> yLine(-1.12, %) // select for vertical constraint 2
|> lineTo([5, 8], %) // select for horizontal constraint 3 |> line(endAbsolute = [5, 8]) // select for horizontal constraint 3
|> yLineTo(11, %) // select for vertical constraint 3 |> yLineTo(11, %) // select for vertical constraint 3
|> lineTo([myVar2, 12.63], %) // select for horizontal constraint 4 |> line(endAbsolute = [myVar2, 12.63]) // select for horizontal constraint 4
|> yLineTo(myVar2, %) // select for vertical constraint 4 |> yLineTo(myVar2, %) // select for vertical constraint 4
|> angledLine([156, 1.34], %) // select for horizontal constraint 5 |> angledLine([156, 1.34], %) // select for horizontal constraint 5
|> yLine(1.4, %) // select for vertical constraint 5 |> yLine(1.4, %) // select for vertical constraint 5
@ -483,11 +483,11 @@ describe('testing transformAstForSketchLines for vertical and horizontal distanc
const inputScript = `myVar = 1 const inputScript = `myVar = 1
part001 = startSketchOn('XY') part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> line([0.31, 1.67], %) // base selection |> line(end = [0.31, 1.67]) // base selection
|> line([0.45, 1.46], %) |> line(end = [0.45, 1.46])
|> line([0.45, 1.46], %) // free |> line(end = [0.45, 1.46]) // free
|> line([myVar, 0.01], %) // xRelative |> line(end = [myVar, 0.01]) // xRelative
|> line([0.7, myVar], %) // yRelative |> line(end = [0.7, myVar]) // yRelative
` `
it('testing for free to horizontal and vertical distance', async () => { it('testing for free to horizontal and vertical distance', async () => {
const expectedHorizontalCode = await helperThing( const expectedHorizontalCode = await helperThing(
@ -501,10 +501,10 @@ part001 = startSketchOn('XY')
'setVertDistance' 'setVertDistance'
) )
expect(expectedHorizontalCode).toContain( expect(expectedHorizontalCode).toContain(
`lineTo([segEndX(seg01) + 0.9, 4.59], %) // free` `line(endAbsolute = [segEndX(seg01) + 0.9, 4.59]) // free`
) )
expect(expectedVerticalCode).toContain( expect(expectedVerticalCode).toContain(
`lineTo([1.21, segEndY(seg01) + 2.92], %) // free` `line(endAbsolute = [1.21, segEndY(seg01) + 2.92]) // free`
) )
}) })
it('testing for xRelative to vertical distance', async () => { it('testing for xRelative to vertical distance', async () => {

View File

@ -9,8 +9,8 @@ describe('testing angledLineThatIntersects', () => {
it('angledLineThatIntersects should intersect with another line', async () => { it('angledLineThatIntersects should intersect with another line', async () => {
const code = (offset: string) => `part001 = startSketchOn('XY') const code = (offset: string) => `part001 = startSketchOn('XY')
|> startProfileAt([0, 0], %) |> startProfileAt([0, 0], %)
|> lineTo([2, 2], %, $yo) |> line(endAbsolute = [2, 2], tag = $yo)
|> lineTo([3, 1], %) |> line(endAbsolute = [3, 1])
|> angledLineThatIntersects({ |> angledLineThatIntersects({
angle: 180, angle: 180,
intersectTag: yo, intersectTag: yo,

View File

@ -4,38 +4,38 @@ test('normaliseKclNumbers', () => {
expect( expect(
normaliseKclNumbers(`sketch001 = startSketchOn('XY') normaliseKclNumbers(`sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
const extrude001 = extrude(-15, sketch001)`) const extrude001 = extrude(sketch001, length = -15)`)
).toBe(`sketch001 = startSketchOn('XY') ).toBe(`sketch001 = startSketchOn('XY')
|> startProfileAt([-12.34, 12.34], %) |> startProfileAt([-12.34, 12.34], %)
|> line([12.34, 0], %) |> line(end = [12.34, 0])
|> line([0, -12.34], %) |> line(end = [0, -12.34])
|> line([-12.34, 0], %) |> line(end = [-12.34, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
const extrude001 = extrude(-12.34, sketch001)`) const extrude001 = extrude(sketch001, length = -12.34)`)
expect( expect(
normaliseKclNumbers( normaliseKclNumbers(
`sketch001 = startSketchOn('XY') `sketch001 = startSketchOn('XY')
|> startProfileAt([-10, 10], %) |> startProfileAt([-10, 10], %)
|> line([20, 0], %) |> line(end = [20, 0])
|> line([0, -20], %) |> line(end = [0, -20])
|> line([-20, 0], %) |> line(end = [-20, 0])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
const extrude001 = extrude(-15, sketch001)`, const extrude001 = extrude(sketch001, length = -15)`,
false false
) )
).toBe(`sketch001 = startSketchOn('XY') ).toBe(`sketch001 = startSketchOn('XY')
|> startProfileAt([-12.34, 12.34], %) |> startProfileAt([-12.34, 12.34], %)
|> line([12.34, 12.34], %) |> line(end = [12.34, 12.34])
|> line([12.34, -12.34], %) |> line(end = [12.34, -12.34])
|> line([-12.34, 12.34], %) |> line(end = [-12.34, 12.34])
|> lineTo([profileStartX(%), profileStartY(%)], %) |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%) |> close()
const extrude001 = extrude(-12.34, sketch001)`) const extrude001 = extrude(sketch001, length = -12.34)`)
}) })