Skip to content

Commit d321faf

Browse files
committed
added test for self.x += <n>, self.y += <n>.
1 parent e7a35f8 commit d321faf

File tree

3 files changed

+197
-172
lines changed

3 files changed

+197
-172
lines changed

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -987,21 +987,22 @@ class RubyToBlocksConverter {
987987
if (this._isBlock(lh)) {
988988
switch (lh.opcode) {
989989
case 'motion_xposition':
990-
case 'motion_yposition': {
991-
delete this._context.blocks[lh.id];
990+
case 'motion_yposition':
991+
if (this._isNumberOrBlock(rh)) {
992+
delete this._context.blocks[lh.id];
992993

993-
let xy;
994-
if (lh.opcode === 'motion_xposition') {
995-
xy = 'x';
996-
} else {
997-
xy = 'y';
998-
}
994+
let xy;
995+
if (lh.opcode === 'motion_xposition') {
996+
xy = 'x';
997+
} else {
998+
xy = 'y';
999+
}
9991000

1000-
block = this._createBlock(`motion_change${xy}by`, 'statement');
1001-
this._addInput(block, `D${_.toUpper(xy)}`, this._createNumberBlock('math_number', rh, block.id));
1001+
block = this._createBlock(`motion_change${xy}by`, 'statement');
1002+
this._addInput(block, `D${_.toUpper(xy)}`, this._createNumberBlock('math_number', rh, block.id));
1003+
}
10021004
break;
10031005
}
1004-
}
10051006
} else if (_.isString(lh)) {
10061007
const variable = this._findOrCreateVariable(lh);
10071008
if (variable.scope !== 'local') {

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@ const expectToEqualRubyStatement = function (converter, expectedStatement) {
152152
expectToEqualBlocks(converter, expected);
153153
};
154154

155+
const convertAndExpectToEqualRubyStatement = function (converter, target, code, expectedStatement) {
156+
const res = converter.targetCodeToBlocks(target, code);
157+
expect(converter.errors).toHaveLength(0);
158+
expectToEqualRubyStatement(converter, expectedStatement);
159+
expect(res).toBeTruthy();
160+
};
161+
155162
const fieldsToExpected = function (fields) {
156163
if (!fields) {
157164
return null;
@@ -261,13 +268,24 @@ const expectedInfo = {
261268
}
262269
],
263270
shadow: true
271+
}),
272+
makeNumber: (num, opcode = 'math_number') => ({
273+
opcode: opcode,
274+
fields: [
275+
{
276+
name: 'NUM',
277+
value: num
278+
}
279+
],
280+
shadow: true
264281
})
265282
};
266283

267284
export {
268285
expectToEqualBlocks,
269286
convertAndExpectToEqualBlocks,
270287
expectToEqualRubyStatement,
288+
convertAndExpectToEqualRubyStatement,
271289
rubyToExpected,
272290
expectedInfo
273291
};

0 commit comments

Comments
 (0)