Skip to content

Commit 769397e

Browse files
committed
fix: smalrubot and boost ruby to block
1 parent af1a399 commit 769397e

18 files changed

+971
-3
lines changed

src/lib/ruby-generator/boost.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default function (Generator) {
4646

4747
Generator.boost_setMotorDirection = function (block) {
4848
const motorid = Generator.valueToCode(block, 'MOTOR_ID', Generator.ORDER_NONE) || null;
49-
const motordirection = Generator.valueToCode(block, 'MOTOR_DIRECTION') || null;
49+
const motordirection = Generator.valueToCode(block, 'MOTOR_DIRECTION', Generator.ORDER_NONE) || null;
5050
return `boost_motor_set_direction_for(${motorid}, ${motordirection})\n`;
5151
};
5252

src/lib/ruby-generator/smalrubot_s1.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,10 @@ export default function (Generator) {
6161
return `smalrubot_s1.set_motor_speed(${position}, ${speed})\n`;
6262
};
6363

64+
Generator.smalrubotS1_setArmCalibration = function (block) {
65+
const degree = Generator.valueToCode(block, 'DEGREE', Generator.ORDER_NONE) || 0;
66+
return `smalrubot_s1.arm_calibration = ${degree}\n`;
67+
};
68+
6469
return Generator;
6570
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ const BoostConverter = {
8787
break;
8888
case 'boost_seeing_color?':
8989
if (args.length === 1 && this._isStringOrBlock(args[0])) {
90-
block = this._createBlock('boost_seeingColor', 'boolean');
90+
block = this._createBlock('boost_seeingColor', 'value_boolean');
9191
this._addInput(
9292
block,
9393
'COLOR',

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ const POSITIONS = [
1919
const SENSOR_POSITIONS = [
2020
'left',
2121
'right',
22-
'touch'
22+
'touch',
23+
'light',
24+
'sound'
2325
];
2426

2527
/**
@@ -105,6 +107,14 @@ const SmalrubotS1Converter = {
105107
this._addNumberInput(block, 'SPEED', 'math_number', args[1], 100);
106108
}
107109
break;
110+
case 'arm_calibration=':
111+
if (args.length === 1 && this._isNumberOrBlock(args[0])) {
112+
block = this._changeRubyExpressionBlock(
113+
receiver, 'smalrubotS1_setArmCalibration', 'statement'
114+
);
115+
this._addNumberInput(block, 'DEGREE', 'math_number', args[0], 0);
116+
}
117+
break;
108118
}
109119
}
110120
return block;
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import dedent from 'dedent';
2+
import SeleniumHelper from '../../helpers/selenium-helper';
3+
import RubyHelper from '../../helpers/ruby-helper';
4+
5+
const seleniumHelper = new SeleniumHelper();
6+
const {
7+
getDriver,
8+
loadUri,
9+
urlFor
10+
} = seleniumHelper;
11+
12+
const rubyHelper = new RubyHelper(seleniumHelper);
13+
const {
14+
expectInterconvertBetweenCodeAndRuby
15+
} = rubyHelper;
16+
17+
let driver;
18+
19+
describe('Ruby Tab: Go Direct Force & Acceleration extension blocks', () => {
20+
beforeAll(() => {
21+
driver = getDriver();
22+
});
23+
24+
afterAll(async () => {
25+
await driver.quit();
26+
});
27+
28+
test('Ruby -> Code -> Ruby', async () => {
29+
await loadUri(urlFor('/'));
30+
31+
const code = dedent`
32+
self.when(:gdx_for_gesture, "shaken") do
33+
end
34+
35+
self.when(:gdx_for_gesture, "started falling") do
36+
end
37+
38+
self.when(:gdx_for_gesture, "turned face up") do
39+
end
40+
41+
self.when(:gdx_for_gesture, "turned face down") do
42+
end
43+
44+
self.when(:gdx_force_sensor, "pushed") do
45+
end
46+
47+
self.when(:gdx_force_sensor, "pulled") do
48+
end
49+
50+
gdx_for_force
51+
52+
self.when(:gdx_for_tilted, "any") do
53+
end
54+
55+
self.when(:gdx_for_tilted, "front") do
56+
end
57+
58+
self.when(:gdx_for_tilted, "back") do
59+
end
60+
61+
self.when(:gdx_for_tilted, "left") do
62+
end
63+
64+
self.when(:gdx_for_tilted, "right") do
65+
end
66+
67+
gdx_for_tilted?("any")
68+
69+
gdx_for_tilt_angle("front")
70+
71+
gdx_for_falling?
72+
73+
gdx_for_spin_speed("z")
74+
75+
gdx_for_spin_speed("x")
76+
77+
gdx_for_spin_speed("y")
78+
79+
gdx_for_acceleration("x")
80+
`;
81+
await expectInterconvertBetweenCodeAndRuby(code);
82+
});
83+
});
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import dedent from 'dedent';
2+
import SeleniumHelper from '../../helpers/selenium-helper';
3+
import RubyHelper from '../../helpers/ruby-helper';
4+
5+
const seleniumHelper = new SeleniumHelper();
6+
const {
7+
getDriver,
8+
loadUri,
9+
urlFor
10+
} = seleniumHelper;
11+
12+
const rubyHelper = new RubyHelper(seleniumHelper);
13+
const {
14+
expectInterconvertBetweenCodeAndRuby
15+
} = rubyHelper;
16+
17+
let driver;
18+
19+
describe('Ruby Tab: LEGO BOOST extension blocks', () => {
20+
beforeAll(() => {
21+
driver = getDriver();
22+
});
23+
24+
afterAll(async () => {
25+
await driver.quit();
26+
});
27+
28+
test('Ruby -> Code -> Ruby', async () => {
29+
await loadUri(urlFor('/'));
30+
31+
const code = dedent`
32+
boost_motor_turn_on_for("A", 1)
33+
boost_motor_turn_on_for("B", 1)
34+
boost_motor_turn_on_for("C", 1)
35+
boost_motor_turn_on_for("D", 1)
36+
boost_motor_turn_on_for("AB", 1)
37+
boost_motor_turn_on_for("ABCD", 1)
38+
boost_motor_turn_this_way_for("A", 1)
39+
boost_motor_turn_on_for("A")
40+
boost_motor_turn_off_for("A")
41+
boost_motor_set_power_for("ABCD", 100)
42+
boost_motor_set_direction_for("A", "this way")
43+
boost_motor_set_direction_for("A", "that way")
44+
boost_motor_set_direction_for("A", "reverse")
45+
46+
boost_motor_get_position("A")
47+
48+
self.when(:boost_color, "any") do
49+
end
50+
51+
self.when(:boost_color, "red") do
52+
end
53+
54+
self.when(:boost_color, "blue") do
55+
end
56+
57+
self.when(:boost_color, "green") do
58+
end
59+
60+
self.when(:boost_color, "yellow") do
61+
end
62+
63+
self.when(:boost_color, "white") do
64+
end
65+
66+
self.when(:boost_color, "black") do
67+
end
68+
69+
boost_seeing_color?("any")
70+
71+
self.when(:boost_tilted, "any") do
72+
end
73+
74+
self.when(:boost_tilted, "up") do
75+
end
76+
77+
self.when(:boost_tilted, "down") do
78+
end
79+
80+
self.when(:boost_tilted, "left") do
81+
end
82+
83+
self.when(:boost_tilted, "right") do
84+
end
85+
86+
boost_get_tilt_angle("up")
87+
88+
boost_set_light_color(50)
89+
`;
90+
await expectInterconvertBetweenCodeAndRuby(code);
91+
});
92+
});
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import dedent from 'dedent';
2+
import SeleniumHelper from '../../helpers/selenium-helper';
3+
import RubyHelper from '../../helpers/ruby-helper';
4+
5+
const seleniumHelper = new SeleniumHelper();
6+
const {
7+
getDriver,
8+
loadUri,
9+
urlFor
10+
} = seleniumHelper;
11+
12+
const rubyHelper = new RubyHelper(seleniumHelper);
13+
const {
14+
expectInterconvertBetweenCodeAndRuby
15+
} = rubyHelper;
16+
17+
let driver;
18+
19+
describe('Ruby Tab: LEGO Education WeDo 2.0 extension blocks', () => {
20+
beforeAll(() => {
21+
driver = getDriver();
22+
});
23+
24+
afterAll(async () => {
25+
await driver.quit();
26+
});
27+
28+
// not implemented Ruby to Code yet
29+
test.skip('Ruby -> Code -> Ruby', async () => {
30+
await loadUri(urlFor('/'));
31+
32+
const code = dedent`
33+
wedo2_turn_motor_on_for("motor", 1)
34+
wedo2_turn_motor_on_for("motor A", 1)
35+
wedo2_turn_motor_on_for("motor B", 1)
36+
wedo2_turn_motor_on_for("all motors", 1)
37+
wedo2_trun_motor_on("motor")
38+
wedo2_trun_motor_off("motor")
39+
wedo2_set_motor_power("motor", 100)
40+
wedo2_set_motor_direction("motor", "this way")
41+
wedo2_set_motor_direction("motor", "that way")
42+
wedo2_set_motor_direction("motor", "reverse")
43+
wedo2_set_light_color(50)
44+
45+
self.when(:wedo2_distance, "<", 50) do
46+
end
47+
48+
self.when(:wedo2_distance, ">", 50) do
49+
end
50+
51+
self.when(:wedo2_tilted, "any") do
52+
end
53+
54+
self.when(:wedo2_tilted, "up") do
55+
end
56+
57+
self.when(:wedo2_tilted, "down") do
58+
end
59+
60+
self.when(:wedo2_tilted, "left") do
61+
end
62+
63+
self.when(:wedo2_tilted, "right") do
64+
end
65+
66+
wedo2_distance
67+
68+
wedo2_tilted("any")
69+
70+
wedo2_tilt_angle("up")
71+
`;
72+
await expectInterconvertBetweenCodeAndRuby(code);
73+
});
74+
});
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import dedent from 'dedent';
2+
import SeleniumHelper from '../../helpers/selenium-helper';
3+
import RubyHelper from '../../helpers/ruby-helper';
4+
5+
const seleniumHelper = new SeleniumHelper();
6+
const {
7+
getDriver,
8+
loadUri,
9+
urlFor
10+
} = seleniumHelper;
11+
12+
const rubyHelper = new RubyHelper(seleniumHelper);
13+
const {
14+
expectInterconvertBetweenCodeAndRuby
15+
} = rubyHelper;
16+
17+
let driver;
18+
19+
describe('Ruby Tab: LEGO MINDSTORMS EV3 extension blocks', () => {
20+
beforeAll(() => {
21+
driver = getDriver();
22+
});
23+
24+
afterAll(async () => {
25+
await driver.quit();
26+
});
27+
28+
test('Ruby -> Code -> Ruby', async () => {
29+
await loadUri(urlFor('/'));
30+
31+
const code = dedent`
32+
ev3_motor_turn_this_way_for("A", 1)
33+
ev3_motor_turn_this_way_for("B", 1)
34+
ev3_motor_turn_this_way_for("C", 1)
35+
ev3_motor_turn_this_way_for("D", 1)
36+
ev3_motor_turn_that_way_for("A", 1)
37+
ev3_motor_set_power("A", 100)
38+
39+
ev3_motor_position("A")
40+
41+
self.when(:ev3_button_pressed, "1") do
42+
end
43+
44+
self.when(:ev3_button_pressed, "2") do
45+
end
46+
47+
self.when(:ev3_button_pressed, "3") do
48+
end
49+
50+
self.when(:ev3_button_pressed, "4") do
51+
end
52+
53+
self.when(:ev3_distance_gt, 5) do
54+
end
55+
56+
self.when(:ev3_brightness_gt, 50) do
57+
end
58+
59+
ev3_button_pressed?("1")
60+
61+
ev3_distance
62+
63+
ev3_brightness
64+
65+
ev3_beep_note(60, 0.5)
66+
`;
67+
await expectInterconvertBetweenCodeAndRuby(code);
68+
});
69+
});

0 commit comments

Comments
 (0)