Skip to content

Commit 81af1ce

Browse files
committed
fixed test.
1 parent 01f1346 commit 81af1ce

File tree

13 files changed

+112
-208
lines changed

13 files changed

+112
-208
lines changed

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,6 @@ class RubyToBlocksConverter {
109109
}
110110
blocks.forEach(block => {
111111
if (this._isBlock(block)) {
112-
if (this._isRubyBlock(block)) {
113-
throw new RubyToBlocksConverterError(
114-
block.node,
115-
`could not convert ${block.opcode}: ${this._getSource(block.node)}`
116-
);
117-
}
118112
block.topLevel = true;
119113
} else if (block instanceof Primitive) {
120114
throw new RubyToBlocksConverterError(
@@ -125,6 +119,15 @@ class RubyToBlocksConverter {
125119
throw new Error(`invalid block: ${block}`);
126120
}
127121
});
122+
Object.keys(this._context.blocks).forEach(blockId => {
123+
const block = this._context.blocks[blockId];
124+
if (this._isRubyBlock(block)) {
125+
throw new RubyToBlocksConverterError(
126+
block.node,
127+
`could not convert ${block.opcode}: ${this._getSource(block.node)}`
128+
);
129+
}
130+
});
128131
return true;
129132
} catch (e) {
130133
let error;

test/helpers/expect-to-equal-blocks.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,12 @@ const convertAndExpectToEqualBlocks = function (converter, target, code, expecte
231231
expect(res).toBeTruthy();
232232
};
233233

234+
const convertAndExpectRubyBlockError = function (converter, target, code) {
235+
converter.targetCodeToBlocks(target, code);
236+
expect(converter.errors).toHaveLength(1);
237+
expect(converter.errors[0].text).toMatch(/ could not convert ruby_/);
238+
};
239+
234240
const expectToEqualRubyStatement = function (converter, expectedStatement) {
235241
const expected = [
236242
{
@@ -495,7 +501,7 @@ const expectNoArgsMethod = function (opcode, methodName, blockType = 'statement'
495501
`${methodName}("backdrop2")`,
496502
`${methodName}(x)`
497503
].forEach(c => {
498-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
504+
convertAndExpectRubyBlockError(converter, target, c);
499505
});
500506
});
501507
});
@@ -505,6 +511,7 @@ export {
505511
toJson,
506512
expectToEqualBlocks,
507513
convertAndExpectToEqualBlocks,
514+
convertAndExpectRubyBlockError,
508515
expectToEqualRubyStatement,
509516
convertAndExpectToEqualRubyStatement,
510517
rubyToExpected,

test/helpers/selenium-helper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class SeleniumHelper {
106106

107107
notExistsByXpath (xpath) {
108108
return this.driver.findElements(By.xpath(xpath))
109-
.then(elements => elements.length == 0 || elements.every(i => !i.isDisplayed()));
109+
.then(elements => elements.length === 0 || elements.every(i => !i.isDisplayed()));
110110
}
111111

112112
loadUri (uri) {

test/integration/removed-trademarks.test.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@ import SeleniumHelper from '../helpers/selenium-helper';
44
const {
55
clickText,
66
clickXpath,
7-
findByText,
87
findByXpath,
98
notExistsByXpath,
109
getDriver,
1110
getLogs,
12-
loadUri,
13-
rightClickText,
14-
scope
11+
loadUri
1512
} = new SeleniumHelper();
1613

1714
const uri = path.resolve(__dirname, '../../build/index.html');
@@ -45,7 +42,7 @@ describe('Removed trademarks (ex: Scratch Cat)', () => {
4542
await clickXpath('//button[@aria-label="Choose a Sprite"]');
4643
const searchElement = await findByXpath("//input[@placeholder='Search']");
4744

48-
for (let name of trademarkNames) {
45+
for (const name of trademarkNames) {
4946
searchElement.clear();
5047
await searchElement.sendKeys(name);
5148
await new Promise(resolve => setTimeout(resolve, 500));
@@ -62,7 +59,7 @@ describe('Removed trademarks (ex: Scratch Cat)', () => {
6259
await clickXpath('//button[@aria-label="Choose a Costume"]');
6360
const searchElement = await findByXpath("//input[@placeholder='Search']");
6461

65-
for (let name of trademarkNames) {
62+
for (const name of trademarkNames) {
6663
searchElement.clear();
6764
const costumePrefix = `${name}-`;
6865
await searchElement.sendKeys(costumePrefix);

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

Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import RubyToBlocksConverter from '../../../../src/lib/ruby-to-blocks-converter';
22
import {
33
convertAndExpectToEqualBlocks,
4-
convertAndExpectToEqualRubyStatement,
4+
convertAndExpectRubyBlockError,
55
rubyToExpected,
66
expectedInfo
77
} from '../../../helpers/expect-to-equal-blocks';
@@ -78,7 +78,7 @@ describe('RubyToBlocksConverter/Control', () => {
7878
'sleep("abc")',
7979
'sleep(1, 2)'
8080
].forEach(c => {
81-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
81+
convertAndExpectRubyBlockError(converter, target, c);
8282
});
8383
});
8484
});
@@ -165,7 +165,7 @@ describe('RubyToBlocksConverter/Control', () => {
165165
'10.times',
166166
'10.times(1)'
167167
].forEach(c => {
168-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
168+
convertAndExpectRubyBlockError(converter, target, c);
169169
});
170170

171171
[
@@ -174,12 +174,7 @@ describe('RubyToBlocksConverter/Control', () => {
174174
'10.times { |i| wait }',
175175
'"10".times { wait }'
176176
].forEach(c => {
177-
const res = converter.targetCodeToBlocks(target, c);
178-
expect(converter.errors).toHaveLength(0);
179-
const scriptIds = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel);
180-
expect(scriptIds).toHaveLength(1);
181-
expect(converter.blocks[scriptIds[0]]).toHaveProperty('opcode', 'ruby_statement_with_block');
182-
expect(res).toBeTruthy();
177+
convertAndExpectRubyBlockError(converter, target, c);
183178
});
184179
});
185180

@@ -265,19 +260,14 @@ describe('RubyToBlocksConverter/Control', () => {
265260
'repeat(10)',
266261
'repeat(10, 1)'
267262
].forEach(c => {
268-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
263+
convertAndExpectRubyBlockError(converter, target, c);
269264
});
270265

271266
[
272267
'repeat(10) { |i| }',
273268
'repeat("10") { }'
274269
].forEach(c => {
275-
const res = converter.targetCodeToBlocks(target, c);
276-
expect(converter.errors).toHaveLength(0);
277-
const scriptIds = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel);
278-
expect(scriptIds).toHaveLength(1);
279-
expect(converter.blocks[scriptIds[0]]).toHaveProperty('opcode', 'ruby_statement_with_block');
280-
expect(res).toBeTruthy();
270+
convertAndExpectRubyBlockError(converter, target, c);
281271
});
282272
});
283273
});
@@ -367,15 +357,7 @@ describe('RubyToBlocksConverter/Control', () => {
367357
convertAndExpectToEqualBlocks(converter, target, code, expected);
368358

369359
code = 'forever { wait }';
370-
expected = [
371-
{
372-
opcode: 'control_forever',
373-
branches: [
374-
rubyToExpected(converter, target, 'wait')[0]
375-
]
376-
}
377-
];
378-
convertAndExpectToEqualBlocks(converter, target, code, expected);
360+
convertAndExpectRubyBlockError(converter, target, code);
379361
});
380362

381363
test('invalid', () => {
@@ -385,7 +367,7 @@ describe('RubyToBlocksConverter/Control', () => {
385367
'forever()',
386368
'forever(1)'
387369
].forEach(s => {
388-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
370+
convertAndExpectRubyBlockError(converter, target, s);
389371
});
390372

391373
[
@@ -395,9 +377,7 @@ describe('RubyToBlocksConverter/Control', () => {
395377
'forever(1) { bounce_if_on_edge }',
396378
'forever(1) { |a| bounce_if_on_edge }'
397379
].forEach(s => {
398-
expect(converter.targetCodeToBlocks(target, s)).toBeTruthy();
399-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
400-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
380+
convertAndExpectRubyBlockError(converter, target, s);
401381
});
402382
});
403383
});
@@ -994,7 +974,7 @@ describe('RubyToBlocksConverter/Control', () => {
994974
'stop("invalid option")',
995975
'stop("all", 1)'
996976
].forEach(s => {
997-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
977+
convertAndExpectRubyBlockError(converter, target, s);
998978
});
999979
});
1000980
});
@@ -1033,7 +1013,7 @@ describe('RubyToBlocksConverter/Control', () => {
10331013
'create_clone(move(10))',
10341014
'create_clone("_myself_", 1)'
10351015
].forEach(s => {
1036-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
1016+
convertAndExpectRubyBlockError(converter, target, s);
10371017
});
10381018
});
10391019
});
@@ -1062,7 +1042,7 @@ describe('RubyToBlocksConverter/Control', () => {
10621042
'12.delete_this_clone',
10631043
'delete_this_clone(1)'
10641044
].forEach(s => {
1065-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
1045+
convertAndExpectRubyBlockError(converter, target, s);
10661046
});
10671047
});
10681048
});
@@ -1113,15 +1093,13 @@ describe('RubyToBlocksConverter/Control', () => {
11131093
'self.when(:start_as_a_clone)',
11141094
'self.when(:start_as_a_clone, 1)'
11151095
].forEach(s => {
1116-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
1096+
convertAndExpectRubyBlockError(converter, target, s);
11171097
});
11181098

11191099
[
11201100
'12.when(:start_as_a_clone) {}'
11211101
].forEach(s => {
1122-
expect(converter.targetCodeToBlocks(target, s)).toBeTruthy();
1123-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
1124-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
1102+
convertAndExpectRubyBlockError(converter, target, s);
11251103
});
11261104
});
11271105
});

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

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import RubyToBlocksConverter from '../../../../src/lib/ruby-to-blocks-converter';
22
import {
33
convertAndExpectToEqualBlocks,
4-
convertAndExpectToEqualRubyStatement,
4+
convertAndExpectRubyBlockError,
55
rubyToExpected,
66
expectedInfo
77
} from '../../../helpers/expect-to-equal-blocks';
@@ -63,16 +63,14 @@ describe('RubyToBlocksConverter/Event', () => {
6363
[
6464
'self.when(:flag_clicked)'
6565
].forEach(s => {
66-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
66+
convertAndExpectRubyBlockError(converter, target, s);
6767
});
6868

6969
[
7070
'self.when(:flag_clicked, 1) { bounce_if_on_edge }',
7171
'self.when(:flag_click) { bounce_if_on_edge }'
7272
].forEach(s => {
73-
expect(converter.targetCodeToBlocks(target, s)).toBeTruthy();
74-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
75-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
73+
convertAndExpectRubyBlockError(converter, target, s);
7674
});
7775
});
7876

