[PATCH 03/25] Add tests for parse-options.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Johannes Schindelin <Johannes.Schindelin@xxxxxx>

Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx>
---
 .gitignore               |    1 +
 Makefile                 |    2 +-
 t/t0040-parse-options.sh |   69 ++++++++++++++++++++++++++++++++++++++++++++++
 test-parse-options.c     |   35 +++++++++++++++++++++++
 4 files changed, 106 insertions(+), 1 deletions(-)
 create mode 100755 t/t0040-parse-options.sh
 create mode 100644 test-parse-options.c

diff --git a/.gitignore b/.gitignore
index 62afef2..249b451 100644
--- a/.gitignore
+++ b/.gitignore
@@ -154,6 +154,7 @@ test-delta
 test-dump-cache-tree
 test-genrandom
 test-match-trees
+test-parse-options
 test-sha1
 common-cmds.h
 *.tar.gz
diff --git a/Makefile b/Makefile
index 1ffdf06..64a9083 100644
--- a/Makefile
+++ b/Makefile
@@ -970,7 +970,7 @@ endif
 
 ### Testing rules
 
-TEST_PROGRAMS = test-chmtime$X test-genrandom$X test-date$X test-delta$X test-sha1$X test-match-trees$X test-absolute-path$X
+TEST_PROGRAMS = test-chmtime$X test-genrandom$X test-date$X test-delta$X test-sha1$X test-match-trees$X test-absolute-path$X test-parse-options$X
 
 all:: $(TEST_PROGRAMS)
 
diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh
new file mode 100755
index 0000000..09b3230
--- /dev/null
+++ b/t/t0040-parse-options.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Johannes Schindelin
+#
+
+test_description='our own option parser'
+
+. ./test-lib.sh
+
+cat > expect.err << EOF
+usage: test-parse-options <options>
+
+    -b, --boolean         get a boolean
+    -i, --integer <n>     get a integer
+    -j <n>                get a integer, too
+
+string options
+    -s, --string <string>
+                          get a string
+    --string2 <str>       get another string
+EOF
+
+test_expect_success 'test help' '
+	! test-parse-options -h > output 2> output.err &&
+	test ! -s output &&
+	git diff expect.err output.err
+'
+
+cat > expect << EOF
+boolean: 2
+integer: 1729
+string: 123
+EOF
+
+test_expect_success 'short options' '
+	test-parse-options -s123 -b -i 1729 -b > output 2> output.err &&
+	git diff expect output &&
+	test ! -s output.err
+'
+cat > expect << EOF
+boolean: 2
+integer: 1729
+string: 321
+EOF
+
+test_expect_success 'long options' '
+	test-parse-options --boolean --integer 1729 --boolean --string2=321 \
+		> output 2> output.err &&
+	test ! -s output.err &&
+	git diff expect output
+'
+
+cat > expect << EOF
+boolean: 1
+integer: 13
+string: 123
+arg 00: a1
+arg 01: b1
+arg 02: --boolean
+EOF
+
+test_expect_success 'intermingled arguments' '
+	test-parse-options a1 --string 123 b1 --boolean -j 13 -- --boolean \
+		> output 2> output.err &&
+	test ! -s output.err &&
+	git diff expect output
+'
+
+test_done
diff --git a/test-parse-options.c b/test-parse-options.c
new file mode 100644
index 0000000..277cfe4
--- /dev/null
+++ b/test-parse-options.c
@@ -0,0 +1,35 @@
+#include "cache.h"
+#include "parse-options.h"
+
+static int boolean = 0;
+static int integer = 0;
+static char *string = NULL;
+
+int main(int argc, const char **argv)
+{
+	const char *usage[] = {
+		"test-parse-options <options>",
+		NULL
+	};
+	struct option options[] = {
+		OPT_BOOLEAN('b', "boolean", &boolean, "get a boolean"),
+		OPT_INTEGER('i', "integer", &integer, "get a integer"),
+		OPT_INTEGER('j', NULL, &integer, "get a integer, too"),
+		OPT_GROUP("string options"),
+		OPT_STRING('s', "string", &string, "string", "get a string"),
+		OPT_STRING(0, "string2", &string, "str", "get another string"),
+		OPT_END(),
+	};
+	int i;
+
+	argc = parse_options(argc, argv, options, usage, 0);
+
+	printf("boolean: %d\n", boolean);
+	printf("integer: %d\n", integer);
+	printf("string: %s\n", string ? string : "(not set)");
+
+	for (i = 0; i < argc; i++)
+		printf("arg %02d: %s\n", i, argv[i]);
+
+	return 0;
+}
-- 
1.5.3.4.1231.g62b9a

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux