LCOV - code coverage report
Current view: top level - test - test-format-table.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 64 64 100.0 %
Date: 2019-08-23 13:36:53 Functions: 2 2 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 32 64 50.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include "alloc-util.h"
       4                 :            : #include "format-table.h"
       5                 :            : #include "string-util.h"
       6                 :            : #include "time-util.h"
       7                 :            : 
       8                 :          4 : static void test_issue_9549(void) {
       9                 :          4 :         _cleanup_(table_unrefp) Table *table = NULL;
      10                 :          4 :         _cleanup_free_ char *formatted = NULL;
      11                 :            : 
      12         [ -  + ]:          4 :         assert_se(table = table_new("name", "type", "ro", "usage", "created", "modified"));
      13         [ -  + ]:          4 :         assert_se(table_set_align_percent(table, TABLE_HEADER_CELL(3), 100) >= 0);
      14         [ -  + ]:          4 :         assert_se(table_add_many(table,
      15                 :            :                                  TABLE_STRING, "foooo",
      16                 :            :                                  TABLE_STRING, "raw",
      17                 :            :                                  TABLE_BOOLEAN, false,
      18                 :            :                                  TABLE_SIZE, (uint64_t) (673.7*1024*1024),
      19                 :            :                                  TABLE_STRING, "Wed 2018-07-11 00:10:33 JST",
      20                 :            :                                  TABLE_STRING, "Wed 2018-07-11 00:16:00 JST") >= 0);
      21                 :            : 
      22                 :          4 :         table_set_width(table, 75);
      23         [ -  + ]:          4 :         assert_se(table_format(table, &formatted) >= 0);
      24                 :            : 
      25                 :          4 :         printf("%s\n", formatted);
      26         [ -  + ]:          4 :         assert_se(streq(formatted,
      27                 :            :                         "NAME  TYPE RO  USAGE CREATED                    MODIFIED                   \n"
      28                 :            :                         "foooo raw  no 673.6M Wed 2018-07-11 00:10:33 J… Wed 2018-07-11 00:16:00 JST\n"
      29                 :            :                         ));
      30                 :          4 : }
      31                 :            : 
      32                 :          4 : int main(int argc, char *argv[]) {
      33                 :            : 
      34                 :          4 :         _cleanup_(table_unrefp) Table *t = NULL;
      35                 :          8 :         _cleanup_free_ char *formatted = NULL;
      36                 :            : 
      37         [ -  + ]:          4 :         assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
      38         [ -  + ]:          4 :         assert_se(setenv("COLUMNS", "40", 1) >= 0);
      39                 :            : 
      40         [ -  + ]:          4 :         assert_se(t = table_new("one", "two", "three"));
      41                 :            : 
      42         [ -  + ]:          4 :         assert_se(table_set_align_percent(t, TABLE_HEADER_CELL(2), 100) >= 0);
      43                 :            : 
      44         [ -  + ]:          4 :         assert_se(table_add_many(t,
      45                 :            :                                  TABLE_STRING, "xxx",
      46                 :            :                                  TABLE_STRING, "yyy",
      47                 :            :                                  TABLE_BOOLEAN, true) >= 0);
      48                 :            : 
      49         [ -  + ]:          4 :         assert_se(table_add_many(t,
      50                 :            :                                  TABLE_STRING, "a long field",
      51                 :            :                                  TABLE_STRING, "yyy",
      52                 :            :                                  TABLE_SET_UPPERCASE, 1,
      53                 :            :                                  TABLE_BOOLEAN, false) >= 0);
      54                 :            : 
      55         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
      56                 :          4 :         printf("%s\n", formatted);
      57                 :            : 
      58         [ -  + ]:          4 :         assert_se(streq(formatted,
      59                 :            :                         "ONE          TWO THREE\n"
      60                 :            :                         "xxx          yyy   yes\n"
      61                 :            :                         "a long field YYY    no\n"));
      62                 :            : 
      63                 :          4 :         formatted = mfree(formatted);
      64                 :            : 
      65                 :          4 :         table_set_width(t, 40);
      66                 :            : 
      67         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
      68                 :          4 :         printf("%s\n", formatted);
      69                 :            : 
      70         [ -  + ]:          4 :         assert_se(streq(formatted,
      71                 :            :                         "ONE                TWO             THREE\n"
      72                 :            :                         "xxx                yyy               yes\n"
      73                 :            :                         "a long field       YYY                no\n"));
      74                 :            : 
      75                 :          4 :         formatted = mfree(formatted);
      76                 :            : 
      77                 :          4 :         table_set_width(t, 12);
      78         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
      79                 :          4 :         printf("%s\n", formatted);
      80                 :            : 
      81         [ -  + ]:          4 :         assert_se(streq(formatted,
      82                 :            :                         "ONE TWO THR…\n"
      83                 :            :                         "xxx yyy  yes\n"
      84                 :            :                         "a … YYY   no\n"));
      85                 :            : 
      86                 :          4 :         formatted = mfree(formatted);
      87                 :            : 
      88                 :          4 :         table_set_width(t, 5);
      89         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
      90                 :          4 :         printf("%s\n", formatted);
      91                 :            : 
      92         [ -  + ]:          4 :         assert_se(streq(formatted,
      93                 :            :                         "… … …\n"
      94                 :            :                         "… … …\n"
      95                 :            :                         "… … …\n"));
      96                 :            : 
      97                 :          4 :         formatted = mfree(formatted);
      98                 :            : 
      99                 :          4 :         table_set_width(t, 3);
     100         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
     101                 :          4 :         printf("%s\n", formatted);
     102                 :            : 
     103         [ -  + ]:          4 :         assert_se(streq(formatted,
     104                 :            :                         "… … …\n"
     105                 :            :                         "… … …\n"
     106                 :            :                         "… … …\n"));
     107                 :            : 
     108                 :          4 :         formatted = mfree(formatted);
     109                 :            : 
     110                 :          4 :         table_set_width(t, (size_t) -1);
     111         [ -  + ]:          4 :         assert_se(table_set_sort(t, (size_t) 0, (size_t) 2, (size_t) -1) >= 0);
     112                 :            : 
     113         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
     114                 :          4 :         printf("%s\n", formatted);
     115                 :            : 
     116         [ -  + ]:          4 :         assert_se(streq(formatted,
     117                 :            :                         "ONE          TWO THREE\n"
     118                 :            :                         "a long field YYY    no\n"
     119                 :            :                         "xxx          yyy   yes\n"));
     120                 :            : 
     121                 :          4 :         formatted = mfree(formatted);
     122                 :            : 
     123                 :          4 :         table_set_header(t, false);
     124                 :            : 
     125         [ -  + ]:          4 :         assert_se(table_add_many(t,
     126                 :            :                                  TABLE_STRING, "fäää",
     127                 :            :                                  TABLE_STRING, "uuu",
     128                 :            :                                  TABLE_BOOLEAN, true) >= 0);
     129                 :            : 
     130         [ -  + ]:          4 :         assert_se(table_add_many(t,
     131                 :            :                                  TABLE_STRING, "fäää",
     132                 :            :                                  TABLE_STRING, "zzz",
     133                 :            :                                  TABLE_BOOLEAN, false) >= 0);
     134                 :            : 
     135         [ -  + ]:          4 :         assert_se(table_add_many(t,
     136                 :            :                                  TABLE_EMPTY,
     137                 :            :                                  TABLE_SIZE, (uint64_t) 4711,
     138                 :            :                                  TABLE_TIMESPAN, (usec_t) 5*USEC_PER_MINUTE) >= 0);
     139                 :            : 
     140         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
     141                 :          4 :         printf("%s\n", formatted);
     142                 :            : 
     143         [ -  + ]:          4 :         assert_se(streq(formatted,
     144                 :            :                         "a long field YYY    no\n"
     145                 :            :                         "fäää         zzz    no\n"
     146                 :            :                         "fäää         uuu   yes\n"
     147                 :            :                         "xxx          yyy   yes\n"
     148                 :            :                         "             4.6K 5min\n"));
     149                 :            : 
     150                 :          4 :         formatted = mfree(formatted);
     151                 :            : 
     152         [ -  + ]:          4 :         assert_se(table_set_display(t, (size_t) 2, (size_t) 0, (size_t) 2, (size_t) 0, (size_t) 0, (size_t) -1) >= 0);
     153                 :            : 
     154         [ -  + ]:          4 :         assert_se(table_format(t, &formatted) >= 0);
     155                 :          4 :         printf("%s\n", formatted);
     156                 :            : 
     157         [ -  + ]:          4 :         assert_se(streq(formatted,
     158                 :            :                         "  no a long f…   no a long f… a long fi…\n"
     159                 :            :                         "  no fäää        no fäää      fäää      \n"
     160                 :            :                         " yes fäää       yes fäää      fäää      \n"
     161                 :            :                         " yes xxx        yes xxx       xxx       \n"
     162                 :            :                         "5min           5min                     \n"));
     163                 :            : 
     164                 :          4 :         test_issue_9549();
     165                 :            : 
     166                 :          4 :         return 0;
     167                 :            : }

Generated by: LCOV version 1.14