diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2010-09-05 14:45:38 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2010-09-05 14:47:58 +0200 |
commit | 36f774a0cd2bf8dd72b192aab93831c5ac0c58f0 (patch) | |
tree | afa0b3d247e4dd163b89b7b61f4e3e0f3143b102 /shell/hush_test | |
parent | 701e127f7d892909a58c6f3333e23588ccef9e22 (diff) | |
download | busybox-w32-36f774a0cd2bf8dd72b192aab93831c5ac0c58f0.tar.gz busybox-w32-36f774a0cd2bf8dd72b192aab93831c5ac0c58f0.tar.bz2 busybox-w32-36f774a0cd2bf8dd72b192aab93831c5ac0c58f0.zip |
hush: add support for ${var/pattern/repl}, conditional on bash compat
function old new delta
expand_vars_to_list 2386 2833 +447
expand_string_to_string 69 110 +41
parse_dollar 681 721 +40
hush_main 963 945 -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 528/-18) Total: 510 bytes
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'shell/hush_test')
-rw-r--r-- | shell/hush_test/hush-vars/var_bash1.right | 14 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var_bash1.tests | 18 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/var_bash2.right | 10 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var_bash2.tests | 24 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/var_bash3.right | 20 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var_bash3.tests | 41 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/var_bash4.right | 23 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var_bash4.tests | 47 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/var_bash5.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var_bash5.tests | 11 |
10 files changed, 212 insertions, 0 deletions
diff --git a/shell/hush_test/hush-vars/var_bash1.right b/shell/hush_test/hush-vars/var_bash1.right new file mode 100644 index 000000000..c0a07699b --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash1.right | |||
@@ -0,0 +1,14 @@ | |||
1 | |||
2 | |||
3 | f | ||
4 | bcdef | ||
5 | abcdef | ||
6 | abcdef | ||
7 | bcde | ||
8 | abcd | ||
9 | abcd | ||
10 | abcdef | ||
11 | bcdef | ||
12 | abcdef | ||
13 | abcdef | ||
14 | abcdef | ||
diff --git a/shell/hush_test/hush-vars/var_bash1.tests b/shell/hush_test/hush-vars/var_bash1.tests new file mode 100755 index 000000000..24d3c9a00 --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash1.tests | |||
@@ -0,0 +1,18 @@ | |||
1 | var=abcdef | ||
2 | |||
3 | echo ${var:7} | ||
4 | echo ${var:6} | ||
5 | echo ${var:5} | ||
6 | echo ${var:1} | ||
7 | echo ${var:0} | ||
8 | echo ${var:-1} | ||
9 | |||
10 | echo ${var:1:4} | ||
11 | echo ${var:0:4} | ||
12 | echo ${var::4} | ||
13 | echo ${var:-1:4} | ||
14 | |||
15 | echo ${var:1:7} | ||
16 | echo ${var:0:7} | ||
17 | echo ${var::7} | ||
18 | echo ${var:-1:7} | ||
diff --git a/shell/hush_test/hush-vars/var_bash2.right b/shell/hush_test/hush-vars/var_bash2.right new file mode 100644 index 000000000..acba5c6fb --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash2.right | |||
@@ -0,0 +1,10 @@ | |||
1 | abc123xcba123 | ||
2 | abx123dcba123 | ||
3 | abx123dxba123 | ||
4 | abcx23dcba123 | ||
5 | abcxxxdcbaxxx | ||
6 | abx | ||
7 | xba123 | ||
8 | abx23 | ||
9 | abc23dcba123 | ||
10 | abcdcba | ||
diff --git a/shell/hush_test/hush-vars/var_bash2.tests b/shell/hush_test/hush-vars/var_bash2.tests new file mode 100755 index 000000000..29c526cef --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash2.tests | |||
@@ -0,0 +1,24 @@ | |||
1 | var=abc123dcba123 | ||
2 | |||
3 | echo ${var/d/x} | ||
4 | echo ${var/c/x} | ||
5 | echo ${var//c/x} | ||
6 | echo ${var/[123]/x} | ||
7 | echo ${var//[123]/x} | ||
8 | echo ${var/c*/x} | ||
9 | echo ${var/*c/x} | ||
10 | |||
11 | # must match longest match: result is "abx23" | ||
12 | echo ${var/c*1/x} | ||
13 | |||
14 | # empty replacement - 2nd slash can be omitted | ||
15 | echo ${var/[123]} | ||
16 | echo ${var//[123]} | ||
17 | |||
18 | ### ash doesn't support | ||
19 | ### # match only at the beginning: | ||
20 | ### echo ${var/#a/x} | ||
21 | ### echo ${var/#b/x} # should not match | ||
22 | ### echo ${var//#b/x} # should not match | ||
23 | ### # match only at the end: | ||
24 | ### echo ${var/%3/x} | ||
diff --git a/shell/hush_test/hush-vars/var_bash3.right b/shell/hush_test/hush-vars/var_bash3.right new file mode 100644 index 000000000..a97c850ea --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash3.right | |||
@@ -0,0 +1,20 @@ | |||
1 | 1 a041#c | ||
2 | 2 a041#c | ||
3 | 3 a\041#c | ||
4 | 4 a\041#c | ||
5 | 5 a\041#c | ||
6 | 6 a\041#c | ||
7 | 7 a\041#c | ||
8 | 8 a\041#c | ||
9 | 9 a\041#c | ||
10 | 10 a\c | ||
11 | 11 a\c | ||
12 | 12 a\c | ||
13 | 13 a\\c | ||
14 | 14 a\\c | ||
15 | 15 a\\c | ||
16 | 16 a\tc | ||
17 | 17 a\tc | ||
18 | 18 a\tc | ||
19 | 19 atc | ||
20 | 20 a\tc | ||
diff --git a/shell/hush_test/hush-vars/var_bash3.tests b/shell/hush_test/hush-vars/var_bash3.tests new file mode 100755 index 000000000..146dbb6a5 --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash3.tests | |||
@@ -0,0 +1,41 @@ | |||
1 | a='abc' | ||
2 | r=${a//b/\041#} | ||
3 | echo 1 $r | ||
4 | echo 2 ${a//b/\041#} | ||
5 | echo 3 "${a//b/\041#}" | ||
6 | |||
7 | a='abc' | ||
8 | r=${a//b/\\041#} | ||
9 | echo 4 $r | ||
10 | echo 5 ${a//b/\\041#} | ||
11 | echo 6 "${a//b/\\041#}" | ||
12 | |||
13 | a='abc' | ||
14 | b='\041#' | ||
15 | r=${a//b/$b} | ||
16 | echo 7 $r | ||
17 | echo 8 ${a//b/$b} | ||
18 | echo 9 "${a//b/$b}" | ||
19 | |||
20 | a='abc' | ||
21 | b='\' | ||
22 | r="${a//b/$b}" | ||
23 | echo 10 $r | ||
24 | echo 11 ${a//b/$b} | ||
25 | echo 12 "${a//b/$b}" | ||
26 | |||
27 | a='abc' | ||
28 | b='\\' | ||
29 | r="${a//b/$b}" | ||
30 | echo 13 $r | ||
31 | echo 14 ${a//b/$b} | ||
32 | echo 15 "${a//b/$b}" | ||
33 | |||
34 | a='abc' | ||
35 | b='\t' | ||
36 | r="${a//b/$b}" | ||
37 | echo 16 $r | ||
38 | echo 17 ${a//b/$b} | ||
39 | echo 18 "${a//b/$b}" | ||
40 | echo 19 ${a//b/\t} | ||
41 | echo 20 "${a//b/\t}" | ||
diff --git a/shell/hush_test/hush-vars/var_bash4.right b/shell/hush_test/hush-vars/var_bash4.right new file mode 100644 index 000000000..600e8532f --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash4.right | |||
@@ -0,0 +1,23 @@ | |||
1 | Source: a*b\*c | ||
2 | Replace str: _\\_\z_ | ||
3 | Pattern: single backslash and star: "replace literal star" | ||
4 | In assignment: a_\_z_b\*c | ||
5 | Unquoted: a_\_z_b\*c | ||
6 | Quoted: a_\_\z_b\*c | ||
7 | Pattern: double backslash and star: "replace backslash and everything after it" | ||
8 | In assignment: a*b_\_z_ | ||
9 | Unquoted: a*b_\_z_ | ||
10 | Quoted: a*b_\_\z_ | ||
11 | |||
12 | Source: a\bc | ||
13 | Replace str: _\\_\z_ | ||
14 | Pattern: single backslash and b: "replace b" | ||
15 | In assignment: a\_\_z_c | ||
16 | Unquoted: a\_\_z_c | ||
17 | Quoted: a\_\_\z_c | ||
18 | Pattern: double backslash and b: "replace backslash and b" | ||
19 | In assignment: a_\_z_c | ||
20 | Unquoted: a_\_z_c | ||
21 | Quoted: a_\_\z_c | ||
22 | |||
23 | Done: 0 | ||
diff --git a/shell/hush_test/hush-vars/var_bash4.tests b/shell/hush_test/hush-vars/var_bash4.tests new file mode 100755 index 000000000..d5470614b --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash4.tests | |||
@@ -0,0 +1,47 @@ | |||
1 | # This testcase demonstrates that backslashes are treated differently | ||
2 | # in 1st and 2nd parts of ${var/search/repl}: | ||
3 | # if quoted ("${var/search/repl}"), and repl contains \a (a non-special char), | ||
4 | # the backslash in repl stays; if unquoted, backslash is removed. | ||
5 | # But search part does not act like that: \a is always converted to just a, | ||
6 | # even in quotes. | ||
7 | # | ||
8 | # bash4 (and probably bash3 too): "Quoted:" results are different from | ||
9 | # unquoted and assignment expansions - they have a backslash before z. | ||
10 | |||
11 | v='a*b\*c' | ||
12 | echo 'Source: ' "$v" | ||
13 | echo 'Replace str: ' '_\\_\z_' | ||
14 | |||
15 | echo 'Pattern: ' 'single backslash and star: "replace literal star"' | ||
16 | r=${v/\*/_\\_\z_} | ||
17 | echo 'In assignment:' "$r" | ||
18 | echo 'Unquoted: ' ${v/\*/_\\_\z_} | ||
19 | echo 'Quoted: ' "${v/\*/_\\_\z_}" | ||
20 | |||
21 | echo 'Pattern: ' 'double backslash and star: "replace backslash and everything after it"' | ||
22 | r=${v/\\*/_\\_\z_} | ||
23 | echo 'In assignment:' "$r" | ||
24 | echo 'Unquoted: ' ${v/\\*/_\\_\z_} | ||
25 | echo 'Quoted: ' "${v/\\*/_\\_\z_}" | ||
26 | |||
27 | echo | ||
28 | |||
29 | v='a\bc' | ||
30 | echo 'Source: ' "$v" | ||
31 | echo 'Replace str: ' '_\\_\z_' | ||
32 | |||
33 | echo 'Pattern: ' 'single backslash and b: "replace b"' | ||
34 | r=${v/\b/_\\_\z_} | ||
35 | echo 'In assignment:' "$r" | ||
36 | echo 'Unquoted: ' ${v/\b/_\\_\z_} | ||
37 | echo 'Quoted: ' "${v/\b/_\\_\z_}" | ||
38 | |||
39 | echo 'Pattern: ' 'double backslash and b: "replace backslash and b"' | ||
40 | r=${v/\\b/_\\_\z_} | ||
41 | echo 'In assignment:' "$r" | ||
42 | echo 'Unquoted: ' ${v/\\b/_\\_\z_} | ||
43 | echo 'Quoted: ' "${v/\\b/_\\_\z_}" | ||
44 | |||
45 | echo | ||
46 | |||
47 | echo Done: $? | ||
diff --git a/shell/hush_test/hush-vars/var_bash5.right b/shell/hush_test/hush-vars/var_bash5.right new file mode 100644 index 000000000..278ed3228 --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash5.right | |||
@@ -0,0 +1,4 @@ | |||
1 | a/ | ||
2 | a/d | ||
3 | a/e/f | ||
4 | Done: 0 | ||
diff --git a/shell/hush_test/hush-vars/var_bash5.tests b/shell/hush_test/hush-vars/var_bash5.tests new file mode 100755 index 000000000..7f482a554 --- /dev/null +++ b/shell/hush_test/hush-vars/var_bash5.tests | |||
@@ -0,0 +1,11 @@ | |||
1 | # This testcase checks whether slashes in ${v/a/b} are parsed before | ||
2 | # or after expansions | ||
3 | |||
4 | v='a/b/c' | ||
5 | s='b/c' | ||
6 | r='e/f' | ||
7 | echo "${v/$s}" | ||
8 | echo "${v/$s/d}" | ||
9 | echo "${v/$s/$r}" | ||
10 | |||
11 | echo Done: $? | ||