1caf54c4fSMartin Matuska /*- 2*bd66c1b4SMartin Matuska * SPDX-License-Identifier: BSD-2-Clause 3*bd66c1b4SMartin Matuska * 4caf54c4fSMartin Matuska * Copyright (c) 2003-2007 Tim Kientzle 5caf54c4fSMartin Matuska * All rights reserved. 6caf54c4fSMartin Matuska */ 7caf54c4fSMartin Matuska #include "test.h" 8caf54c4fSMartin Matuska 9caf54c4fSMartin Matuska /* 10caf54c4fSMartin Matuska * Test that "--help", "-h", and "-W help" options all work and 11caf54c4fSMartin Matuska * generate reasonable output. 12caf54c4fSMartin Matuska */ 13caf54c4fSMartin Matuska 14caf54c4fSMartin Matuska static int 15caf54c4fSMartin Matuska in_first_line(const char *p, const char *substring) 16caf54c4fSMartin Matuska { 17caf54c4fSMartin Matuska size_t l = strlen(substring); 18caf54c4fSMartin Matuska 19caf54c4fSMartin Matuska while (*p != '\0' && *p != '\n') { 20caf54c4fSMartin Matuska if (memcmp(p, substring, l) == 0) 21caf54c4fSMartin Matuska return (1); 22caf54c4fSMartin Matuska ++p; 23caf54c4fSMartin Matuska } 24caf54c4fSMartin Matuska return (0); 25caf54c4fSMartin Matuska } 26caf54c4fSMartin Matuska 27caf54c4fSMartin Matuska DEFINE_TEST(test_option_help) 28caf54c4fSMartin Matuska { 29caf54c4fSMartin Matuska int r; 30caf54c4fSMartin Matuska char *p; 31caf54c4fSMartin Matuska size_t plen; 32caf54c4fSMartin Matuska 33caf54c4fSMartin Matuska /* Exercise --help option. */ 34caf54c4fSMartin Matuska r = systemf("%s --help >help.stdout 2>help.stderr", testprog); 35caf54c4fSMartin Matuska assertEqualInt(r, 0); 36caf54c4fSMartin Matuska failure("--help should generate nothing to stderr."); 37caf54c4fSMartin Matuska assertEmptyFile("help.stderr"); 38caf54c4fSMartin Matuska /* Help message should start with name of program. */ 39caf54c4fSMartin Matuska p = slurpfile(&plen, "help.stdout"); 40caf54c4fSMartin Matuska failure("Help output should be long enough."); 41caf54c4fSMartin Matuska assert(plen >= 7); 42caf54c4fSMartin Matuska failure("First line of help output should contain string 'bsdcpio'"); 43caf54c4fSMartin Matuska assert(in_first_line(p, "bsdcpio")); 44caf54c4fSMartin Matuska /* 45caf54c4fSMartin Matuska * TODO: Extend this check to further verify that --help output 46caf54c4fSMartin Matuska * looks approximately right. 47caf54c4fSMartin Matuska */ 48caf54c4fSMartin Matuska free(p); 49caf54c4fSMartin Matuska 50caf54c4fSMartin Matuska /* -h option should generate the same output. */ 51caf54c4fSMartin Matuska r = systemf("%s -h >h.stdout 2>h.stderr", testprog); 52caf54c4fSMartin Matuska assertEqualInt(r, 0); 53caf54c4fSMartin Matuska failure("-h should generate nothing to stderr."); 54caf54c4fSMartin Matuska assertEmptyFile("h.stderr"); 55caf54c4fSMartin Matuska failure("stdout should be same for -h and --help"); 56caf54c4fSMartin Matuska assertEqualFile("h.stdout", "help.stdout"); 57caf54c4fSMartin Matuska 58caf54c4fSMartin Matuska /* -W help should be another synonym. */ 59caf54c4fSMartin Matuska r = systemf("%s -W help >Whelp.stdout 2>Whelp.stderr", testprog); 60caf54c4fSMartin Matuska assertEqualInt(r, 0); 61caf54c4fSMartin Matuska failure("-W help should generate nothing to stderr."); 62caf54c4fSMartin Matuska assertEmptyFile("Whelp.stderr"); 63caf54c4fSMartin Matuska failure("stdout should be same for -W help and --help"); 64caf54c4fSMartin Matuska assertEqualFile("Whelp.stdout", "help.stdout"); 65caf54c4fSMartin Matuska } 66