tests: vfmt test for all vlib/v files
							parent
							
								
									2344c1a435
								
							
						
					
					
						commit
						57ea9bec30
					
				| 
						 | 
					@ -23,7 +23,9 @@ fn test_fmt() {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	vroot := os.dir(vexe)
 | 
						vroot := os.dir(vexe)
 | 
				
			||||||
	tmpfolder := os.temp_dir()
 | 
						tmpfolder := os.temp_dir()
 | 
				
			||||||
	diff_cmd := util.find_working_diff_command() or { '' }
 | 
						diff_cmd := util.find_working_diff_command() or {
 | 
				
			||||||
 | 
							''
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	mut fmt_bench := benchmark.new_benchmark()
 | 
						mut fmt_bench := benchmark.new_benchmark()
 | 
				
			||||||
	keep_input_files := os.walk_ext('$vroot/vlib/v/fmt/tests', '_keep.vv')
 | 
						keep_input_files := os.walk_ext('$vroot/vlib/v/fmt/tests', '_keep.vv')
 | 
				
			||||||
	expected_input_files := os.walk_ext('$vroot/vlib/v/fmt/tests', '_expected.vv')
 | 
						expected_input_files := os.walk_ext('$vroot/vlib/v/fmt/tests', '_expected.vv')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,71 @@
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import term
 | 
				
			||||||
 | 
					import benchmark
 | 
				
			||||||
 | 
					import v.ast
 | 
				
			||||||
 | 
					import v.fmt
 | 
				
			||||||
 | 
					import v.parser
 | 
				
			||||||
 | 
					import v.table
 | 
				
			||||||
 | 
					import v.pref
 | 
				
			||||||
 | 
					import v.util
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						error_missing_vexe = 1
 | 
				
			||||||
 | 
						error_failed_tests = 2
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn test_vlib_fmt() {
 | 
				
			||||||
 | 
						$if !freebsd {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fmt_message := "checking that all V source files are vfmt'ed"
 | 
				
			||||||
 | 
						eprintln(term.header(fmt_message, '-'))
 | 
				
			||||||
 | 
						vexe := os.getenv('VEXE')
 | 
				
			||||||
 | 
						if vexe.len == 0 || !os.exists(vexe) {
 | 
				
			||||||
 | 
							eprintln('VEXE must be set')
 | 
				
			||||||
 | 
							exit(error_missing_vexe)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						vroot := os.dir(vexe)
 | 
				
			||||||
 | 
						tmpfolder := os.temp_dir()
 | 
				
			||||||
 | 
						diff_cmd := util.find_working_diff_command() or {
 | 
				
			||||||
 | 
							''
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						mut fmt_bench := benchmark.new_benchmark()
 | 
				
			||||||
 | 
						input_files := os.walk_ext('$vroot/vlib/v/', '.v')
 | 
				
			||||||
 | 
						fmt_bench.set_total_expected_steps(input_files.len)
 | 
				
			||||||
 | 
						for istep, ipath in input_files {
 | 
				
			||||||
 | 
							fmt_bench.cstep = istep
 | 
				
			||||||
 | 
							fmt_bench.step()
 | 
				
			||||||
 | 
							ifilename := os.file_name(ipath)
 | 
				
			||||||
 | 
							opath := ipath
 | 
				
			||||||
 | 
							expected_ocontent := os.read_file(opath) or {
 | 
				
			||||||
 | 
								fmt_bench.fail()
 | 
				
			||||||
 | 
								eprintln(fmt_bench.step_message_fail('cannot read from ${opath}'))
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							table := table.new_table()
 | 
				
			||||||
 | 
							file_ast := parser.parse_file(ipath, table, .parse_comments, &pref.Preferences{}, &ast.Scope{
 | 
				
			||||||
 | 
								parent: 0
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							result_ocontent := fmt.fmt(file_ast, table, false)
 | 
				
			||||||
 | 
							if expected_ocontent != result_ocontent {
 | 
				
			||||||
 | 
								fmt_bench.fail()
 | 
				
			||||||
 | 
								eprintln(fmt_bench.step_message_fail('file ${ipath} after formatting, does not look as expected.'))
 | 
				
			||||||
 | 
								if diff_cmd == '' {
 | 
				
			||||||
 | 
									eprintln('>> sorry, but no working "diff" CLI command can be found')
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								vfmt_result_file := os.join_path(tmpfolder, 'vfmt_run_over_${ifilename}')
 | 
				
			||||||
 | 
								os.write_file(vfmt_result_file, result_ocontent)
 | 
				
			||||||
 | 
								eprintln(util.color_compare_files(diff_cmd, opath, vfmt_result_file))
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fmt_bench.ok()
 | 
				
			||||||
 | 
							eprintln(fmt_bench.step_message_ok('${ipath}'))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fmt_bench.stop()
 | 
				
			||||||
 | 
						eprintln(term.h_divider('-'))
 | 
				
			||||||
 | 
						eprintln(fmt_bench.total_message(fmt_message))
 | 
				
			||||||
 | 
						if fmt_bench.nfail > 0 {
 | 
				
			||||||
 | 
							exit(error_failed_tests)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue