vcreate: fix v init with project names containing dashes (#19619)

This commit is contained in:
Turiiya 2023-10-25 19:39:14 +02:00 committed by GitHub
parent f5c4864db8
commit a1063bd63d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 54 additions and 12 deletions

View file

@ -6,10 +6,10 @@ import v.vmod
// avoid clashes with the postfix `_test.v`, that V uses for its own test files.
const (
// Expect has to be installed for the test.
expect_exe = os.find_abs_path_of_executable('expect') or {
expect_exe = os.quoted_path(os.find_abs_path_of_executable('expect') or {
eprintln('skipping test, since expect is missing')
exit(0)
}
})
// Directory where the Expect scripts will create projects.
test_module_path = os.join_path(os.vtmp_dir(), 'v', 'test_vcreate_input')
// Directory that contains the Expect scripts used in the test.
@ -31,8 +31,7 @@ fn prepare_test_path() ! {
fn test_new_with_no_arg_input() {
prepare_test_path()!
project_name := 'my_project'
res := os.execute('${os.quoted_path(expect_exe)} ${os.join_path(expect_tests_path,
'new_with_no_arg.expect')} ${@VMODROOT} ${project_name}')
res := os.execute('${expect_exe} ${os.join_path(expect_tests_path, 'new_with_no_arg.expect')} ${@VMODROOT} ${project_name}')
if res.exit_code != 0 {
assert false, res.output
}
@ -53,8 +52,7 @@ fn test_new_with_no_arg_input() {
fn test_new_with_name_arg_input() {
prepare_test_path()!
project_name := 'my_other_project'
res := os.execute('${os.quoted_path(expect_exe)} ${os.join_path(expect_tests_path,
'new_with_name_arg.expect')} ${@VMODROOT} ${project_name}')
res := os.execute('${expect_exe} ${os.join_path(expect_tests_path, 'new_with_name_arg.expect')} ${@VMODROOT} ${project_name}')
if res.exit_code != 0 {
assert false, res.output
}
@ -76,8 +74,7 @@ fn test_new_with_model_arg_input() {
prepare_test_path()!
project_name := 'my_lib'
model := 'lib'
res := os.execute('${os.quoted_path(expect_exe)} ${os.join_path(expect_tests_path,
'new_with_model_arg.expect')} ${@VMODROOT} ${project_name} ${model}')
res := os.execute('${expect_exe} ${os.join_path(expect_tests_path, 'new_with_model_arg.expect')} ${@VMODROOT} ${project_name} ${model}')
if res.exit_code != 0 {
assert false, res.output
}
@ -95,6 +92,29 @@ fn test_new_with_model_arg_input() {
assert mod.license == 'MIT'
}
fn test_v_init_in_dir_with_invalid_mod_name() {
// A project with a directory name with hyphens, which is invalid for a module name.
dir_name_with_invalid_mod_name := 'my-proj'
corrected_mod_name := 'my_proj'
proj_path := os.join_path(os.vtmp_dir(), 'v', dir_name_with_invalid_mod_name)
os.mkdir_all(proj_path) or {}
os.chdir(proj_path)!
res := os.execute('${expect_exe} ${os.join_path(expect_tests_path, 'init_in_dir_with_invalid_mod_name.expect')} ${@VMODROOT} ${dir_name_with_invalid_mod_name} ${corrected_mod_name}')
if res.exit_code != 0 {
assert false, res.output
}
// Assert mod data set in `new_with_model_arg.expect`.
mod := vmod.decode(os.read_file(os.join_path(proj_path, 'v.mod')) or {
assert false, 'Failed reading v.mod of ${proj_path}'
return
}) or {
assert false, err.str()
return
}
assert mod.name == corrected_mod_name
os.rmdir_all(proj_path) or {}
}
fn testsuite_end() {
os.rmdir_all(test_module_path) or {}
}