@@ -931,4 +931,154 @@ void testPositionAndLengthWithLeadingZeros() {
931
931
932
932
testParseCode ();
933
933
}
934
+
935
+ @ Test
936
+ void testUlineAt () {
937
+ // ensure that the parser accepts all the following ways of using ULINE [AT] (as does ABAP syntax)
938
+
939
+ buildSrc (" DATA pos TYPE i." );
940
+ buildSrc (" DATA len TYPE i." );
941
+ buildSrc ("" );
942
+ buildSrc (" ULINE." );
943
+ buildSrc ("" );
944
+ buildSrc (" ULINE AT /." );
945
+ buildSrc (" ULINE AT /(20)." );
946
+ buildSrc (" ULINE AT /(len)." );
947
+ buildSrc (" ULINE AT /(*)." );
948
+ buildSrc (" ULINE AT /(**)." );
949
+ buildSrc ("" );
950
+ buildSrc (" ULINE AT /10." );
951
+ buildSrc (" ULINE AT /10(20)." );
952
+ buildSrc (" ULINE AT /10(len)." );
953
+ buildSrc (" ULINE AT /10(*)." );
954
+ buildSrc (" ULINE AT /10(**)." );
955
+ buildSrc ("" );
956
+ buildSrc (" ULINE AT /pos." );
957
+ buildSrc (" ULINE AT /pos(20)." );
958
+ buildSrc (" ULINE AT /pos(len)." );
959
+ buildSrc (" ULINE AT /pos(*)." );
960
+ buildSrc (" ULINE AT /pos(**)." );
961
+ buildSrc ("" );
962
+ buildSrc (" ULINE AT (20)." );
963
+ buildSrc (" ULINE AT (len)." );
964
+ buildSrc (" ULINE AT (*)." );
965
+ buildSrc (" ULINE AT (**)." );
966
+ buildSrc ("" );
967
+ buildSrc (" ULINE AT 10." );
968
+ buildSrc (" ULINE AT 10(20)." );
969
+ buildSrc (" ULINE AT 10(len)." );
970
+ buildSrc (" ULINE AT 10(*)." );
971
+ buildSrc (" ULINE AT 10(**)." );
972
+ buildSrc ("" );
973
+ buildSrc (" ULINE AT pos." );
974
+ buildSrc (" ULINE AT pos(20)." );
975
+ buildSrc (" ULINE AT pos(len)." );
976
+ buildSrc (" ULINE AT pos(*)." );
977
+ buildSrc (" ULINE AT pos(**)." );
978
+ buildSrc ("" );
979
+ buildSrc (" ULINE /." );
980
+ buildSrc (" ULINE /(20)." );
981
+ buildSrc (" ULINE /(len)." ); // warning about missing 'AT', but no syntax error
982
+ buildSrc (" ULINE /(*)." );
983
+ buildSrc (" ULINE /(**)." );
984
+ buildSrc ("" );
985
+ buildSrc (" ULINE /10." );
986
+ buildSrc (" ULINE /10(20)." );
987
+ buildSrc (" ULINE /10(len)." ); // warning about missing 'AT', but no syntax error
988
+ buildSrc (" ULINE /10(*)." );
989
+ buildSrc (" ULINE /10(**)." );
990
+ buildSrc ("" );
991
+ buildSrc (" ULINE /pos." ); // warning about missing 'AT', but no syntax error
992
+ buildSrc (" ULINE /pos(20)." ); // warning about missing 'AT', but no syntax error
993
+ buildSrc (" ULINE /pos(len)." ); // warning about missing 'AT', but no syntax error
994
+ buildSrc (" ULINE /pos(*)." ); // warning about missing 'AT', but no syntax error
995
+ buildSrc (" ULINE /pos(**)." ); // warning about missing 'AT', but no syntax error
996
+ buildSrc ("" );
997
+ buildSrc (" ULINE (20)." );
998
+ buildSrc (" ULINE (*)." );
999
+ buildSrc (" ULINE (**)." );
1000
+ buildSrc ("" );
1001
+ buildSrc (" ULINE 10." );
1002
+ buildSrc (" ULINE 10(20)." );
1003
+ buildSrc (" ULINE 10(*)." );
1004
+ buildSrc (" ULINE 10(**)." );
1005
+
1006
+ putAnyMethodAroundSrc ();
1007
+
1008
+ testParseCode ();
1009
+ }
1010
+
1011
+ @ Test
1012
+ void testWriteAt () {
1013
+ // ensure that the parser accepts all the following ways of using WRITE [AT] (as does ABAP syntax)
1014
+
1015
+ buildSrc (" DATA pos TYPE i." );
1016
+ buildSrc (" DATA len TYPE i." );
1017
+ buildSrc ("" );
1018
+ buildSrc (" WRITE AT / 'a'." );
1019
+ buildSrc (" WRITE AT /(20) 'a'." );
1020
+ buildSrc (" WRITE AT /(len) 'a'." );
1021
+ buildSrc (" WRITE AT /(*) 'a'." );
1022
+ buildSrc (" WRITE AT /(**) 'a'." );
1023
+ buildSrc ("" );
1024
+ buildSrc (" WRITE AT /10 'a'." );
1025
+ buildSrc (" WRITE AT /10(20) 'a'." );
1026
+ buildSrc (" WRITE AT /10(len) 'a'." );
1027
+ buildSrc (" WRITE AT /10(*) 'a'." );
1028
+ buildSrc (" WRITE AT /10(**) 'a'." );
1029
+ buildSrc ("" );
1030
+ buildSrc (" WRITE AT /pos 'a'." );
1031
+ buildSrc (" WRITE AT /pos(20) 'a'." );
1032
+ buildSrc (" WRITE AT /pos(len) 'a'." );
1033
+ buildSrc (" WRITE AT /pos(*) 'a'." );
1034
+ buildSrc (" WRITE AT /pos(**) 'a'." );
1035
+ buildSrc ("" );
1036
+ buildSrc (" WRITE AT (20) 'a'." );
1037
+ buildSrc (" WRITE AT (len) 'a'." );
1038
+ buildSrc (" WRITE AT (*) 'a'." );
1039
+ buildSrc (" WRITE AT (**) 'a'." );
1040
+ buildSrc ("" );
1041
+ buildSrc (" WRITE AT 10 'a'." );
1042
+ buildSrc (" WRITE AT 10(20) 'a'." );
1043
+ buildSrc (" WRITE AT 10(len) 'a'." );
1044
+ buildSrc (" WRITE AT 10(*) 'a'." );
1045
+ buildSrc (" WRITE AT 10(**) 'a'." );
1046
+ buildSrc ("" );
1047
+ buildSrc (" WRITE AT pos 'a'." );
1048
+ buildSrc (" WRITE AT pos(20) 'a'." );
1049
+ buildSrc (" WRITE AT pos(len) 'a'." );
1050
+ buildSrc (" WRITE AT pos(*) 'a'." );
1051
+ buildSrc (" WRITE AT pos(**) 'a'." );
1052
+ buildSrc ("" );
1053
+ buildSrc (" WRITE / 'a'." );
1054
+ buildSrc (" WRITE /(20) 'a'." );
1055
+ buildSrc (" WRITE /(len) 'a'." ); // warning about missing 'AT', but no syntax error
1056
+ buildSrc (" WRITE /(*) 'a'." );
1057
+ buildSrc (" WRITE /(**) 'a'." );
1058
+ buildSrc ("" );
1059
+ buildSrc (" WRITE /10 'a'." );
1060
+ buildSrc (" WRITE /10(20) 'a'." );
1061
+ buildSrc (" WRITE /10(len) 'a'." ); // warning about missing 'AT', but no syntax error
1062
+ buildSrc (" WRITE /10(*) 'a'." );
1063
+ buildSrc (" WRITE /10(**) 'a'." );
1064
+ buildSrc ("" );
1065
+ buildSrc (" WRITE /pos 'a'." ); // warning about missing 'AT', but no syntax error
1066
+ buildSrc (" WRITE /pos(20) 'a'." ); // warning about missing 'AT', but no syntax error
1067
+ buildSrc (" WRITE /pos(len) 'a'." ); // warning about missing 'AT', but no syntax error
1068
+ buildSrc (" WRITE /pos(*) 'a'." ); // warning about missing 'AT', but no syntax error
1069
+ buildSrc (" WRITE /pos(**) 'a'." ); // warning about missing 'AT', but no syntax error
1070
+ buildSrc ("" );
1071
+ buildSrc (" WRITE (20) 'a'." );
1072
+ buildSrc (" WRITE (*) 'a'." );
1073
+ buildSrc (" WRITE (**) 'a'." );
1074
+ buildSrc ("" );
1075
+ buildSrc (" WRITE 10 'a'." );
1076
+ buildSrc (" WRITE 10(20) 'a'." );
1077
+ buildSrc (" WRITE 10(*) 'a'." );
1078
+ buildSrc (" WRITE 10(**) 'a'." );
1079
+
1080
+ putAnyMethodAroundSrc ();
1081
+
1082
+ testParseCode ();
1083
+ }
934
1084
}
0 commit comments