@@ -649,6 +649,122 @@ describe('RubyToBlocksConverter/Control', () => {
649
649
convertAndExpectToEqualBlocks ( converter , target , code , expected ) ;
650
650
} ) ;
651
651
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
+
652
768
test ( 'error' , ( ) => {
653
769
code = `
654
770
if move(10)
0 commit comments