Signed-off-by: Nguyán ThÃi Ngác Duy <pclouds@xxxxxxxxx> --- .gitignore | 1 + Makefile | 1 + t/t9002-column.sh | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test-column.c | 57 ++++++++++++++++++++++++++++ 4 files changed, 167 insertions(+), 0 deletions(-) create mode 100755 t/t9002-column.sh create mode 100644 test-column.c diff --git a/.gitignore b/.gitignore index 3dd6ef7..a1a1202 100644 --- a/.gitignore +++ b/.gitignore @@ -162,6 +162,7 @@ /gitweb/gitweb.cgi /gitweb/static/gitweb.min.* /test-chmtime +/test-column /test-ctype /test-date /test-delta diff --git a/Makefile b/Makefile index 88e20de..a687e73 100644 --- a/Makefile +++ b/Makefile @@ -417,6 +417,7 @@ PROGRAM_OBJS += http-backend.o PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS)) TEST_PROGRAMS_NEED_X += test-chmtime +TEST_PROGRAMS_NEED_X += test-column TEST_PROGRAMS_NEED_X += test-ctype TEST_PROGRAMS_NEED_X += test-date TEST_PROGRAMS_NEED_X += test-delta diff --git a/t/t9002-column.sh b/t/t9002-column.sh new file mode 100755 index 0000000..1d030b0 --- /dev/null +++ b/t/t9002-column.sh @@ -0,0 +1,108 @@ +#!/bin/sh + +test_description='git column' +. ./test-lib.sh + +test_expect_success 'setup' ' + cat >lista <<\EOF +one +two +three +four +five +six +seven +eight +nine +ten +eleven +EOF +' + +test_expect_success '80 columns' ' + cat >expected <<\EOF && +one two three four five six seven eight nine ten eleven +EOF + COLUMNS=80 test-column < lista > actual && + test_cmp expected actual +' + +test_expect_success 'COLUMNS = 1' ' + cat >expected <<\EOF && +one +two +three +four +five +six +seven +eight +nine +ten +eleven +EOF + COLUMNS=1 test-column < lista > actual && + test_cmp expected actual +' + +test_expect_success 'width = 1' ' + test-column --width=1 < lista > actual && + test_cmp expected actual +' + +COLUMNS=20 +export COLUMNS + +test_expect_success '20 columns' ' + cat >expected <<\EOF && +one seven +two eight +three nine +four ten +five eleven +six +EOF + test-column < lista > actual && + test_cmp expected actual +' + +test_expect_success '20 columns, densed' ' + cat >expected <<\EOF && +one seven +two eight +three nine +four ten +five eleven +six +EOF + test-column --mode=column,dense < lista > actual && + test_cmp expected actual +' + +test_expect_success '20 columns, padding 2' ' + cat >expected <<\EOF && +one seven +two eight +three nine +four ten +five eleven +six +EOF + test-column --padding 2 < lista > actual && + test_cmp expected actual +' + +test_expect_success '20 columns, left indented' ' + cat >expected <<\EOF && + one seven + two eight + three nine + four ten + five eleven + six +EOF + test-column --left=2 < lista > actual && + test_cmp expected actual +' + +test_done diff --git a/test-column.c b/test-column.c new file mode 100644 index 0000000..b9a5d4b --- /dev/null +++ b/test-column.c @@ -0,0 +1,57 @@ +#include "cache.h" +#include "strbuf.h" +#include "parse-options.h" +#include "string-list.h" +#include "column.h" + +static const char * const builtin_column_usage[] = { + "git column [--mode=<mode>] [--width=<width>] [--left-space=<N>] [--right-space=<N>]", + NULL +}; + +int main(int argc, const char **argv) +{ + struct string_list list = STRING_LIST_INIT_DUP; + const char *modestr = NULL; + int mode = 0; + struct strbuf sb = STRBUF_INIT; + int left_space = 0, right_space = 0, padding = 1; + int term_width = term_columns(); + struct option options[] = { + OPT_INTEGER(0, "width", &term_width, "Maximum width"), + OPT_INTEGER(0, "left", &left_space, "Padding space on left border"), + OPT_INTEGER(0, "right", &right_space, "Padding space on right border"), + OPT_INTEGER(0, "padding", &padding, "Padding space between columns"), + OPT_STRING(0, "mode", &modestr, "mode", "Which layout mode to use"), + OPT_END() + }; + + argc = parse_options(argc, argv, "", options, builtin_column_usage, 0); + + while (modestr && *modestr) { + int len = strcspn(modestr, ","); + if (len == 6 && !strncmp(modestr, "column", len)) + mode |= COL_MODE_COLUMN; + else if (len == 5 && !strncmp(modestr, "dense", len)) + mode |= COL_DENSE; + else if (len == 4 && !strncmp(modestr, "ansi", len)) + mode |= COL_ANSI; + else + die("Unknown modestr %s", modestr); + modestr += len; + while (*modestr == ',') + modestr++; + } + if (!mode) + mode = COL_MODE_COLUMN; + if ((mode & COL_MODE) == 0) + die("Invalid mode '%s'", modestr); + + while (!strbuf_getline(&sb, stdin, '\n')) + string_list_append(&list, sb.buf); + + strbuf_setlen(&sb, left_space); + memset(sb.buf, ' ', left_space); + display_columns(&list, mode, term_width - right_space - left_space, padding, sb.buf); + return 0; +} -- 1.7.2.2 -- 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