mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
tests: fix input tests with expect
, not covering false negatives (#19518)
This commit is contained in:
parent
a1c16a76be
commit
c4ee940047
15 changed files with 124 additions and 43 deletions
8
.github/workflows/linux_ci.yml
vendored
8
.github/workflows/linux_ci.yml
vendored
|
@ -99,13 +99,9 @@ jobs:
|
|||
./v3 version
|
||||
./v3 -o tetris -usecache examples/tetris/tetris.v
|
||||
- name: Test password input
|
||||
run: |
|
||||
./v examples/password
|
||||
./v examples/password/password_ci.vsh
|
||||
run: ./v test examples/password/
|
||||
- name: Test readline
|
||||
run: |
|
||||
./v examples/readline/readline_ci.v
|
||||
./v examples/readline/readline.vsh
|
||||
run: ./v test examples/readline/
|
||||
|
||||
ubuntu-tcc-boehm-gc:
|
||||
runs-on: ubuntu-20.04
|
||||
|
|
8
.github/workflows/macos_ci.yml
vendored
8
.github/workflows/macos_ci.yml
vendored
|
@ -113,10 +113,6 @@ jobs:
|
|||
run: |
|
||||
./v -o v2 -parallel-cc cmd/v
|
||||
- name: Test password input
|
||||
run: |
|
||||
./v examples/password
|
||||
./v examples/password/password_ci.vsh
|
||||
run: ./v test examples/password/
|
||||
- name: Test readline
|
||||
run: |
|
||||
./v examples/readline/readline_ci.v
|
||||
./v examples/readline/readline.vsh
|
||||
run: ./v test examples/readline/
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
#!/usr/bin/expect
|
||||
spawn ./password
|
||||
expect "Enter your password : "
|
||||
send "Sample\r"
|
||||
expect "Confirm password : "
|
||||
send "Sample\r"
|
||||
expect "Password confirmed! You entered: Sample ."
|
||||
expect eof
|
|
@ -1,8 +0,0 @@
|
|||
#!/usr/bin/expect
|
||||
spawn ./password
|
||||
expect "Enter your password : "
|
||||
send "Sample123\r"
|
||||
expect "Confirm password : "
|
||||
send "Sample234\r"
|
||||
expect "Passwords do not match ."
|
||||
expect eof
|
|
@ -1,3 +0,0 @@
|
|||
chdir('examples/password')!
|
||||
assert execute('./correct.expect').exit_code == 0
|
||||
assert execute('./incorrect.expect').exit_code == 0
|
27
examples/password/password_test.v
Normal file
27
examples/password/password_test.v
Normal file
|
@ -0,0 +1,27 @@
|
|||
import os
|
||||
|
||||
const (
|
||||
// Expect has to be installed for the test.
|
||||
expect_exe = os.find_abs_path_of_executable('expect') or {
|
||||
eprintln('skipping test, since expect is missing')
|
||||
exit(0)
|
||||
}
|
||||
// Directory that contains the Expect scripts used in the test.
|
||||
expect_tests_path = os.join_path(@VMODROOT, 'examples', 'password', 'tests')
|
||||
)
|
||||
|
||||
fn test_password_input() {
|
||||
correct := os.execute(os.join_path(expect_tests_path, 'correct.expect'))
|
||||
assert correct.exit_code == 0, correct.output
|
||||
|
||||
incorrect := os.execute(os.join_path(expect_tests_path, 'incorrect.expect'))
|
||||
assert incorrect.exit_code == 0, incorrect.output
|
||||
|
||||
expected_out := 'Enter your password : '
|
||||
mut res := os.execute('${os.join_path(expect_tests_path, 'output_from_expect_arg.expect')} "${expected_out}"')
|
||||
assert res.exit_code == 0, res.output
|
||||
|
||||
not_exptectd_out := 'Enter your passwords : '
|
||||
res = os.execute('${os.join_path(expect_tests_path, 'output_from_expect_arg.expect')} "${not_exptectd_out}"')
|
||||
assert res.exit_code == 1, res.output
|
||||
}
|
12
examples/password/tests/correct.expect
Executable file
12
examples/password/tests/correct.expect
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/expect
|
||||
|
||||
set timeout 3
|
||||
set v_root [exec sh -c "git rev-parse --show-toplevel"]
|
||||
|
||||
spawn $v_root/v run $v_root/examples/password/password.v
|
||||
|
||||
expect "Enter your password : " { send "Sample\r" } timeout { exit 1 }
|
||||
expect "Confirm password : " { send "Sample\r" } timeout { exit 1 }
|
||||
expect "Password confirmed! You entered: Sample ." {} timeout { exit 1 }
|
||||
|
||||
expect eof
|
12
examples/password/tests/incorrect.expect
Executable file
12
examples/password/tests/incorrect.expect
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/expect
|
||||
|
||||
set timeout 3
|
||||
set v_root [exec sh -c "git rev-parse --show-toplevel"]
|
||||
|
||||
spawn $v_root/v run $v_root/examples/password/password.v
|
||||
|
||||
expect "Enter your password : " { send "Sample123\r" } timeout { exit 1 }
|
||||
expect "Confirm password : " { send "Sample234\r" } timeout { exit 1 }
|
||||
expect "Passwords do not match ." {} timeout { exit 1 }
|
||||
|
||||
expect eof
|
12
examples/password/tests/output_from_expect_arg.expect
Executable file
12
examples/password/tests/output_from_expect_arg.expect
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/expect
|
||||
|
||||
set timeout 3
|
||||
set v_root [exec sh -c "git rev-parse --show-toplevel"]
|
||||
# Send expected output as arg to re-use the script for testing incorrect values.
|
||||
set expect_ [lindex $argv 0]
|
||||
|
||||
spawn $v_root/v run $v_root/examples/password/password.v
|
||||
|
||||
expect $expect_ {} timeout { exit 1 }
|
||||
|
||||
expect eof
|
|
@ -1,9 +0,0 @@
|
|||
#!/usr/bin/expect
|
||||
spawn ./readline_ci
|
||||
send "a"
|
||||
expect "got 97"
|
||||
send "1"
|
||||
expect "got 49"
|
||||
send "q"
|
||||
expect "Goodbye."
|
||||
expect eof
|
|
@ -8,9 +8,10 @@ fn main() {
|
|||
|
||||
fn run() ! {
|
||||
$if windows {
|
||||
eprintln('skipping test on windows for now')
|
||||
eprintln('skipping on Windows, since raw mode and read_char are not yet implemented.')
|
||||
return
|
||||
} $else {
|
||||
// Explicit comptime block for other OSes than Windows is required to not break compilation on Windows.
|
||||
mut r := readline.Readline{}
|
||||
r.enable_raw_mode_nosig()
|
||||
defer {
|
|
@ -1,2 +0,0 @@
|
|||
chdir('examples/readline')!
|
||||
assert execute('./correct.expect').exit_code == 0
|
26
examples/readline/readline_test.v
Normal file
26
examples/readline/readline_test.v
Normal file
|
@ -0,0 +1,26 @@
|
|||
import os
|
||||
|
||||
const (
|
||||
// Expect has to be installed for the test.
|
||||
expect_exe = os.find_abs_path_of_executable('expect') or {
|
||||
eprintln('skipping test, since expect is missing')
|
||||
exit(0)
|
||||
}
|
||||
// Directory that contains the Expect scripts used in the test.
|
||||
expect_tests_path = os.join_path(@VMODROOT, 'examples', 'readline', 'tests')
|
||||
)
|
||||
|
||||
fn test_password_input() {
|
||||
correct := os.execute(os.join_path(expect_tests_path, 'readline.expect'))
|
||||
assert correct.exit_code == 0, correct.output
|
||||
|
||||
send_a := 'a'
|
||||
expect_a := 'got 97' // readline output for `a`
|
||||
a_res := os.execute('${os.join_path(expect_tests_path, 'readline_from_expect_arg.expect')} ${send_a} "${expect_a}"')
|
||||
assert a_res.exit_code == 0, a_res.output
|
||||
|
||||
send_b := 'b'
|
||||
b_res := os.execute('${os.join_path(expect_tests_path, 'readline_from_expect_arg.expect')} ${send_b} "${expect_a}"')
|
||||
assert b_res.exit_code == 1, b_res.output
|
||||
assert b_res.output.contains('got 98')
|
||||
}
|
15
examples/readline/tests/readline.expect
Executable file
15
examples/readline/tests/readline.expect
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/expect
|
||||
|
||||
set timeout 3
|
||||
set v_root [exec sh -c "git rev-parse --show-toplevel"]
|
||||
|
||||
spawn $v_root/v run $v_root/examples/readline/readline.v
|
||||
|
||||
send "a"
|
||||
expect "got 97" {} timeout { exit 1 }
|
||||
send "1"
|
||||
expect "got 49" {} timeout { exit 1 }
|
||||
send "q"
|
||||
expect "Goodbye." {} timeout { exit 1 }
|
||||
|
||||
expect eof
|
14
examples/readline/tests/readline_from_expect_arg.expect
Executable file
14
examples/readline/tests/readline_from_expect_arg.expect
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/expect
|
||||
|
||||
set timeout 3
|
||||
set v_root [exec sh -c "git rev-parse --show-toplevel"]
|
||||
# Use input arguments for send and expect.
|
||||
set send_ [lindex $argv 0]
|
||||
set expect_ [lindex $argv 1]
|
||||
|
||||
spawn $v_root/v run $v_root/examples/readline/readline.v
|
||||
|
||||
send $send_
|
||||
expect $expect_ {} timeout { exit 1 }
|
||||
|
||||
expect eof
|
Loading…
Add table
Add a link
Reference in a new issue