Skip to content
This repository was archived by the owner on May 18, 2026. It is now read-only.

Commit 00f3528

Browse files
authored
Merge pull request #524 from smalruby/fix/issue-20-microbit-more-display
feat: add Ruby support for MicrobitMore display block
2 parents eda6319 + 5a0147b commit 00f3528

4 files changed

Lines changed: 86 additions & 1 deletion

File tree

src/lib/ruby-generator/microbit_more.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ export default function (Generator) {
111111
return `microbit_more.display_pattern(${matrix})\n`;
112112
};
113113

114+
Generator.microbitMore_display = function (block) {
115+
const text = Generator.valueToCode(block, 'TEXT', Generator.ORDER_NONE) || Generator.quote_('Hello!');
116+
return `microbit_more.display_text(${text})\n`;
117+
};
118+
114119
Generator.microbitMore_displayText = function (block) {
115120
const text = Generator.valueToCode(block, 'TEXT', Generator.ORDER_NONE) || Generator.quote_('Hello!');
116121
const delay = Generator.valueToCode(block, 'DELAY', Generator.ORDER_NONE) || 120;

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,16 @@ const MicrobitMoreConverter = {
358358
return block;
359359
});
360360

361+
converter.registerOnSend(MicrobitMore, 'display_text', 1, params => {
362+
const {receiver, args} = params;
363+
364+
if (!converter.isStringOrBlock(args[0])) return null;
365+
366+
const block = converter.changeRubyExpressionBlock(receiver, 'microbitMore_display', 'statement');
367+
converter.addTextInput(block, 'TEXT', args[0], 'Hello!');
368+
return block;
369+
});
370+
361371
converter.registerOnSend(MicrobitMore, 'display_text_delay', 2, params => {
362372
const {receiver, args} = params;
363373

test/unit/lib/ruby-generator/microbit_more.test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,37 @@ describe('RubyGenerator/MicrobitMore', () => {
100100
const expected = 'microbit_more.when("tilted_front") do\n';
101101
expect(RubyGenerator.microbitMore_whenGesture(block)).toEqual(expected);
102102
});
103+
104+
test('microbitMore_display', () => {
105+
const block = {
106+
opcode: 'microbitMore_display',
107+
inputs: {
108+
TEXT: {
109+
name: 'TEXT'
110+
}
111+
}
112+
};
113+
RubyGenerator.valueToCode = jest.fn().mockReturnValue('"Hello!"');
114+
const expected = 'microbit_more.display_text("Hello!")\n';
115+
expect(RubyGenerator.microbitMore_display(block)).toEqual(expected);
116+
});
117+
118+
test('microbitMore_displayText', () => {
119+
const block = {
120+
opcode: 'microbitMore_displayText',
121+
inputs: {
122+
TEXT: {
123+
name: 'TEXT'
124+
},
125+
DELAY: {
126+
name: 'DELAY'
127+
}
128+
}
129+
};
130+
RubyGenerator.valueToCode = jest.fn()
131+
.mockReturnValueOnce('"Hello!"')
132+
.mockReturnValueOnce('120');
133+
const expected = 'microbit_more.display_text_delay("Hello!", 120)\n';
134+
expect(RubyGenerator.microbitMore_displayText(block)).toEqual(expected);
135+
});
103136
});

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

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import RubyToBlocksConverter from '../../../../src/lib/ruby-to-blocks-converter';
22
import {
33
convertAndExpectToEqualBlocks,
4-
rubyToExpected
4+
rubyToExpected,
5+
expectedInfo
56
} from '../../../helpers/expect-to-equal-blocks';
67

78
describe('RubyToBlocksConverter/MicrobitMore', () => {
@@ -131,4 +132,40 @@ describe('RubyToBlocksConverter/MicrobitMore', () => {
131132
];
132133
convertAndExpectToEqualBlocks(converter, target, code, expected);
133134
});
135+
136+
test('microbit_more.display_text', () => {
137+
code = 'microbit_more.display_text("Hello!")';
138+
expected = [
139+
{
140+
opcode: 'microbitMore_display',
141+
inputs: [
142+
{
143+
name: 'TEXT',
144+
block: expectedInfo.makeText('Hello!')
145+
}
146+
]
147+
}
148+
];
149+
convertAndExpectToEqualBlocks(converter, target, code, expected);
150+
});
151+
152+
test('microbit_more.display_text_delay', () => {
153+
code = 'microbit_more.display_text_delay("Hello!", 120)';
154+
expected = [
155+
{
156+
opcode: 'microbitMore_displayText',
157+
inputs: [
158+
{
159+
name: 'TEXT',
160+
block: expectedInfo.makeText('Hello!')
161+
},
162+
{
163+
name: 'DELAY',
164+
block: expectedInfo.makeNumber(120)
165+
}
166+
]
167+
}
168+
];
169+
convertAndExpectToEqualBlocks(converter, target, code, expected);
170+
});
134171
});

0 commit comments

Comments
 (0)