Skip to content

Commit 308e614

Browse files
committed
feat: when_flag_clicked / ruby to block [#309]
1 parent cca2baf commit 308e614

File tree

2 files changed

+38
-12
lines changed

2 files changed

+38
-12
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ const EventConverter = {
112112
this._addInput(block, 'BROADCAST_INPUT', inputBlock, shadowBlock);
113113
}
114114
break;
115+
case 'when_flag_clicked':
116+
if (args.length == 0 && rubyBlockArgs && rubyBlockArgs.length === 0 && rubyBlock) {
117+
block = this._createBlock('event_whenflagclicked', 'hat');
118+
this._setParent(rubyBlock, block);
119+
}
120+
break;
115121
}
116122
}
117123

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

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ describe('RubyToBlocksConverter/Event', () => {
2121

2222
describe('event_whenflagclicked', () => {
2323
test('normal', () => {
24-
code = 'self.when(:flag_clicked) { bounce_if_on_edge }';
2524
expected = [
2625
{
2726
opcode: 'event_whenflagclicked',
@@ -30,33 +29,53 @@ describe('RubyToBlocksConverter/Event', () => {
3029
}
3130
}
3231
];
33-
convertAndExpectToEqualBlocks(converter, target, code, expected);
32+
[
33+
'self.when(:flag_clicked) { bounce_if_on_edge }',
34+
'when_flag_clicked { bounce_if_on_edge }',
35+
'when_flag_clicked() { bounce_if_on_edge }',
36+
'self.when_flag_clicked { bounce_if_on_edge }'
37+
].forEach(code => {
38+
convertAndExpectToEqualBlocks(converter, target, code, expected);
39+
});
3440

35-
code = 'self.when(:flag_clicked) { bounce_if_on_edge; move(10) }';
3641
expected = [
3742
{
3843
opcode: 'event_whenflagclicked',
3944
next: rubyToExpected(converter, target, 'bounce_if_on_edge; move(10)')[0]
4045
}
4146
];
42-
convertAndExpectToEqualBlocks(converter, target, code, expected);
47+
[
48+
'self.when(:flag_clicked) { bounce_if_on_edge; move(10) }',
49+
'when_flag_clicked { bounce_if_on_edge; move(10) }'
50+
].forEach(code => {
51+
convertAndExpectToEqualBlocks(converter, target, code, expected);
52+
});
4353
});
4454

4555
test('hat', () => {
46-
code = `
47-
bounce_if_on_edge
48-
self.when(:flag_clicked) do
49-
end
50-
bounce_if_on_edge
51-
`;
5256
expected = [
5357
rubyToExpected(converter, target, 'bounce_if_on_edge')[0],
5458
{
5559
opcode: 'event_whenflagclicked'
5660
},
5761
rubyToExpected(converter, target, 'bounce_if_on_edge')[0]
5862
];
59-
convertAndExpectToEqualBlocks(converter, target, code, expected);
63+
[
64+
`
65+
bounce_if_on_edge
66+
self.when(:flag_clicked) do
67+
end
68+
bounce_if_on_edge
69+
`,
70+
`
71+
bounce_if_on_edge
72+
when_flag_clicked do
73+
end
74+
bounce_if_on_edge
75+
`
76+
].forEach(code => {
77+
convertAndExpectToEqualBlocks(converter, target, code, expected);
78+
});
6079
});
6180

6281
test('invalid', () => {
@@ -68,7 +87,8 @@ describe('RubyToBlocksConverter/Event', () => {
6887

6988
[
7089
'self.when(:flag_clicked, 1) { bounce_if_on_edge }',
71-
'self.when(:flag_click) { bounce_if_on_edge }'
90+
'self.when(:flag_click) { bounce_if_on_edge }',
91+
'when_flag_click { bounce_if_on_edge }'
7292
].forEach(s => {
7393
convertAndExpectRubyBlockError(converter, target, s);
7494
});

0 commit comments

Comments
 (0)