Skip to content

Commit b222ebf

Browse files
committed
sensing_setdragmode
1 parent 00d802e commit b222ebf

File tree

3 files changed

+111
-3
lines changed

3 files changed

+111
-3
lines changed

src/lib/ruby-generator/sensing.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default function (Generator) {
5555
};
5656

5757
Generator.sensing_keyoptions = function (block) {
58-
const key = Generator.quote_(Generator.getFieldValue(block, 'KEY_OPTION') || null);
58+
const key = Generator.quote_(Generator.getFieldValue(block, 'KEY_OPTION') || '');
5959
return [key, Generator.ORDER_ATOMIC];
6060
};
6161

@@ -72,8 +72,8 @@ export default function (Generator) {
7272
};
7373

7474
Generator.sensing_setdragmode = function (block) {
75-
const mode = Generator.quote_(Generator.getFieldValue(block, 'DRAG_MODE') || null);
76-
return `set_drag_mode(${mode})\n`;
75+
const mode = Generator.quote_(Generator.getFieldValue(block, 'DRAG_MODE') || '');
76+
return `self.drag_mode = ${mode}\n`;
7777
};
7878

7979
Generator.sensing_loudness = function () {

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import {KeyOptions} from './constants';
44

55
const ColorRegexp = /^#[0-9a-fA-F]{6}$/;
66

7+
const DragMode = [
8+
'draggable',
9+
'not draggable'
10+
];
11+
712
/**
813
* Sensing converter
914
*/
@@ -75,6 +80,21 @@ const SensingConverter = {
7580
block = this._createBlock(opcode, 'value');
7681
break;
7782
}
83+
break;
84+
case 'drag_mode=':
85+
if (args.length === 1 &&
86+
((this._isString(args[0]) && DragMode.indexOf(args[0].toString()) >= 0) ||
87+
(args[0] && (args[0].type === 'true' || args[0].type === 'false')))) {
88+
block = this._createBlock('sensing_setdragmode', 'statement');
89+
let dragMode = args[0];
90+
if (dragMode.type === 'true') {
91+
dragMode = 'draggable';
92+
} else if (dragMode.type === 'false') {
93+
dragMode = 'not draggable';
94+
}
95+
this._addField(block, 'DRAG_MODE', dragMode);
96+
}
97+
break;
7898
}
7999
} else if (this._isConst(receiver)) {
80100
switch (receiver.toString()) {

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

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,94 @@ describe('RubyToBlocksConverter/Sensing', () => {
559559
expectNoArgsMethod('sensing_mousedown', 'Mouse.down?', 'value_boolean');
560560
expectNoArgsMethod('sensing_mousex', 'Mouse.x', 'value');
561561
expectNoArgsMethod('sensing_mousey', 'Mouse.y', 'value');
562+
563+
describe('sensing_setdragmode', () => {
564+
test('normal', () => {
565+
code = 'self.drag_mode = "draggable"';
566+
expected = [
567+
{
568+
opcode: 'sensing_setdragmode',
569+
fields: [
570+
{
571+
name: 'DRAG_MODE',
572+
value: 'draggable'
573+
}
574+
]
575+
}
576+
];
577+
convertAndExpectToEqualBlocks(converter, target, code, expected);
578+
579+
code = 'self.drag_mode = "not draggable"';
580+
expected = [
581+
{
582+
opcode: 'sensing_setdragmode',
583+
fields: [
584+
{
585+
name: 'DRAG_MODE',
586+
value: 'not draggable'
587+
}
588+
]
589+
}
590+
];
591+
convertAndExpectToEqualBlocks(converter, target, code, expected);
592+
});
593+
594+
test('true/false', () => {
595+
code = 'self.drag_mode = true';
596+
expected = [
597+
{
598+
opcode: 'sensing_setdragmode',
599+
fields: [
600+
{
601+
name: 'DRAG_MODE',
602+
value: 'draggable'
603+
}
604+
]
605+
}
606+
];
607+
convertAndExpectToEqualBlocks(converter, target, code, expected);
608+
609+
code = 'self.drag_mode = false';
610+
expected = [
611+
{
612+
opcode: 'sensing_setdragmode',
613+
fields: [
614+
{
615+
name: 'DRAG_MODE',
616+
value: 'not draggable'
617+
}
618+
]
619+
}
620+
];
621+
convertAndExpectToEqualBlocks(converter, target, code, expected);
622+
});
623+
624+
test('statement', () => {
625+
code = `
626+
bounce_if_on_edge
627+
self.drag_mode = "draggable"
628+
bounce_if_on_edge
629+
`;
630+
expected = [
631+
rubyToExpected(converter, target, 'bounce_if_on_edge')[0]
632+
];
633+
expected[0].next = rubyToExpected(converter, target, 'self.drag_mode = "draggable"')[0];
634+
expected[0].next.next = rubyToExpected(converter, target, 'bounce_if_on_edge')[0];
635+
convertAndExpectToEqualBlocks(converter, target, code, expected);
636+
});
637+
638+
test('invalid', () => {
639+
[
640+
'self.drag_mode',
641+
'self.drag_mode()',
642+
'self.drag_mode = "invalid"',
643+
'self.drag_mode = 1'
644+
].forEach(c => {
645+
convertAndExpectToEqualRubyStatement(converter, target, c, c);
646+
});
647+
});
648+
});
649+
562650
expectNoArgsMethod('sensing_loudness', 'loudness', 'value');
563651
expectNoArgsMethod('sensing_timer', 'Timer.value', 'value');
564652
expectNoArgsMethod('sensing_resettimer', 'Timer.reset');

0 commit comments

Comments
 (0)