Skip to content

Commit b7ab04c

Browse files
committed
event_whenthisspriteclicked
1 parent 001c8fe commit b7ab04c

File tree

3 files changed

+87
-6
lines changed

3 files changed

+87
-6
lines changed

src/lib/ruby-generator/event.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ export default function (Generator) {
99
return `${Generator.spriteName()}.when(:flag_clicked) do\n`;
1010
};
1111

12-
Generator.event_whenthisspriteclicked = function (block) {
13-
block.isStatement = true;
14-
return `${Generator.spriteName()}.when(:click) do\n`;
15-
};
16-
1712
Generator.event_whenkeypressed = function (block) {
1813
block.isStatement = true;
1914
const key = Generator.quote_(Generator.getFieldValue(block, 'KEY_OPTION') || null);
2015
return `${Generator.spriteName()}.when(:key_pressed, ${key}) do\n`;
2116
};
2217

18+
Generator.event_whenthisspriteclicked = function (block) {
19+
block.isStatement = true;
20+
return `${Generator.spriteName()}.when(:clicked) do\n`;
21+
};
22+
2323
Generator.event_whenbackdropswitchesto = function (block) {
2424
block.isStatement = true;
2525
const backdrop = Generator.quote_(Generator.getFieldValue(block, 'BACKDROP') || null);

src/lib/ruby-to-blocks-converter/event.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,18 @@ const EventConverter = {
6060
rubyBlock) {
6161
switch (args[0].value) {
6262
case 'flag_clicked':
63+
case 'clicked':
6364
if (args.length === 1) {
64-
block = this._createBlock('event_whenflagclicked', 'hat');
65+
let opcode;
66+
switch (args[0].value) {
67+
case 'flag_clicked':
68+
opcode = 'event_whenflagclicked';
69+
break;
70+
case 'clicked':
71+
opcode = 'event_whenthisspriteclicked';
72+
break;
73+
}
74+
block = this._createBlock(opcode, 'hat');
6575
this._setParent(rubyBlock, block);
6676
}
6777
break;

test/unit/lib/ruby-to-blocks-converter/event.test.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,75 @@ describe('RubyToBlocksConverter/Event', () => {
181181
expect(res).toBeFalsy();
182182
});
183183
});
184+
185+
describe('event_whenthisspriteclicked', () => {
186+
test('normal', () => {
187+
code = 'self.when(:clicked) { bounce_if_on_edge }';
188+
expected = [
189+
{
190+
opcode: 'event_whenthisspriteclicked',
191+
next: {
192+
opcode: 'motion_ifonedgebounce'
193+
}
194+
}
195+
];
196+
convertAndExpectToEqualBlocks(converter, target, code, expected);
197+
198+
code = 'self.when(:clicked) { bounce_if_on_edge; move(10) }';
199+
expected = [
200+
{
201+
opcode: 'event_whenthisspriteclicked',
202+
next: rubyToExpected(converter, target, 'bounce_if_on_edge; move(10)')[0]
203+
}
204+
];
205+
convertAndExpectToEqualBlocks(converter, target, code, expected);
206+
});
207+
208+
test('hat', () => {
209+
code = `
210+
bounce_if_on_edge
211+
self.when(:clicked) do
212+
end
213+
bounce_if_on_edge
214+
`;
215+
expected = [
216+
rubyToExpected(converter, target, 'bounce_if_on_edge')[0],
217+
{
218+
opcode: 'event_whenthisspriteclicked'
219+
},
220+
rubyToExpected(converter, target, 'bounce_if_on_edge')[0]
221+
];
222+
convertAndExpectToEqualBlocks(converter, target, code, expected);
223+
});
224+
225+
test('invalid', () => {
226+
[
227+
'self.when(:clicked)'
228+
].forEach(s => {
229+
convertAndExpectToEqualRubyStatement(converter, target, s, s);
230+
});
231+
232+
[
233+
'self.when(:clicked, 1) { bounce_if_on_edge }',
234+
'self.when(:click) { bounce_if_on_edge }'
235+
].forEach(s => {
236+
expect(converter.targetCodeToBlocks(target, s)).toBeTruthy();
237+
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
238+
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
239+
});
240+
});
241+
242+
test('error', () => {
243+
code = `
244+
forever do
245+
self.when(:clicked) do
246+
end
247+
end
248+
`;
249+
const res = converter.targetCodeToBlocks(target, code);
250+
expect(converter.errors).toHaveLength(1);
251+
expect(converter.errors[0].row).toEqual(2);
252+
expect(res).toBeFalsy();
253+
});
254+
});
184255
});

0 commit comments

Comments
 (0)