Skip to content

Commit 2f797d1

Browse files
fix: consolidate additional GraphicsBlocks tests into existing test file
1 parent ec89552 commit 2f797d1

1 file changed

Lines changed: 186 additions & 0 deletions

File tree

js/blocks/__tests__/GraphicsBlocks.test.js

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ describe("GraphicsBlocks", () => {
7070
doArc: jest.fn(),
7171
doForward: jest.fn(),
7272
doRight: jest.fn(),
73+
setControlPoint1: jest.fn(),
74+
setControlPoint2: jest.fn(),
7375
penState: true,
7476
wrap: false
7577
},
@@ -196,4 +198,188 @@ describe("GraphicsBlocks", () => {
196198
block.flow([90, 100], logo, turtle, 1);
197199
expect(turtleObj.painter.doArc).toHaveBeenCalledWith(90, 100);
198200
});
201+
202+
// ── SetHeadingBlock ─────────────────────────────
203+
describe("SetHeadingBlock (setheading)", () => {
204+
test("SetHeadingBlock is registered", () => {
205+
expect(activity.blocks.setheading).toBeDefined();
206+
});
207+
test("flow calls doSetHeading with correct angle", () => {
208+
const block = new activity.blocks.setheading();
209+
block.flow([90], logo, turtle, 1);
210+
expect(turtleObj.painter.doSetHeading).toHaveBeenCalledWith(90);
211+
});
212+
test("flow calls doSetHeading with 0 degrees", () => {
213+
const block = new activity.blocks.setheading();
214+
block.flow([0], logo, turtle, 1);
215+
expect(turtleObj.painter.doSetHeading).toHaveBeenCalledWith(0);
216+
});
217+
test("flow calls doSetHeading with negative angle", () => {
218+
const block = new activity.blocks.setheading();
219+
block.flow([-45], logo, turtle, 1);
220+
expect(turtleObj.painter.doSetHeading).toHaveBeenCalledWith(-45);
221+
});
222+
});
223+
224+
// ── MLeftBlock ───────────────────────────────────
225+
describe("MLeftBlock (left)", () => {
226+
test("MLeftBlock is registered", () => {
227+
expect(activity.blocks.left).toBeDefined();
228+
});
229+
test("flow turns turtle left (negative right)", () => {
230+
const block = new activity.blocks.left();
231+
block.flow([90], logo, turtle, 1);
232+
expect(turtleObj.painter.doRight).toHaveBeenCalledWith(-90);
233+
});
234+
test("flow with 0 degrees", () => {
235+
const block = new activity.blocks.left();
236+
block.flow([0], logo, turtle, 1);
237+
expect(turtleObj.painter.doRight).toHaveBeenCalledWith(-0);
238+
});
239+
test("flow with 180 degrees", () => {
240+
const block = new activity.blocks.left();
241+
block.flow([180], logo, turtle, 1);
242+
expect(turtleObj.painter.doRight).toHaveBeenCalledWith(-180);
243+
});
244+
});
245+
246+
// ── BezierBlock ──────────────────────────────────
247+
describe("BezierBlock (bezier)", () => {
248+
test("BezierBlock is registered", () => {
249+
expect(activity.blocks.bezier).toBeDefined();
250+
});
251+
test("flow calls doBezier with correct args", () => {
252+
const block = new activity.blocks.bezier();
253+
block.flow([100, 150], logo, turtle, 1);
254+
expect(turtleObj.painter.doBezier).toHaveBeenCalledWith(100, 150);
255+
});
256+
test("flow called with zero values", () => {
257+
const block = new activity.blocks.bezier();
258+
block.flow([0, 0], logo, turtle, 1);
259+
expect(turtleObj.painter.doBezier).toHaveBeenCalledWith(0, 0);
260+
});
261+
test("flow called with negative values", () => {
262+
const block = new activity.blocks.bezier();
263+
block.flow([-50, -75], logo, turtle, 1);
264+
expect(turtleObj.painter.doBezier).toHaveBeenCalledWith(-50, -75);
265+
});
266+
});
267+
268+
// ── ControlPoint1Block ───────────────────────────
269+
describe("ControlPoint1Block (controlpoint1)", () => {
270+
test("ControlPoint1Block is registered", () => {
271+
expect(activity.blocks.controlpoint1).toBeDefined();
272+
});
273+
test("flow calls setControlPoint1", () => {
274+
const block = new activity.blocks.controlpoint1();
275+
block.flow([50, 60], logo, turtle, 1);
276+
expect(turtleObj.painter.setControlPoint1).toHaveBeenCalledWith([50, 60]);
277+
});
278+
test("flow with zero values", () => {
279+
const block = new activity.blocks.controlpoint1();
280+
block.flow([0, 0], logo, turtle, 1);
281+
expect(turtleObj.painter.setControlPoint1).toHaveBeenCalledWith([0, 0]);
282+
});
283+
});
284+
285+
// ── ControlPoint2Block ───────────────────────────
286+
describe("ControlPoint2Block (controlpoint2)", () => {
287+
test("ControlPoint2Block is registered", () => {
288+
expect(activity.blocks.controlpoint2).toBeDefined();
289+
});
290+
test("flow calls setControlPoint2", () => {
291+
const block = new activity.blocks.controlpoint2();
292+
block.flow([70, 80], logo, turtle, 1);
293+
expect(turtleObj.painter.setControlPoint2).toHaveBeenCalledWith([70, 80]);
294+
});
295+
test("flow with negative values", () => {
296+
const block = new activity.blocks.controlpoint2();
297+
block.flow([-30, -40], logo, turtle, 1);
298+
expect(turtleObj.painter.setControlPoint2).toHaveBeenCalledWith([-30, -40]);
299+
});
300+
});
301+
302+
// ── WrapModeBlock ────────────────────────────────
303+
describe("WrapModeBlock (wrapmode)", () => {
304+
test("WrapModeBlock is registered", () => {
305+
expect(activity.blocks.wrapmode).toBeDefined();
306+
});
307+
test("arg returns true when wrap is on", () => {
308+
turtleObj.painter.wrap = true;
309+
const block = new activity.blocks.wrapmode();
310+
expect(block.arg(logo, turtle, 0)).toBe(true);
311+
});
312+
test("arg returns false when wrap is off", () => {
313+
turtleObj.painter.wrap = false;
314+
const block = new activity.blocks.wrapmode();
315+
expect(block.arg(logo, turtle, 0)).toBe(false);
316+
});
317+
});
318+
319+
// ── WrapBlock ────────────────────────────────────
320+
describe("WrapBlock (wrap)", () => {
321+
test("WrapBlock is registered", () => {
322+
expect(activity.blocks.wrap).toBeDefined();
323+
});
324+
test("flow runs without error", () => {
325+
const block = new activity.blocks.wrap();
326+
expect(() => block.flow([true], logo, turtle, 1)).not.toThrow();
327+
});
328+
});
329+
330+
// ── RightBlock extended ──────────────────────────
331+
describe("RightBlock extended", () => {
332+
test("RightBlock with 45 degrees", () => {
333+
const block = new activity.blocks.right();
334+
block.flow([45], logo, turtle, 1);
335+
expect(turtleObj.painter.doRight).toHaveBeenCalledWith(45);
336+
});
337+
test("RightBlock with 360 degrees", () => {
338+
const block = new activity.blocks.right();
339+
block.flow([360], logo, turtle, 1);
340+
expect(turtleObj.painter.doRight).toHaveBeenCalledWith(360);
341+
});
342+
});
343+
344+
// ── ForwardBlock extended ────────────────────────
345+
describe("ForwardBlock extended", () => {
346+
test("ForwardBlock with large value", () => {
347+
const block = new activity.blocks.forward();
348+
block.flow([500], logo, turtle, 1);
349+
expect(turtleObj.painter.doForward).toHaveBeenCalledWith(500);
350+
});
351+
test("ForwardBlock with zero", () => {
352+
const block = new activity.blocks.forward();
353+
block.flow([0], logo, turtle, 1);
354+
expect(turtleObj.painter.doForward).toHaveBeenCalledWith(0);
355+
});
356+
});
357+
358+
// ── ArcBlock extended ────────────────────────────
359+
describe("ArcBlock extended", () => {
360+
test("ArcBlock with full circle 360 degrees", () => {
361+
const block = new activity.blocks.arc();
362+
block.flow([360, 100], logo, turtle, 1);
363+
expect(turtleObj.painter.doArc).toHaveBeenCalledWith(360, 100);
364+
});
365+
test("ArcBlock with small radius", () => {
366+
const block = new activity.blocks.arc();
367+
block.flow([45, 10], logo, turtle, 1);
368+
expect(turtleObj.painter.doArc).toHaveBeenCalledWith(45, 10);
369+
});
370+
});
371+
372+
// ── SetXYBlock extended ──────────────────────────
373+
describe("SetXYBlock extended", () => {
374+
test("SetXYBlock with negative coordinates", () => {
375+
const block = new activity.blocks.setxy();
376+
block.flow([-100, -200], logo, turtle, 1);
377+
expect(turtleObj.painter.doSetXY).toHaveBeenCalledWith(-100, -200);
378+
});
379+
test("SetXYBlock with zero coordinates", () => {
380+
const block = new activity.blocks.setxy();
381+
block.flow([0, 0], logo, turtle, 1);
382+
expect(turtleObj.painter.doSetXY).toHaveBeenCalledWith(0, 0);
383+
});
384+
});
199385
});

0 commit comments

Comments
 (0)