From: Thomas Weißschuh Date: Tue, 12 Dec 2023 18:40:31 +0000 (+0100) Subject: libsmartcols: (tests) add test for continuous json output X-Git-Tag: v2.40-rc1~106 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be59729281c63eb8f226bdbdc9a356276be5eeae;p=thirdparty%2Futil-linux.git libsmartcols: (tests) add test for continuous json output Signed-off-by: Thomas Weißschuh --- diff --git a/libsmartcols/samples/Makemodule.am b/libsmartcols/samples/Makemodule.am index fbdf6fd3d4..b192ebac77 100644 --- a/libsmartcols/samples/Makemodule.am +++ b/libsmartcols/samples/Makemodule.am @@ -4,6 +4,7 @@ check_PROGRAMS += \ sample-scols-title \ sample-scols-wrap \ sample-scols-continuous \ + sample-scols-continuous-json \ sample-scols-fromfile \ sample-scols-grouping-simple \ sample-scols-grouping-overlay \ @@ -35,6 +36,10 @@ sample_scols_continuous_SOURCES = libsmartcols/samples/continuous.c sample_scols_continuous_LDADD = $(sample_scols_ldadd) libcommon.la sample_scols_continuous_CFLAGS = $(sample_scols_cflags) +sample_scols_continuous_json_SOURCES = libsmartcols/samples/continuous-json.c +sample_scols_continuous_json_LDADD = $(sample_scols_ldadd) libcommon.la +sample_scols_continuous_json_CFLAGS = $(sample_scols_cflags) + sample_scols_maxout_SOURCES = libsmartcols/samples/maxout.c sample_scols_maxout_LDADD = $(sample_scols_ldadd) sample_scols_maxout_CFLAGS = $(sample_scols_cflags) diff --git a/libsmartcols/samples/continuous-json.c b/libsmartcols/samples/continuous-json.c new file mode 100644 index 0000000000..ae1f40597e --- /dev/null +++ b/libsmartcols/samples/continuous-json.c @@ -0,0 +1,80 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * Copyright (C) 2016 Karel Zak + * Copyright (C) 2023 Thomas Weißschuh + */ +#include +#include +#include +#include + +#include "c.h" +#include "xalloc.h" + +#include "libsmartcols.h" + +/* add columns to the @tb */ +static void setup_columns(struct libscols_table *tb) +{ + scols_table_enable_maxout(tb, 1); + if (!scols_table_new_column(tb, "COUNT", 0.1, SCOLS_FL_RIGHT)) + goto fail; + if (!scols_table_new_column(tb, "TEXT", 0.9, 0)) + goto fail; + return; +fail: + scols_unref_table(tb); + err(EXIT_FAILURE, "failed to create output columns"); +} + +static struct libscols_line *add_line(struct libscols_table *tb, int i) +{ + char *p; + struct libscols_line *ln = scols_table_new_line(tb, NULL); + + if (!ln) + err(EXIT_FAILURE, "failed to create output line"); + + xasprintf(&p, "%d", i); + if (scols_line_refer_data(ln, 0, p)) + goto fail; + + xasprintf(&p, "text%d", i); + if (scols_line_refer_data(ln, 1, p)) + goto fail; + + return ln; +fail: + scols_unref_table(tb); + err(EXIT_FAILURE, "failed to create output line"); +} + +int main(void) +{ + struct libscols_table *tb; + size_t i; + + scols_init_debug(0); + + tb = scols_new_table(); + if (!tb) + err(EXIT_FAILURE, "failed to create output table"); + scols_table_enable_json(tb, 1); + + setup_columns(tb); + + for (i = 0; i < 10; i++) { + struct libscols_line *line; + + line = add_line(tb, i); + + /* print the line */ + scols_table_print_range(tb, line, NULL); + + fflush(scols_table_get_stream(tb)); + } + + scols_unref_table(tb); + return EXIT_SUCCESS; +} diff --git a/meson.build b/meson.build index 2d0f6e14f1..74cf366ae2 100644 --- a/meson.build +++ b/meson.build @@ -3468,6 +3468,15 @@ if not is_disabler(exe) exes += exe endif +exe = executable( + 'sample-scols-continuous-json', + 'libsmartcols/samples/continuous-json.c', + include_directories : includes, + link_with : [lib_smartcols, lib_common]) +if not is_disabler(exe) + exes += exe +endif + exe = executable( 'sample-scols-maxout', 'libsmartcols/samples/maxout.c', diff --git a/tests/commands.sh b/tests/commands.sh index 318292ac58..1d76abe48d 100644 --- a/tests/commands.sh +++ b/tests/commands.sh @@ -23,6 +23,7 @@ TS_HELPER_LIBMOUNT_UPDATE="${ts_helpersdir}test_mount_tab_update" TS_HELPER_LIBMOUNT_UTILS="${ts_helpersdir}test_mount_utils" TS_HELPER_LIBMOUNT_DEBUG="${ts_helpersdir}test_mount_debug" TS_HELPER_LIBMOUNT_FUZZ="${ts_helpersdir}test_mount_fuzz" +TS_HELPER_LIBSMARTCOLS_CONTINUOUS_JSON="${ts_helpersdir}sample-scols-continuous-json" TS_HELPER_LIBSMARTCOLS_FROMFILE="${ts_helpersdir}sample-scols-fromfile" TS_HELPER_LIBSMARTCOLS_TITLE="${ts_helpersdir}sample-scols-title" TS_HELPER_PYLIBMOUNT_CONTEXT="$top_srcdir/libmount/python/test_mount_context.py" diff --git a/tests/expected/libsmartcols/continuous-json b/tests/expected/libsmartcols/continuous-json new file mode 100644 index 0000000000..e8ba5844a6 --- /dev/null +++ b/tests/expected/libsmartcols/continuous-json @@ -0,0 +1,40 @@ +{ + "count": "0", + "text": "text0" +} +{ + "count": "1", + "text": "text1" +} +{ + "count": "2", + "text": "text2" +} +{ + "count": "3", + "text": "text3" +} +{ + "count": "4", + "text": "text4" +} +{ + "count": "5", + "text": "text5" +} +{ + "count": "6", + "text": "text6" +} +{ + "count": "7", + "text": "text7" +} +{ + "count": "8", + "text": "text8" +} +{ + "count": "9", + "text": "text9" +} diff --git a/tests/ts/libsmartcols/continuous-json b/tests/ts/libsmartcols/continuous-json new file mode 100755 index 0000000000..8456d6b97b --- /dev/null +++ b/tests/ts/libsmartcols/continuous-json @@ -0,0 +1,28 @@ +#!/bin/bash +# +# This file is part of util-linux. +# +# This file 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 file 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. +# +# + +TS_TOPDIR="${0%/*}/../.." +TS_DESC="title" + +. "$TS_TOPDIR"/functions.sh +ts_init "$*" + +TESTPROG="$TS_HELPER_LIBSMARTCOLS_CONTINUOUS_JSON" +ts_check_test_command "$TESTPROG" + +ts_run $TESTPROG --width 80 >> $TS_OUTPUT 2>> $TS_ERRLOG + +ts_finalize