From 3889078dbe09a9d85b359e9c0c0c225e0bbea343 Mon Sep 17 00:00:00 2001 From: Matt Kraai Date: Tue, 30 Oct 2001 23:11:20 +0000 Subject: Merge test suite. --- testsuite/COPYING | 340 +++++++++++++++++++++ testsuite/README | 21 ++ testsuite/TODO | 23 ++ .../basename-does-not-remove-identical-extension | 1 + testsuite/cat/cat-prints-a-file | 3 + testsuite/cat/cat-prints-a-file-and-standard-input | 7 + testsuite/cmp/cmp-detects-difference | 7 + testsuite/cp/cp-copies-empty-file | 3 + testsuite/cp/cp-copies-large-file | 3 + testsuite/cp/cp-copies-small-file | 3 + testsuite/cp/cp-follows-links | 4 + testsuite/cp/cp-preserves-links | 4 + testsuite/cp/cp-preserves-source-file | 3 + testsuite/cut/cut-cuts-a-character | 1 + testsuite/cut/cut-cuts-a-closed-range | 1 + testsuite/cut/cut-cuts-a-field | 1 + testsuite/cut/cut-cuts-an-open-range | 1 + testsuite/cut/cut-cuts-an-unclosed-range | 1 + testsuite/dd/dd-accepts-if | 2 + testsuite/dd/dd-accepts-of | 2 + ...d-copies-from-standard-input-to-standard-output | 1 + testsuite/dd/dd-prints-count-to-standard-error | 2 + testsuite/dirname/dirname-handles-absolute-path | 1 + testsuite/dirname/dirname-handles-empty-path | 1 + testsuite/dirname/dirname-handles-multiple-slashes | 1 + testsuite/dirname/dirname-handles-relative-path | 1 + testsuite/dirname/dirname-handles-root | 1 + testsuite/dirname/dirname-handles-single-component | 1 + testsuite/echo/echo-does-not-print-newline | 1 + testsuite/echo/echo-prints-argument | 1 + testsuite/echo/echo-prints-arguments | 1 + testsuite/echo/echo-prints-newline | 1 + testsuite/false/false-is-silent | 1 + testsuite/false/false-returns-failure | 5 + testsuite/find/find-supports-minus-xdev | 2 + testsuite/grep/grep-is-also-egrep | 2 + testsuite/gunzip/gunzip-reads-from-standard-input | 2 + testsuite/gzip/gzip-accepts-single-minus | 1 + testsuite/mkdir/mkdir-makes-a-directory | 2 + testsuite/mkdir/mkdir-makes-parent-directories | 2 + .../msh/msh-supports-underscores-in-variable-names | 1 + testsuite/mv/mv-moves-file | 3 + testsuite/rmdir/rmdir-removes-parent-directories | 3 + testsuite/runtest | 97 ++++++ testsuite/sed/sed-chains-substs | 1 + testsuite/sed/sed-handles-embedded-slashes | 1 + testsuite/sed/sed-handles-empty-lines | 1 + testsuite/sed/sed-handles-unsatisfied-backrefs | 6 + .../sed/sed-prints-line-once-for-multiple-substs | 4 + testsuite/tar/tar-demands-at-least-one-ctx | 5 + testsuite/tar/tar-demands-at-most-one-ctx | 5 + testsuite/tar/tar-extracts-file | 5 + testsuite/tar/tar-extracts-multiple-files | 5 + testsuite/tar/tar-handles-cz-options | 4 + ...andles-empty-include-and-non-empty-exclude-list | 4 + .../tar/tar-handles-exclude-and-extract-lists | 6 + testsuite/tar/tar-handles-multiple-X-options | 8 + testsuite/tar/tar-handles-nested-exclude | 7 + testsuite/tee/tee-appends-input | 5 + testsuite/tee/tee-tees-input | 3 + testsuite/touch/touch-creates-file | 2 + testsuite/touch/touch-does-not-create-file | 2 + testsuite/true/true-is-silent | 1 + testsuite/true/true-returns-success | 1 + .../uuencode-sets-standard-input-mode-correctly | 6 + testsuite/wc/wc-counts-all | 1 + testsuite/wc/wc-counts-characters | 1 + testsuite/wc/wc-counts-lines | 1 + testsuite/wc/wc-counts-words | 1 + testsuite/wc/wc-prints-longest-line-length | 1 + testsuite/wget/wget--O-overrides--P | 3 + testsuite/wget/wget-retrieves-google-index | 2 + testsuite/wget/wget-supports--P | 3 + 73 files changed, 660 insertions(+) create mode 100644 testsuite/COPYING create mode 100644 testsuite/README create mode 100644 testsuite/TODO create mode 100644 testsuite/basename/basename-does-not-remove-identical-extension create mode 100644 testsuite/cat/cat-prints-a-file create mode 100644 testsuite/cat/cat-prints-a-file-and-standard-input create mode 100644 testsuite/cmp/cmp-detects-difference create mode 100644 testsuite/cp/cp-copies-empty-file create mode 100644 testsuite/cp/cp-copies-large-file create mode 100644 testsuite/cp/cp-copies-small-file create mode 100644 testsuite/cp/cp-follows-links create mode 100644 testsuite/cp/cp-preserves-links create mode 100644 testsuite/cp/cp-preserves-source-file create mode 100644 testsuite/cut/cut-cuts-a-character create mode 100644 testsuite/cut/cut-cuts-a-closed-range create mode 100644 testsuite/cut/cut-cuts-a-field create mode 100644 testsuite/cut/cut-cuts-an-open-range create mode 100644 testsuite/cut/cut-cuts-an-unclosed-range create mode 100644 testsuite/dd/dd-accepts-if create mode 100644 testsuite/dd/dd-accepts-of create mode 100644 testsuite/dd/dd-copies-from-standard-input-to-standard-output create mode 100644 testsuite/dd/dd-prints-count-to-standard-error create mode 100644 testsuite/dirname/dirname-handles-absolute-path create mode 100644 testsuite/dirname/dirname-handles-empty-path create mode 100644 testsuite/dirname/dirname-handles-multiple-slashes create mode 100644 testsuite/dirname/dirname-handles-relative-path create mode 100644 testsuite/dirname/dirname-handles-root create mode 100644 testsuite/dirname/dirname-handles-single-component create mode 100644 testsuite/echo/echo-does-not-print-newline create mode 100644 testsuite/echo/echo-prints-argument create mode 100644 testsuite/echo/echo-prints-arguments create mode 100644 testsuite/echo/echo-prints-newline create mode 100644 testsuite/false/false-is-silent create mode 100644 testsuite/false/false-returns-failure create mode 100644 testsuite/find/find-supports-minus-xdev create mode 100644 testsuite/grep/grep-is-also-egrep create mode 100644 testsuite/gunzip/gunzip-reads-from-standard-input create mode 100644 testsuite/gzip/gzip-accepts-single-minus create mode 100644 testsuite/mkdir/mkdir-makes-a-directory create mode 100644 testsuite/mkdir/mkdir-makes-parent-directories create mode 100644 testsuite/msh/msh-supports-underscores-in-variable-names create mode 100644 testsuite/mv/mv-moves-file create mode 100644 testsuite/rmdir/rmdir-removes-parent-directories create mode 100755 testsuite/runtest create mode 100644 testsuite/sed/sed-chains-substs create mode 100644 testsuite/sed/sed-handles-embedded-slashes create mode 100644 testsuite/sed/sed-handles-empty-lines create mode 100644 testsuite/sed/sed-handles-unsatisfied-backrefs create mode 100644 testsuite/sed/sed-prints-line-once-for-multiple-substs create mode 100644 testsuite/tar/tar-demands-at-least-one-ctx create mode 100644 testsuite/tar/tar-demands-at-most-one-ctx create mode 100644 testsuite/tar/tar-extracts-file create mode 100644 testsuite/tar/tar-extracts-multiple-files create mode 100644 testsuite/tar/tar-handles-cz-options create mode 100644 testsuite/tar/tar-handles-empty-include-and-non-empty-exclude-list create mode 100644 testsuite/tar/tar-handles-exclude-and-extract-lists create mode 100644 testsuite/tar/tar-handles-multiple-X-options create mode 100644 testsuite/tar/tar-handles-nested-exclude create mode 100644 testsuite/tee/tee-appends-input create mode 100644 testsuite/tee/tee-tees-input create mode 100644 testsuite/touch/touch-creates-file create mode 100644 testsuite/touch/touch-does-not-create-file create mode 100644 testsuite/true/true-is-silent create mode 100644 testsuite/true/true-returns-success create mode 100644 testsuite/uuencode/uuencode-sets-standard-input-mode-correctly create mode 100644 testsuite/wc/wc-counts-all create mode 100644 testsuite/wc/wc-counts-characters create mode 100644 testsuite/wc/wc-counts-lines create mode 100644 testsuite/wc/wc-counts-words create mode 100644 testsuite/wc/wc-prints-longest-line-length create mode 100644 testsuite/wget/wget--O-overrides--P create mode 100644 testsuite/wget/wget-retrieves-google-index create mode 100644 testsuite/wget/wget-supports--P diff --git a/testsuite/COPYING b/testsuite/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/testsuite/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/testsuite/README b/testsuite/README new file mode 100644 index 0000000..1afb9eb --- /dev/null +++ b/testsuite/README @@ -0,0 +1,21 @@ +To use this testsuite, unpack it as a subdirectory of your BusyBox +build tree. Then change directory into the testsuite and run +`./runtest'. + +For the entire testsuite, the copyright is as follows: + +Copyright (C) 2001 Matt Kraai + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. diff --git a/testsuite/TODO b/testsuite/TODO new file mode 100644 index 0000000..2412631 --- /dev/null +++ b/testsuite/TODO @@ -0,0 +1,23 @@ +This testsuite is quite obviously a work in progress. As such, +there are a number of good extensions. If you are looking for +something to do, feel free to tackle one or more of the following: + +Buildroot support + Erik has put together a handy package for constructing and + testing busybox called buildroot. Integrating this into + the testsuite would allow for greater test coverage (e.g., + init, mount, and other privileged applications). + +BB_FEATURE support + BusyBox contains a number of features which are controlled + by compile-time defines. A method to run tests based on + these features would be great. + +libbb unit testing + Being able to test the functions of libbb individually may + help to prevent regressions. + +Standardization + This testsuite is totally bastardized. It would be better + to use an existing test framework, such as dejagnu, greg, + or a XUnit clone (shunit?). diff --git a/testsuite/basename/basename-does-not-remove-identical-extension b/testsuite/basename/basename-does-not-remove-identical-extension new file mode 100644 index 0000000..4448fde --- /dev/null +++ b/testsuite/basename/basename-does-not-remove-identical-extension @@ -0,0 +1 @@ +test xfoo = x`busybox basename foo foo` diff --git a/testsuite/cat/cat-prints-a-file b/testsuite/cat/cat-prints-a-file new file mode 100644 index 0000000..e3f35a8 --- /dev/null +++ b/testsuite/cat/cat-prints-a-file @@ -0,0 +1,3 @@ +echo I WANT > foo +busybox cat foo >bar +cmp foo bar diff --git a/testsuite/cat/cat-prints-a-file-and-standard-input b/testsuite/cat/cat-prints-a-file-and-standard-input new file mode 100644 index 0000000..bc92318 --- /dev/null +++ b/testsuite/cat/cat-prints-a-file-and-standard-input @@ -0,0 +1,7 @@ +echo I WANT > foo +echo SOMETHING | busybox cat foo - >bar +cat >baz <foo +echo bar >bar +if busybox cmp -s foo bar; then + return 1 +else + return 0 +fi diff --git a/testsuite/cp/cp-copies-empty-file b/testsuite/cp/cp-copies-empty-file new file mode 100644 index 0000000..ad25aa1 --- /dev/null +++ b/testsuite/cp/cp-copies-empty-file @@ -0,0 +1,3 @@ +touch foo +busybox cp foo bar +cmp foo bar diff --git a/testsuite/cp/cp-copies-large-file b/testsuite/cp/cp-copies-large-file new file mode 100644 index 0000000..c2225c6 --- /dev/null +++ b/testsuite/cp/cp-copies-large-file @@ -0,0 +1,3 @@ +dd if=/dev/zero of=foo seek=10k count=1 2>/dev/null +busybox cp foo bar +cmp foo bar diff --git a/testsuite/cp/cp-copies-small-file b/testsuite/cp/cp-copies-small-file new file mode 100644 index 0000000..d52a887 --- /dev/null +++ b/testsuite/cp/cp-copies-small-file @@ -0,0 +1,3 @@ +echo I WANT > foo +busybox cp foo bar +cmp foo bar diff --git a/testsuite/cp/cp-follows-links b/testsuite/cp/cp-follows-links new file mode 100644 index 0000000..2d9f05e --- /dev/null +++ b/testsuite/cp/cp-follows-links @@ -0,0 +1,4 @@ +touch foo +ln -s foo bar +busybox cp bar baz +test -f baz diff --git a/testsuite/cp/cp-preserves-links b/testsuite/cp/cp-preserves-links new file mode 100644 index 0000000..a5269e8 --- /dev/null +++ b/testsuite/cp/cp-preserves-links @@ -0,0 +1,4 @@ +touch foo +ln -s foo bar +busybox cp -d bar baz +test -L baz diff --git a/testsuite/cp/cp-preserves-source-file b/testsuite/cp/cp-preserves-source-file new file mode 100644 index 0000000..f0f5065 --- /dev/null +++ b/testsuite/cp/cp-preserves-source-file @@ -0,0 +1,3 @@ +touch foo +busybox cp foo bar +test -f foo diff --git a/testsuite/cut/cut-cuts-a-character b/testsuite/cut/cut-cuts-a-character new file mode 100644 index 0000000..d6c5efa --- /dev/null +++ b/testsuite/cut/cut-cuts-a-character @@ -0,0 +1 @@ +test $(echo abcd | busybox cut -c 3) = c diff --git a/testsuite/cut/cut-cuts-a-closed-range b/testsuite/cut/cut-cuts-a-closed-range new file mode 100644 index 0000000..9680b76 --- /dev/null +++ b/testsuite/cut/cut-cuts-a-closed-range @@ -0,0 +1 @@ +test $(echo abcd | busybox cut -c 1-2) = ab diff --git a/testsuite/cut/cut-cuts-a-field b/testsuite/cut/cut-cuts-a-field new file mode 100644 index 0000000..4c7f440 --- /dev/null +++ b/testsuite/cut/cut-cuts-a-field @@ -0,0 +1 @@ +test $(echo -e "f1\tf2\tf3" | busybox cut -f 2) = f2 diff --git a/testsuite/cut/cut-cuts-an-open-range b/testsuite/cut/cut-cuts-an-open-range new file mode 100644 index 0000000..1fbf277 --- /dev/null +++ b/testsuite/cut/cut-cuts-an-open-range @@ -0,0 +1 @@ +test $(echo abcd | busybox cut -c -3) = abc diff --git a/testsuite/cut/cut-cuts-an-unclosed-range b/testsuite/cut/cut-cuts-an-unclosed-range new file mode 100644 index 0000000..a2b0cdb --- /dev/null +++ b/testsuite/cut/cut-cuts-an-unclosed-range @@ -0,0 +1 @@ +test $(echo abcd | busybox cut -c 3-) = cd diff --git a/testsuite/dd/dd-accepts-if b/testsuite/dd/dd-accepts-if new file mode 100644 index 0000000..03d1af8 --- /dev/null +++ b/testsuite/dd/dd-accepts-if @@ -0,0 +1,2 @@ +echo I WANT >foo +test "$(busybox dd if=foo 2>/dev/null)" = "I WANT" diff --git a/testsuite/dd/dd-accepts-of b/testsuite/dd/dd-accepts-of new file mode 100644 index 0000000..84405e6 --- /dev/null +++ b/testsuite/dd/dd-accepts-of @@ -0,0 +1,2 @@ +echo I WANT | busybox dd of=foo 2>/dev/null +echo I WANT | cmp foo - diff --git a/testsuite/dd/dd-copies-from-standard-input-to-standard-output b/testsuite/dd/dd-copies-from-standard-input-to-standard-output new file mode 100644 index 0000000..d890eb0 --- /dev/null +++ b/testsuite/dd/dd-copies-from-standard-input-to-standard-output @@ -0,0 +1 @@ +test "$(echo I WANT | busybox dd 2>/dev/null)" = "I WANT" diff --git a/testsuite/dd/dd-prints-count-to-standard-error b/testsuite/dd/dd-prints-count-to-standard-error new file mode 100644 index 0000000..2187dc0 --- /dev/null +++ b/testsuite/dd/dd-prints-count-to-standard-error @@ -0,0 +1,2 @@ +echo I WANT | busybox dd of=foo >/dev/null 2>bar +grep -q records bar diff --git a/testsuite/dirname/dirname-handles-absolute-path b/testsuite/dirname/dirname-handles-absolute-path new file mode 100644 index 0000000..ca1a51b --- /dev/null +++ b/testsuite/dirname/dirname-handles-absolute-path @@ -0,0 +1 @@ +test $(busybox dirname /foo/bar/baz) = /foo/bar diff --git a/testsuite/dirname/dirname-handles-empty-path b/testsuite/dirname/dirname-handles-empty-path new file mode 100644 index 0000000..04134a5 --- /dev/null +++ b/testsuite/dirname/dirname-handles-empty-path @@ -0,0 +1 @@ +test $(busybox dirname '') = . diff --git a/testsuite/dirname/dirname-handles-multiple-slashes b/testsuite/dirname/dirname-handles-multiple-slashes new file mode 100644 index 0000000..286f253 --- /dev/null +++ b/testsuite/dirname/dirname-handles-multiple-slashes @@ -0,0 +1 @@ +test $(busybox dirname foo/bar///baz) = foo/bar diff --git a/testsuite/dirname/dirname-handles-relative-path b/testsuite/dirname/dirname-handles-relative-path new file mode 100644 index 0000000..ffe4ab4 --- /dev/null +++ b/testsuite/dirname/dirname-handles-relative-path @@ -0,0 +1 @@ +test $(busybox dirname foo/bar/baz) = foo/bar diff --git a/testsuite/dirname/dirname-handles-root b/testsuite/dirname/dirname-handles-root new file mode 100644 index 0000000..6bd62b8 --- /dev/null +++ b/testsuite/dirname/dirname-handles-root @@ -0,0 +1 @@ +test $(busybox dirname /) = / diff --git a/testsuite/dirname/dirname-handles-single-component b/testsuite/dirname/dirname-handles-single-component new file mode 100644 index 0000000..24f9ae1 --- /dev/null +++ b/testsuite/dirname/dirname-handles-single-component @@ -0,0 +1 @@ +test $(busybox dirname foo) = . diff --git a/testsuite/echo/echo-does-not-print-newline b/testsuite/echo/echo-does-not-print-newline new file mode 100644 index 0000000..2ed03ca --- /dev/null +++ b/testsuite/echo/echo-does-not-print-newline @@ -0,0 +1 @@ +test `busybox echo -n word | wc -c` -eq 4 diff --git a/testsuite/echo/echo-prints-argument b/testsuite/echo/echo-prints-argument new file mode 100644 index 0000000..98779db --- /dev/null +++ b/testsuite/echo/echo-prints-argument @@ -0,0 +1 @@ +test `busybox echo fubar` = fubar diff --git a/testsuite/echo/echo-prints-arguments b/testsuite/echo/echo-prints-arguments new file mode 100644 index 0000000..4e4e3b4 --- /dev/null +++ b/testsuite/echo/echo-prints-arguments @@ -0,0 +1 @@ +test "`busybox echo foo bar`" = "foo bar" diff --git a/testsuite/echo/echo-prints-newline b/testsuite/echo/echo-prints-newline new file mode 100644 index 0000000..838671e --- /dev/null +++ b/testsuite/echo/echo-prints-newline @@ -0,0 +1 @@ +test `busybox echo word | wc -c` -eq 5 diff --git a/testsuite/false/false-is-silent b/testsuite/false/false-is-silent new file mode 100644 index 0000000..8a9aa0c --- /dev/null +++ b/testsuite/false/false-is-silent @@ -0,0 +1 @@ +busybox false 2>&1 | cmp - /dev/null diff --git a/testsuite/false/false-returns-failure b/testsuite/false/false-returns-failure new file mode 100644 index 0000000..30ee299 --- /dev/null +++ b/testsuite/false/false-returns-failure @@ -0,0 +1,5 @@ +if busybox false; then + return 1 +else + return 0 +fi diff --git a/testsuite/find/find-supports-minus-xdev b/testsuite/find/find-supports-minus-xdev new file mode 100644 index 0000000..1c8818c --- /dev/null +++ b/testsuite/find/find-supports-minus-xdev @@ -0,0 +1,2 @@ +# XFAIL +busybox find . -xdev >/dev/null 2>&1 diff --git a/testsuite/grep/grep-is-also-egrep b/testsuite/grep/grep-is-also-egrep new file mode 100644 index 0000000..f28afda --- /dev/null +++ b/testsuite/grep/grep-is-also-egrep @@ -0,0 +1,2 @@ +# UNSUPPORTED: CONFIG_FEATURE_GREP_EGREP_ALIAS +echo foo | busybox egrep foo diff --git a/testsuite/gunzip/gunzip-reads-from-standard-input b/testsuite/gunzip/gunzip-reads-from-standard-input new file mode 100644 index 0000000..0ab9fdd --- /dev/null +++ b/testsuite/gunzip/gunzip-reads-from-standard-input @@ -0,0 +1,2 @@ +echo foo | gzip -c | busybox gunzip -c > output +echo foo | cmp - output diff --git a/testsuite/gzip/gzip-accepts-single-minus b/testsuite/gzip/gzip-accepts-single-minus new file mode 100644 index 0000000..8b51fdf --- /dev/null +++ b/testsuite/gzip/gzip-accepts-single-minus @@ -0,0 +1 @@ +echo foo | busybox gzip - >/dev/null diff --git a/testsuite/mkdir/mkdir-makes-a-directory b/testsuite/mkdir/mkdir-makes-a-directory new file mode 100644 index 0000000..6ca5c4d --- /dev/null +++ b/testsuite/mkdir/mkdir-makes-a-directory @@ -0,0 +1,2 @@ +busybox mkdir foo +test -d foo diff --git a/testsuite/mkdir/mkdir-makes-parent-directories b/testsuite/mkdir/mkdir-makes-parent-directories new file mode 100644 index 0000000..992facb --- /dev/null +++ b/testsuite/mkdir/mkdir-makes-parent-directories @@ -0,0 +1,2 @@ +busybox mkdir -p foo/bar +test -d foo -a -d foo/bar diff --git a/testsuite/msh/msh-supports-underscores-in-variable-names b/testsuite/msh/msh-supports-underscores-in-variable-names new file mode 100644 index 0000000..9c7834b --- /dev/null +++ b/testsuite/msh/msh-supports-underscores-in-variable-names @@ -0,0 +1 @@ +test "`busybox msh -c 'FOO_BAR=foo; echo $FOO_BAR'`" = foo diff --git a/testsuite/mv/mv-moves-file b/testsuite/mv/mv-moves-file new file mode 100644 index 0000000..edb4c37 --- /dev/null +++ b/testsuite/mv/mv-moves-file @@ -0,0 +1,3 @@ +touch foo +busybox mv foo bar +test ! -f foo -a -f bar diff --git a/testsuite/rmdir/rmdir-removes-parent-directories b/testsuite/rmdir/rmdir-removes-parent-directories new file mode 100644 index 0000000..222f5de --- /dev/null +++ b/testsuite/rmdir/rmdir-removes-parent-directories @@ -0,0 +1,3 @@ +mkdir -p foo/bar +busybox rmdir -p foo/bar +test ! -d foo diff --git a/testsuite/runtest b/testsuite/runtest new file mode 100755 index 0000000..b19be3d --- /dev/null +++ b/testsuite/runtest @@ -0,0 +1,97 @@ +#!/bin/sh + +PATH=$(dirname $(pwd)):$PATH + +run_applet_testcase () +{ + local applet=$1 + local testcase=$2 + + local status=0 + local U= + local X= + + local uc_applet=$(echo $applet | tr a-z A-Z) + local testname=$(basename $testcase) + + if grep -q "^# CONFIG_${uc_applet} is not set$" ../.config; then + echo "UNSUPPORTED: $testname" + return 0 + fi + + if grep -q "^# UNSUPPORTED: " $testcase; then + local feature=`sed -ne 's/.*UNSUPPORTED: //p' $testcase` + + if grep -q "^# ${feature} is not set$" ../.config; then + echo "UNSUPPORTED: $testname" + return 0 + fi + fi + + if grep -q "^# XFAIL$" $testcase; then + U=U + X=X + fi + + mkdir tmp + pushd tmp >/dev/null + + if . ../$testcase >/dev/null 2>&1; then + echo "${U}PASS: $testname" + if [ "$U" ]; then + status=1 + fi + else + echo "${X}FAIL: $testname" + if [ ! "$X" ]; then + status=1 + fi + fi + + popd >/dev/null + rm -rf tmp + + return $status +} + +run_applet_tests () +{ + local applet=$1 + + local status=0 + + for testcase in $applet/*; do + if [ "$testcase" = "$applet/CVS" ]; then + continue + fi + + if run_applet_testcase $applet $testcase; then + : + else + status=1 + fi + done + + return $status +} + + +status=0 + +if [ $# -ne 0 ]; then + applets="$@" +else + applets="*" +fi + +for applet in $applets; do + if [ "$applet" != CVS -a -d "$applet" ]; then + if run_applet_tests $applet; then + : + else + status=1 + fi + fi +done + +exit $status diff --git a/testsuite/sed/sed-chains-substs b/testsuite/sed/sed-chains-substs new file mode 100644 index 0000000..266936a --- /dev/null +++ b/testsuite/sed/sed-chains-substs @@ -0,0 +1 @@ +test "$(echo foo | busybox sed -e s/foo/bar/ -e s/bar/baz/)" = baz diff --git a/testsuite/sed/sed-handles-embedded-slashes b/testsuite/sed/sed-handles-embedded-slashes new file mode 100644 index 0000000..cc28761 --- /dev/null +++ b/testsuite/sed/sed-handles-embedded-slashes @@ -0,0 +1 @@ +test "$(echo fu/bar | busybox sed -e 's/[/]//')" = fubar diff --git a/testsuite/sed/sed-handles-empty-lines b/testsuite/sed/sed-handles-empty-lines new file mode 100644 index 0000000..2bb8f04 --- /dev/null +++ b/testsuite/sed/sed-handles-empty-lines @@ -0,0 +1 @@ +test `echo | busybox sed -e 's/$/@/'` = @ diff --git a/testsuite/sed/sed-handles-unsatisfied-backrefs b/testsuite/sed/sed-handles-unsatisfied-backrefs new file mode 100644 index 0000000..61bff88 --- /dev/null +++ b/testsuite/sed/sed-handles-unsatisfied-backrefs @@ -0,0 +1,6 @@ +busybox sed -e 's/.*root=/\1/' >output <output <foo.exclude +busybox tar xf foo.tar -X foo.exclude diff --git a/testsuite/tar/tar-handles-exclude-and-extract-lists b/testsuite/tar/tar-handles-exclude-and-extract-lists new file mode 100644 index 0000000..7f771b9 --- /dev/null +++ b/testsuite/tar/tar-handles-exclude-and-extract-lists @@ -0,0 +1,6 @@ +touch foo bar baz +tar cf foo.tar foo bar baz +echo foo >foo.exclude +rm foo bar baz +busybox tar xf foo.tar foo bar -X foo.exclude +test ! -f foo -a -f bar -a ! -f baz diff --git a/testsuite/tar/tar-handles-multiple-X-options b/testsuite/tar/tar-handles-multiple-X-options new file mode 100644 index 0000000..8321af8 --- /dev/null +++ b/testsuite/tar/tar-handles-multiple-X-options @@ -0,0 +1,8 @@ +touch foo +touch bar +tar cf foo.tar foo bar +echo foo > foo.exclude +echo bar > bar.exclude +rm foo bar +busybox tar xf foo.tar -X foo.exclude -X bar.exclude +test ! -f foo -a ! -f bar diff --git a/testsuite/tar/tar-handles-nested-exclude b/testsuite/tar/tar-handles-nested-exclude new file mode 100644 index 0000000..da18408 --- /dev/null +++ b/testsuite/tar/tar-handles-nested-exclude @@ -0,0 +1,7 @@ +mkdir foo +touch foo/bar +tar cf foo.tar foo +rm -rf foo +echo foo/bar >foobar.exclude +busybox tar xf foo.tar foo -X foobar.exclude +test -d foo -a ! -f foo/bar diff --git a/testsuite/tee/tee-appends-input b/testsuite/tee/tee-appends-input new file mode 100644 index 0000000..cff20bf --- /dev/null +++ b/testsuite/tee/tee-appends-input @@ -0,0 +1,5 @@ +echo i\'m a little teapot >foo +cp foo bar +echo i\'m a little teapot >>foo +echo i\'m a little teapot | busybox tee -a bar >/dev/null +cmp foo bar diff --git a/testsuite/tee/tee-tees-input b/testsuite/tee/tee-tees-input new file mode 100644 index 0000000..26e2173 --- /dev/null +++ b/testsuite/tee/tee-tees-input @@ -0,0 +1,3 @@ +echo i\'m a little teapot >foo +echo i\'m a little teapot | busybox tee bar >baz +cmp foo bar && cmp foo baz diff --git a/testsuite/touch/touch-creates-file b/testsuite/touch/touch-creates-file new file mode 100644 index 0000000..4b49354 --- /dev/null +++ b/testsuite/touch/touch-creates-file @@ -0,0 +1,2 @@ +busybox touch foo +test -f foo diff --git a/testsuite/touch/touch-does-not-create-file b/testsuite/touch/touch-does-not-create-file new file mode 100644 index 0000000..8852592 --- /dev/null +++ b/testsuite/touch/touch-does-not-create-file @@ -0,0 +1,2 @@ +busybox touch -c foo +test ! -f foo diff --git a/testsuite/true/true-is-silent b/testsuite/true/true-is-silent new file mode 100644 index 0000000..1d1bdb2 --- /dev/null +++ b/testsuite/true/true-is-silent @@ -0,0 +1 @@ +busybox true 2>&1 | cmp - /dev/null diff --git a/testsuite/true/true-returns-success b/testsuite/true/true-returns-success new file mode 100644 index 0000000..cdf2d55 --- /dev/null +++ b/testsuite/true/true-returns-success @@ -0,0 +1 @@ +busybox true diff --git a/testsuite/uuencode/uuencode-sets-standard-input-mode-correctly b/testsuite/uuencode/uuencode-sets-standard-input-mode-correctly new file mode 100644 index 0000000..0ccf23b --- /dev/null +++ b/testsuite/uuencode/uuencode-sets-standard-input-mode-correctly @@ -0,0 +1,6 @@ +saved_umask=$(umask) +umask 0 +busybox uuencode foo