v/cmd/tools/vdoc/vdoc_test.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')))
}