Skip to content

Commit 326e63d

Browse files
committed
supported empty else. fixed and add test.
1 parent dc7c381 commit 326e63d

File tree

2 files changed

+117
-1
lines changed

2 files changed

+117
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ class RubyToBlocksConverter {
10011001
const cond = this._processCondition(node.children[0]);
10021002
const statement = this._processStatement(node.children[1]);
10031003
let elseStatement;
1004-
if (node.children[2] !== Opal.nil) {
1004+
if (node.children[2] !== Opal.nil || node.$loc().$else() !== Opal.nil) {
10051005
elseStatement = this._processStatement(node.children[2]);
10061006
}
10071007

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

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,122 @@ describe('RubyToBlocksConverter/Control', () => {
649649
convertAndExpectToEqualBlocks(converter, target, code, expected);
650650
});
651651

652+
test('unless', () => {
653+
code = `
654+
unless touching?("_edge_")
655+
bounce_if_on_edge
656+
else
657+
move(10)
658+
end
659+
`;
660+
expected = [
661+
{
662+
opcode: 'control_if_else',
663+
inputs: [
664+
{
665+
name: 'CONDITION',
666+
block: rubyToExpected(converter, target, 'touching?("_edge_")')[0]
667+
}
668+
],
669+
branches: [
670+
rubyToExpected(converter, target, 'move(10)')[0],
671+
rubyToExpected(converter, target, 'bounce_if_on_edge')[0]
672+
]
673+
}
674+
];
675+
convertAndExpectToEqualBlocks(converter, target, code, expected);
676+
677+
code = `
678+
unless touching?("_edge_")
679+
bounce_if_on_edge
680+
bounce_if_on_edge
681+
else
682+
move(10)
683+
move(10)
684+
end
685+
`;
686+
expected = [
687+
{
688+
opcode: 'control_if_else',
689+
inputs: [
690+
{
691+
name: 'CONDITION',
692+
block: rubyToExpected(converter, target, 'touching?("_edge_")')[0]
693+
}
694+
],
695+
branches: [
696+
rubyToExpected(converter, target, 'move(10); move(10)')[0],
697+
rubyToExpected(converter, target, 'bounce_if_on_edge; bounce_if_on_edge')[0]
698+
]
699+
}
700+
];
701+
convertAndExpectToEqualBlocks(converter, target, code, expected);
702+
703+
code = `
704+
unless touching?("_edge_")
705+
else
706+
move(10)
707+
end
708+
`;
709+
expected = [
710+
{
711+
opcode: 'control_if_else',
712+
inputs: [
713+
{
714+
name: 'CONDITION',
715+
block: rubyToExpected(converter, target, 'touching?("_edge_")')[0]
716+
}
717+
],
718+
branches: [
719+
rubyToExpected(converter, target, 'move(10)')[0]
720+
]
721+
}
722+
];
723+
convertAndExpectToEqualBlocks(converter, target, code, expected);
724+
725+
code = `
726+
unless touching?("_edge_")
727+
bounce_if_on_edge
728+
else
729+
end
730+
`;
731+
expected = [
732+
{
733+
opcode: 'control_if_else',
734+
inputs: [
735+
{
736+
name: 'CONDITION',
737+
block: rubyToExpected(converter, target, 'touching?("_edge_")')[0]
738+
}
739+
],
740+
branches: [
741+
null,
742+
rubyToExpected(converter, target, 'bounce_if_on_edge')[0]
743+
]
744+
}
745+
];
746+
convertAndExpectToEqualBlocks(converter, target, code, expected);
747+
748+
code = `
749+
unless touching?("_edge_")
750+
else
751+
end
752+
`;
753+
expected = [
754+
{
755+
opcode: 'control_if_else',
756+
inputs: [
757+
{
758+
name: 'CONDITION',
759+
block: rubyToExpected(converter, target, 'touching?("_edge_")')[0]
760+
}
761+
],
762+
branches: []
763+
}
764+
];
765+
convertAndExpectToEqualBlocks(converter, target, code, expected);
766+
});
767+
652768
test('error', () => {
653769
code = `
654770
if move(10)

0 commit comments

Comments
 (0)