@@ -155,17 +153,15 @@ describe('RubyToBlocksConverter/Event', () => {
155153
'self.when(:key_pressed, "space", 1)',
156154
'self.when(:key_pressed, "invalid key")'
157155
].forEach(c => {
158-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
156+
convertAndExpectRubyBlockError(converter, target, c);
159157
});
160158

161159
[
162160
'self.when(:key_pressed) { bounce_if_on_edge }',
163161
'self.when(:key_pressed, "space", 1) { bounce_if_on_edge }',
164162
'self.when(:key_pressed, "invalid key") { bounce_if_on_edge }'
165163
].forEach(c => {
166-
expect(converter.targetCodeToBlocks(target, c)).toBeTruthy();
167-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
168-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
164+
convertAndExpectRubyBlockError(converter, target, c);
169165
});
170166
});
171167

@@ -251,16 +247,14 @@ describe('RubyToBlocksConverter/Event', () => {
251247
[
252248
'self.when(:clicked)'
253249
].forEach(s => {
254-
convertAndExpectToEqualRubyStatement(converter, target, s, s);
250+
convertAndExpectRubyBlockError(converter, target, s);
255251
});
256252

257253
[
258254
'self.when(:clicked, 1) { bounce_if_on_edge }',
259255
'self.when(:click) { bounce_if_on_edge }'
260256
].forEach(s => {
261-
expect(converter.targetCodeToBlocks(target, s)).toBeTruthy();
262-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
263-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
257+
convertAndExpectRubyBlockError(converter, target, s);
264258
});
265259
});
266260

