2017-01-20 07:11:21 +00:00
|
|
|
#
|
|
|
|
# Copyright 2017 Dell EMC.
|
|
|
|
# All rights reserved.
|
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms, with or without
|
|
|
|
# modification, are permitted provided that the following conditions are
|
|
|
|
# met:
|
|
|
|
#
|
|
|
|
# * Redistributions of source code must retain the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer.
|
|
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
|
|
# documentation and/or other materials provided with the distribution.
|
|
|
|
#
|
|
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
#
|
|
|
|
# $FreeBSD$
|
|
|
|
#
|
|
|
|
|
|
|
|
atf_test_case inplace_hardlink_src
|
|
|
|
inplace_hardlink_src_head()
|
|
|
|
{
|
|
|
|
atf_set "descr" "Verify -i works with a symlinked source file"
|
|
|
|
}
|
|
|
|
inplace_hardlink_src_body()
|
|
|
|
{
|
|
|
|
echo foo > a
|
|
|
|
atf_check ln a b
|
|
|
|
atf_check sed -i '' -e 's,foo,bar,g' b
|
|
|
|
atf_check -o 'inline:bar\n' -s exit:0 cat b
|
2018-08-29 17:09:03 +00:00
|
|
|
atf_check -s not-exit:0 stat -q '.!'*
|
2017-01-20 07:11:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
atf_test_case inplace_symlink_src
|
|
|
|
inplace_symlink_src_head()
|
|
|
|
{
|
|
|
|
atf_set "descr" "Verify -i works with a symlinked source file"
|
|
|
|
}
|
|
|
|
inplace_symlink_src_body()
|
|
|
|
{
|
|
|
|
echo foo > a
|
|
|
|
atf_check ln -s a b
|
|
|
|
atf_check -e not-empty -s not-exit:0 sed -i '' -e 's,foo,bar,g' b
|
2018-08-29 17:09:03 +00:00
|
|
|
atf_check -s not-exit:0 stat -q '.!'*
|
|
|
|
}
|
|
|
|
|
|
|
|
atf_test_case inplace_command_q
|
|
|
|
inplace_command_q_head()
|
|
|
|
{
|
|
|
|
atf_set "descr" "Verify -i works correctly with the 'q' command"
|
|
|
|
}
|
|
|
|
inplace_command_q_body()
|
|
|
|
{
|
|
|
|
printf '1\n2\n3\n' > a
|
|
|
|
atf_check -o 'inline:1\n2\n' sed '2q' a
|
|
|
|
atf_check sed -i.bak '2q' a
|
|
|
|
atf_check -o 'inline:1\n2\n' cat a
|
|
|
|
atf_check -o 'inline:1\n2\n3\n' cat a.bak
|
|
|
|
atf_check -s not-exit:0 stat -q '.!'*
|
2017-01-20 07:11:21 +00:00
|
|
|
}
|
|
|
|
|
sed: process \r, \n, and \t
This is both reasonable and a common GNUism that a lot of ported software
expects.
Universally process \r, \n, and \t into carriage return, newline, and tab
respectively. Newline still doesn't function in contexts where it can't
(e.g. BRE), but we process it anyways rather than passing
UB \n (escaped ordinary) through to the underlying regex engine.
Adding a --posix flag to disable these was considered, but sed.1 already
declares this version of sed a super-set of POSIX specification and this
behavior is the most likely expected when one attempts to use one of these
escape sequences in pattern space.
This differs from pre-r197362 behavior in that we now honor the three
arguably most common escape sequences used with sed(1) and we do so outside
of character classes, too.
Other escape sequences, like \s and \S, will come later when GNU extensions
are added to libregex; sed will likely link against libregex by default,
since the GNU extensions tend to be fairly un-intrusive.
PR: 229925
Reviewed by: bapt, emaste, pfg
Differential Revision: https://reviews.freebsd.org/D22750
2019-12-10 19:16:00 +00:00
|
|
|
atf_test_case escape_subst
|
|
|
|
escape_subst_head()
|
|
|
|
{
|
|
|
|
atf_set "descr" "Verify functional escaping of \\n, \\r, and \\t"
|
|
|
|
}
|
|
|
|
escape_subst_body()
|
|
|
|
{
|
|
|
|
printf "a\nt\\\t\n\tb\n\t\tc\r\n" > a
|
|
|
|
tr -d '\r' < a > b
|
|
|
|
printf "a\tb c\rx\n" > c
|
|
|
|
|
|
|
|
atf_check -o 'inline:a\nt\\t\n' sed '/\t/d' a
|
|
|
|
atf_check -o 'inline:a\nt\\t\n b\n c\r\n' sed 's/\t/ /g' a
|
|
|
|
atf_check -o 'inline:a\nt\\t\n\t\tb\n\t\t\t\tc\r\n' sed 's/\t/\t\t/g' a
|
|
|
|
atf_check -o 'inline:a\nt\n\tb\n\t\tc\r\n' sed 's/\\t//g' a
|
|
|
|
atf_check -o file:b sed 's/\r//' a
|
|
|
|
atf_check -o 'inline:abcx\n' sed 's/[ \r\t]//g' c
|
|
|
|
}
|
|
|
|
|
2017-01-20 07:11:21 +00:00
|
|
|
atf_init_test_cases()
|
|
|
|
{
|
2018-08-29 17:09:03 +00:00
|
|
|
atf_add_test_case inplace_command_q
|
2017-01-20 07:11:21 +00:00
|
|
|
atf_add_test_case inplace_hardlink_src
|
|
|
|
atf_add_test_case inplace_symlink_src
|
sed: process \r, \n, and \t
This is both reasonable and a common GNUism that a lot of ported software
expects.
Universally process \r, \n, and \t into carriage return, newline, and tab
respectively. Newline still doesn't function in contexts where it can't
(e.g. BRE), but we process it anyways rather than passing
UB \n (escaped ordinary) through to the underlying regex engine.
Adding a --posix flag to disable these was considered, but sed.1 already
declares this version of sed a super-set of POSIX specification and this
behavior is the most likely expected when one attempts to use one of these
escape sequences in pattern space.
This differs from pre-r197362 behavior in that we now honor the three
arguably most common escape sequences used with sed(1) and we do so outside
of character classes, too.
Other escape sequences, like \s and \S, will come later when GNU extensions
are added to libregex; sed will likely link against libregex by default,
since the GNU extensions tend to be fairly un-intrusive.
PR: 229925
Reviewed by: bapt, emaste, pfg
Differential Revision: https://reviews.freebsd.org/D22750
2019-12-10 19:16:00 +00:00
|
|
|
atf_add_test_case escape_subst
|
2017-01-20 07:11:21 +00:00
|
|
|
}
|