vdoc: cleanup get_module_list, add unit tests (#21057)

This commit is contained in:
Turiiya 2024-04-18 20:47:51 +02:00 committed by GitHub
parent 604eb6517f
commit a6087d01a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 61 additions and 38 deletions

View File

@ -26,19 +26,6 @@ fn get_ignore_paths(path string) ![]string {
return res.map(it.replace('/', os.path_separator))
}
fn is_included(path string, ignore_paths []string) bool {
if path == '' {
return true
}
for ignore_path in ignore_paths {
if !path.contains(ignore_path) {
continue
}
return false
}
return true
}
fn get_modules_list(opath string, ignore_paths2 []string) []string {
path := opath.trim_right('/\\')
names := os.ls(path) or { return [] }
@ -46,15 +33,11 @@ fn get_modules_list(opath string, ignore_paths2 []string) []string {
ignore_paths << ignore_paths2
mut dirs := map[string]int{}
for name in names {
if name == 'testdata' {
continue
}
if name == 'tests' {
if name in ['testdata', 'tests'] {
continue
}
fpath := os.join_path(path, name)
fmeta := os.inode(fpath)
if fmeta.typ == .directory && is_included(fpath, ignore_paths) {
if os.is_dir(fpath) && !ignore_paths.any(fpath.contains(it)) {
current_ignore_paths := ignore_paths.filter(it.starts_with(fpath))
for k in get_modules_list(fpath, current_ignore_paths) {
dirs[k]++

View File

@ -1,18 +0,0 @@
module main
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
}

View File

@ -0,0 +1,58 @@
module main
import os
import arrays
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_get_module_list() {
tpath := os.join_path(os.vtmp_dir(), 'vod_test_module')
os.rmdir_all(tpath) or {}
os.mkdir_all(tpath)!
defer {
os.rmdir_all(tpath) or {}
}
os.chdir(tpath)!
/* Create some submodules.
Modules inside `testdata` and `tests` directories and modules that
only contain `_test.v` files should be ignored by default. */
submodules_no_ignore := ['alpha', 'charly', 'charly/alpha']
submodules_to_ignore := ['alpha/bravo', 'bravo', 'tests', 'testdata', 'testdata/echo']
for p in arrays.append(submodules_no_ignore, submodules_to_ignore) {
os.mkdir(p)!
mod_name := p.all_after('/')
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')!
os.write_file('.vdocignore', 'bravo\nalpha/bravo\n')!
ignore_paths := get_ignore_paths(tpath)!
assert os.join_path(tpath, 'bravo') in ignore_paths
assert os.join_path(tpath, 'alpha/bravo') in ignore_paths
// Only `bravo` modules are part of `.vdocignore`. Ensure that no others are ignored.
assert ignore_paths.all(it.contains('bravo'))
// `get_modules_list` uses `get_ignore_paths` internally.
mod_list := get_modules_list(tpath, []string{})
assert mod_list.len == submodules_no_ignore.len
assert mod_list.all(it.contains('alpha') || it.contains('charly')), mod_list.str()
}

View File

@ -84,7 +84,7 @@ const essential_list = [
]
const skip_test_files = [
'do_not_remove',
'cmd/tools/vdoc/utils_test.v', // markdown not installed
'cmd/tools/vdoc/vdoc_test.v', // markdown not installed
'vlib/context/deadline_test.v', // sometimes blocks
'vlib/context/onecontext/onecontext_test.v', // backtrace_symbols is missing
'vlib/db/mysql/mysql_orm_test.v', // mysql not installed