mirror of
https://github.com/vlang/v.git
synced 2025-08-03 17:57:59 -04:00
107 lines
3.4 KiB
V
107 lines
3.4 KiB
V
// vtest build: !windows
|
|
module main
|
|
|
|
import os
|
|
import arrays
|
|
|
|
const tpath = os.join_path(os.vtmp_dir(), 'vod_test_module')
|
|
|
|
fn testsuite_begin() {
|
|
os.rmdir_all(tpath) or {}
|
|
os.mkdir_all(tpath)!
|
|
os.chdir(tpath)!
|
|
}
|
|
|
|
fn testsuite_end() {
|
|
os.rmdir_all(tpath) or {}
|
|
}
|
|
|
|
fn test_trim_doc_node_description() {
|
|
mod := 'foo'
|
|
mut readme := '## Description
|
|
|
|
`foo` is a module that provides tools and utility functions to assist in working with bar.
|
|
It also assists with composing and testing baz.'
|
|
expected := 'is a module that provides tools and utility functions to assist in working with'
|
|
res := trim_doc_node_description(mod, readme).trim_space()
|
|
assert res == expected
|
|
|
|
readme = '# Foo
|
|
`foo` is a module that provides tools and utility functions to assist in working with bar.
|
|
It also assists with composing and testing baz.'
|
|
res2 := trim_doc_node_description(mod, readme).trim_space()
|
|
assert res2 == res
|
|
}
|
|
|
|
fn test_ignore_rules() {
|
|
os.write_file('.vdocignore', ['pattern1', 'pattern2', '/path1'].join_lines())!
|
|
os.mkdir('subdir')!
|
|
os.write_file(os.join_path('subdir', '.vdocignore'), ['pattern3', '/path2'].join_lines())!
|
|
rules := IgnoreRules.get('.')
|
|
assert rules.patterns['.'] == ['pattern1', 'pattern2']
|
|
assert rules.patterns['./subdir'] == ['pattern3']
|
|
assert rules.paths == {
|
|
'./path1': true
|
|
'./subdir/path2': true
|
|
}
|
|
}
|
|
|
|
fn test_get_module_list() {
|
|
// For information on leading slash rules, refer to the comments in `IgnoreRules.get`.
|
|
ignore_rules := ['bravo', '/echo', '/foxtrot/golf', 'hotel.v/', 'india/juliett']
|
|
os.write_file('.vdocignore', ignore_rules.join_lines())!
|
|
|
|
/* Create some submodules.
|
|
Modules inside `testdata` and `tests` directories and modules that
|
|
only contain `_test.v` files should be ignored by default. */
|
|
// Modules NOT to ignore.
|
|
submodules_no_ignore := [
|
|
'alpha',
|
|
'alpha_bravo', // test `bravo`
|
|
'bravo_charly', // test `bravo`
|
|
'charly',
|
|
'charly/alpha',
|
|
'charly/delta', // test `delta` in separate ignore file in `alpha`
|
|
'charly/echo', // test `/echo`
|
|
'charly/foxtrot/golf', // test `/foxtrot/golf`
|
|
'foxtrot',
|
|
'golf',
|
|
'hotel', // will include a `hotel.v` file, whose pattern is in the ignore list with a trailing slash
|
|
]
|
|
// Modules TO ignore.
|
|
submodules_to_ignore := [
|
|
'alpha/bravo', // test `bravo`
|
|
'alpha/delta', // test `delta` in separate ignore file
|
|
'alpha/india/juliett/kilo', // test `india/juliett`
|
|
'bravo', // test `bravo`
|
|
'echo', // test `/echo`
|
|
'foxtrot/golf', // test `/foxtrot/golf`
|
|
'hotel.v', // test `hotel.v/`
|
|
'tests', // test default
|
|
'testdata', // test default
|
|
'testdata/foxtrot', // test default
|
|
]
|
|
for p in arrays.append(submodules_no_ignore, submodules_to_ignore) {
|
|
os.mkdir_all(p)!
|
|
mod_name := p.all_after_last('/')
|
|
os.write_file(os.join_path(p, '${mod_name}.v'), 'module ${mod_name}')!
|
|
}
|
|
// Create a module that only contains a `_test.v` file.
|
|
os.mkdir('delta')!
|
|
os.write_file(os.join_path('delta', 'delta_test.v'), 'module delta')!
|
|
// Add a `.vdocignore` file to a submodule.
|
|
os.write_file(os.join_path('alpha', '.vdocignore'), 'delta\n')!
|
|
|
|
mod_list := get_modules(tpath)
|
|
// dump(mod_list)
|
|
assert mod_list.len == submodules_no_ignore.len
|
|
for m in submodules_no_ignore.map(os.join_path(tpath, it)) {
|
|
assert m in mod_list
|
|
}
|
|
for m in submodules_to_ignore.map(os.join_path(tpath, it)) {
|
|
assert m !in mod_list
|
|
}
|
|
// `delta` only contains a `_test.v` file.
|
|
assert !mod_list.any(it.contains(os.join_path(tpath, 'delta')))
|
|
}
|