1+ use std:: collections:: HashMap ;
12use std:: fs:: File ;
23use std:: io:: Write as _;
34
4- fn generate_test ( file : & mut File , path : & str , test_name : & str ) -> std:: io:: Result < ( ) > {
5- writeln ! ( file, "#[test]" ) ?;
6- writeln ! ( file, "fn {test_name}() {{" ) ?;
5+ struct BuiltTests {
6+ modules : HashMap < String , String >
7+ }
8+
9+ fn generate_test ( bt : & mut BuiltTests , path : & str , test_name : & str ) {
10+ let out = if let Some ( out) = bt. modules . get_mut ( path) {
11+ out
12+ }
13+ else {
14+ bt. modules . insert ( path. to_string ( ) , "" . to_string ( ) ) ;
15+ bt. modules . get_mut ( path) . unwrap ( )
16+ } ;
17+
18+ use std:: fmt:: Write ;
19+
20+ writeln ! ( out, "\t #[test]" ) . unwrap ( ) ;
21+ writeln ! ( out, "\t fn {test_name}() {{" ) . unwrap ( ) ;
722
823 // We let the generated test code actually do the concat!.
924 let exe_path = format ! ( "concat!(env!(\" CARGO_TARGET_TMPDIR\" ), \" /{test_name}\" )" ) ;
1025
11- writeln ! ( file, "\t run_integration_test(\" tests/poni/{path}{test_name}.poni\" , {exe_path});" ) ?;
12- writeln ! ( file, "}}" ) ?;
13-
14- Ok ( ( ) )
26+ writeln ! ( out, "\t \t run_integration_test(\" tests/{path}{test_name}.poni\" , {exe_path});" ) . unwrap ( ) ;
27+ writeln ! ( out, "\t }}" ) . unwrap ( ) ;
1528}
1629
1730pub fn generate ( tests_file : & mut File ) {
1831 let tests = [
1932 ( "binary/" , "binary_doubleblock" ) ,
2033 ( "binary/" , "binary_bottom" ) ,
34+ ( "binary/" , "binary_parens" ) ,
2135
2236 // print_nested: the last line is 345 because it should re-print each of the inner print()s.
2337 ( "print/" , "print_nested" ) ,
@@ -30,6 +44,9 @@ pub fn generate(tests_file: &mut File) {
3044 ( "print/" , "print_dif_funs" ) ,
3145 ( "print/" , "print_inner_return" ) ,
3246
47+ ( "print/" , "err_print_empty" ) ,
48+
49+
3350 ( "globals/" , "global_block" ) ,
3451 // TODO: Figure out precise float output format we want.
3552 ( "globals/" , "globals_3" ) ,
@@ -38,16 +55,29 @@ pub fn generate(tests_file: &mut File) {
3855 ( "globals/" , "global_increment_indirect" ) ,
3956 ( "globals/" , "global_mutate" ) ,
4057
58+ ( "globals/" , "err_global_fun_redefine" ) ,
59+ ( "globals/" , "err_global_redefine" ) ,
60+ ( "globals/" , "errTODO_bad_order" ) ,
61+
4162 ( "typecheck/" , "print_assume_int" ) ,
4263 ( "typecheck/" , "promote_assumes_inside_block" ) ,
4364 ( "typecheck/" , "promote_to_float_arithmetic" ) ,
4465 ( "typecheck/" , "promote_to_float_assign" ) ,
66+ ( "typecheck/" , "promote_to_float_block_assign_assumeint" ) ,
67+ ( "typecheck/" , "promote_to_float_block_assign" ) ,
68+ ( "typecheck/" , "promote_to_float_block_return" ) ,
69+ ( "typecheck/" , "promote_to_float_return" ) ,
4570 ( "typecheck/" , "str_types" ) ,
4671 ( "typecheck/" , "return_block_return" ) , // Make sure this one at least compiles
47- // TODO: Add other tests when we get function calls
72+
73+ ( "typecheck/" , "err_try_assign_float_for_int" ) ,
74+ ( "typecheck/" , "err_try_return_float_for_int_short" ) ,
75+ ( "typecheck/" , "err_try_return_float_for_int" ) ,
76+
4877
4978 ( "string/" , "simple_str" ) ,
5079 ( "string/" , "str_of_strbuf" ) ,
80+ ( "string/" , "very_simple_str" ) ,
5181
5282 ( "functions/" , "parse_params" ) ,
5383 ( "functions/" , "param_trailing_comma" ) ,
@@ -57,20 +87,29 @@ pub fn generate(tests_file: &mut File) {
5787 ( "functions/" , "void_fun" ) ,
5888 ( "functions/" , "fib" ) ,
5989
90+ ( "functions/" , "err_assign_to_fun" ) ,
91+
6092 ( "scope/" , "block_shadow" ) ,
6193
6294 ( "if/" , "basic_if_expr_ret" ) ,
6395 ( "if/" , "basic_if_expr_var" ) ,
6496 ( "if/" , "basic_if_expr" ) ,
6597 ( "if/" , "basic_if" ) ,
98+ ( "if/" , "if_extra_parens" ) ,
6699 ( "if/" , "if_no_else" ) ,
67100 ( "if/" , "if_no_else_in_print" ) ,
68101 ( "if/" , "if_fun_calls" ) ,
69102
103+ ( "if/" , "err_if_bad_condition" ) ,
104+ ( "if/" , "err_if_incompat_types" ) ,
105+ ( "if/" , "err_if_no_else_bad_type" ) ,
106+
70107 ( "comparison/" , "compare_basic" ) ,
71108 ( "comparison/" , "compare_constants" ) ,
72109 ( "comparison/" , "compare_doubleblock" ) ,
73110
111+ ( "lexer/" , "err_unterminated_string" ) ,
112+
74113 ( "logical/" , "basic_and" ) ,
75114 ( "logical/" , "basic_or" ) ,
76115 ( "logical/" , "short_and" ) ,
@@ -81,6 +120,17 @@ pub fn generate(tests_file: &mut File) {
81120 ( "logical/" , "short_or_expr_doubleblock" ) ,
82121 ( "logical/" , "or_bottom" ) ,
83122
123+ ( "misc/" , "complex_return_in_binop" ) ,
124+ ( "misc/" , "err_return_in_binop" ) ,
125+ ( "misc/" , "err_top_level_return" ) ,
126+ ( "misc/" , "noerr_return_in_binop" ) ,
127+ ( "misc/" , "simple_var_exprs_and_infer" ) ,
128+ ( "misc/" , "test_init" ) ,
129+ ( "misc/" , "unused_expr" ) ,
130+
131+ ( "parser/" , "err_fun_missing_brace" ) ,
132+ ( "parser/" , "err_missing_expr_paren" ) ,
133+
84134 ( "call/" , "call_captured_rev" ) ,
85135 ( "call/" , "call_captured" ) ,
86136 ( "call/" , "call_if_simple" ) ,
@@ -98,6 +148,7 @@ pub fn generate(tests_file: &mut File) {
98148 ( "call/" , "uses_fun_with_class_retval" ) ,
99149 ( "call/" , "uses_fun_with_class_param" ) ,
100150
151+ ( "classes/" , "basic_class" ) ,
101152 ( "classes/" , "basic_new_inferred_get" ) ,
102153 ( "classes/" , "basic_new_inferred_get_promote" ) ,
103154 ( "classes/" , "basic_new_explicit_get" ) ,
@@ -119,8 +170,24 @@ pub fn generate(tests_file: &mut File) {
119170 ( "classes/" , "basic_new_list" ) ,
120171 ( "classes/" , "class_member_that_is_fun" ) ,
121172 ( "classes/" , "class_member_function_capture" ) ,
173+ ( "classes/" , "noout_data_and_fun_assign" ) ,
174+ ( "classes/" , "noout_data_and_fun_read" ) ,
175+ ( "classes/" , "noout_pure_data_complex" ) ,
176+ ( "classes/" , "noout_pure_data_initializers" ) ,
177+ ( "classes/" , "noout_pure_data" ) ,
178+
179+ ( "classes/" , "err_assign_to_class" ) ,
180+ ( "classes/" , "err_get_nonexistent_member" ) ,
181+ ( "classes/" , "err_new_unknown_property" ) ,
182+ ( "classes/" , "err_new_wrong_ty_known" ) ,
183+ ( "classes/" , "err_new_wrong_ty_unknown" ) ,
184+ ( "classes/" , "err_pure_data_wrongty" ) ,
185+ ( "classes/" , "err_try_to_read_class_in_initializer" ) ,
186+ ( "classes/" , "err_weird_var" ) ,
122187
123188 ( "get/" , "get_string_length" ) ,
189+ ( "get/" , "err_get_on_int" ) ,
190+ ( "get/" , "err_get_on_string" ) ,
124191
125192 ( "set/" , "basic_set" ) ,
126193 ( "set/" , "set_bottom" ) ,
@@ -163,9 +230,21 @@ pub fn generate(tests_file: &mut File) {
163230 ( "array/" , "array_ref_semantics" ) ,
164231 ( "array/" , "array_length" ) ,
165232 ( "array/" , "array_complicated_signature" ) ,
233+ ( "array/" , "err_empty_arr_and_var" ) ,
166234 ] ;
167235
236+ let mut bt = BuiltTests {
237+ modules : HashMap :: new ( )
238+ } ;
168239 for ( path, test) in tests {
169- generate_test ( tests_file, path, test) . unwrap ( ) ;
240+ generate_test ( & mut bt, path, test) ;
241+ }
242+ for ( k, v) in & bt. modules {
243+ // get rid of slash
244+ let substr = & k[ ..k. len ( ) - 1 ] ;
245+ writeln ! ( tests_file, "mod r#{substr} {{" ) . unwrap ( ) ;
246+ writeln ! ( tests_file, "\t use crate::run_integration_test;" ) . unwrap ( ) ;
247+ writeln ! ( tests_file, "{v}" ) . unwrap ( ) ;
248+ writeln ! ( tests_file, "}}" ) . unwrap ( ) ;
170249 }
171250}
0 commit comments