@@ -343,16 +337,14 @@ describe('RubyToBlocksConverter/Event', () => {
343337
'self.when("backdrop1")',
344338
'self.when(:backdrop_switches, "backdrop1", 1)'
345339
].forEach(c => {
346-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
340+
convertAndExpectRubyBlockError(converter, target, c);
347341
});
348342

349343
[
350344
'self.when(:backdrop_switches) { bounce_if_on_edge }',
351345
'self.when(:backdrop_switches, "backdrop1", 1) { bounce_if_on_edge }'
352346
].forEach(c => {
353-
expect(converter.targetCodeToBlocks(target, c)).toBeTruthy();
354-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
355-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
347+
convertAndExpectRubyBlockError(converter, target, c);
356348
});
357349
});
358350

@@ -517,7 +509,7 @@ describe('RubyToBlocksConverter/Event', () => {
517509
'self.when(:greater_than, "loudness")',
518510
'self.when(:greater_than, "loudness", 10, 11)'
519511
].forEach(c => {
520-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
512+
convertAndExpectRubyBlockError(converter, target, c);
521513
});
522514

523515
[
@@ -526,9 +518,7 @@ describe('RubyToBlocksConverter/Event', () => {
526518
'self.when(:greater_than, "invalid", 10) { bounce_if_on_edge }',
527519
'self.when(:greater_than, "loudness", 10, 11) { bounce_if_on_edge }'
528520
].forEach(c => {
529-
expect(converter.targetCodeToBlocks(target, c)).toBeTruthy();
530-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
531-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
521+
convertAndExpectRubyBlockError(converter, target, c);
532522
});
533523
});
534524

@@ -624,16 +614,14 @@ describe('RubyToBlocksConverter/Event', () => {
624614
'self.when("message1")',
625615
'self.when(:receive, "message1")'
626616
].forEach(c => {
627-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
617+
convertAndExpectRubyBlockError(converter, target, c);
628618
});
629619

630620
[
631621
'self.when(:receive) { bounce_if_on_edge }',
632622
'self.when(:receive, "message1", 1) { bounce_if_on_edge }'
633623
].forEach(c => {
634-
expect(converter.targetCodeToBlocks(target, c)).toBeTruthy();
635-
const blockId = Object.keys(converter.blocks).filter(id => converter.blocks[id].topLevel)[0];
636-
expect(converter.blocks[blockId].opcode).toEqual('ruby_statement_with_block');
624+
convertAndExpectRubyBlockError(converter, target, c);
637625
});
638626
});
639627

@@ -732,7 +720,7 @@ describe('RubyToBlocksConverter/Event', () => {
732720
`${info.methodName}(1)`,
733721
`${info.methodName}("message1", 1)`
734722
].forEach(c => {
735-
convertAndExpectToEqualRubyStatement(converter, target, c, c);
723+
convertAndExpectRubyBlockError(converter, target, c);
736724
});
737725
});
738726
});

0 commit comments

Comments
 (0)