fix os_test.v

pull/3804/head
yuyi 2020-02-21 19:24:13 +08:00 committed by GitHub
parent d90a291c5e
commit 527377dc86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 39 additions and 21 deletions

View File

@ -1069,6 +1069,12 @@ fn test_hello() {
All test functions have to be placed in `*_test.v` files and begin with `test_`. All test functions have to be placed in `*_test.v` files and begin with `test_`.
You can also define a special test function: `testsuite_begin`, which will be
run *before* all other test functions in a `_test.v` file.
You can also define a special test function: `testsuite_end`, which will be
run *after* all other test functions in a `_test.v` file.
To run the tests do `v hello_test.v`. To run the tests do `v hello_test.v`.
To test an entire module, do `v test mymodule`. To test an entire module, do `v test mymodule`.

View File

@ -819,11 +819,28 @@ fn (t &Table) main_exists() bool {
} }
fn (t &Table) all_test_function_names() []string { fn (t &Table) all_test_function_names() []string {
mut res := []string mut fn_begin_test_name := ''
mut fn_end_test_name := ''
mut fn_test_names := []string
for _, f in t.fns { for _, f in t.fns {
if f.name.contains('__test_') { if f.name.contains('__test_') {
res << f.name fn_test_names << f.name
} }
else if f.name.contains('__testsuite_begin') {
fn_begin_test_name = f.name
}
else if f.name.contains('__testsuite_end') {
fn_end_test_name = f.name
}
}
mut res := []string
if fn_begin_test_name.len > 0 {
res << fn_begin_test_name
}
res << fn_test_names
if fn_end_test_name.len > 0 {
res << fn_end_test_name
} }
return res return res
} }
@ -1142,4 +1159,3 @@ fn type_cat_str(tc TypeCategory) string {
'unknown'}} 'unknown'}}
return tc_str return tc_str
} }

View File

@ -624,7 +624,7 @@ pub fn rmdir(path string) {
pub fn rmdir_recursive(path string) { pub fn rmdir_recursive(path string) {
items := os.ls(path) or { items := os.ls(path) or {
panic(err) return
} }
for item in items { for item in items {
if os.is_dir(filepath.join(path,item)) { if os.is_dir(filepath.join(path,item)) {
@ -637,7 +637,7 @@ pub fn rmdir_recursive(path string) {
pub fn is_dir_empty(path string) bool { pub fn is_dir_empty(path string) bool {
items := os.ls(path) or { items := os.ls(path) or {
panic(err) return true
} }
return items.len == 0 return items.len == 0
} }

View File

@ -1,9 +1,14 @@
import os import (
import filepath os
filepath
)
fn test_aaa_setup(){ fn testsuite_begin() {
cleanup_leftovers()
}
fn testsuite_end() {
cleanup_leftovers() cleanup_leftovers()
assert true
} }
fn test_setenv() { fn test_setenv() {
@ -240,11 +245,6 @@ fn test_make_symlink_check_is_link_and_remove_symlink() {
// } // }
//} //}
fn test_zzz_cleanup(){
cleanup_leftovers() assert true
}
fn test_symlink() { fn test_symlink() {
$if windows { return } $if windows { return }
os.mkdir('symlink') or { panic(err) } os.mkdir('symlink') or { panic(err) }
@ -285,18 +285,14 @@ fn test_is_executable_writable_readable() {
// this function is called by both test_aaa_setup & test_zzz_cleanup // this function is called by both test_aaa_setup & test_zzz_cleanup
// it ensures that os tests do not polute the filesystem with leftover // it ensures that os tests do not polute the filesystem with leftover
// files so that they can be run several times in a row. // files so that they can be run several times in a row.
fn cleanup_leftovers(){ fn cleanup_leftovers() {
// possible leftovers from test_cp // possible leftovers from test_cp
os.rm('cp_example.txt') os.rm('cp_example.txt')
os.rm('cp_new_example.txt') os.rm('cp_new_example.txt')
// possible leftovers from test_cp_r // possible leftovers from test_cp_r
os.rm('ex/ex2/ex2.txt') os.rmdir_recursive('ex')
os.rmdir('ex/ex2') os.rmdir_recursive('ex2')
os.rm('ex/ex1.txt')
os.rmdir('ex')
os.rm('ex2/ex2.txt')
os.rmdir('ex2')
os.rm('ex1.txt') os.rm('ex1.txt')
os.rm('ex2.txt') os.rm('ex2.txt')
} }