cdown / rpms / util-linux

Forked from rpms/util-linux 2 years ago
Clone
Blob Blame History Raw
From 83f79678dbb9cb48969968fa4df57d98c67a321d Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak@redhat.com>
Date: Thu, 31 May 2018 11:44:35 +0200
Subject: [PATCH 154/173] tests: backport libsmartcols tests

Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1561350
Signed-off-by: Karel Zak <kzak@redhat.com>
---
 tests/commands.sh                                  |   2 +
 tests/expected/libsmartcols/fromfile               |   1 +
 .../libsmartcols/fromfile-column-separator         |  11 +
 tests/expected/libsmartcols/fromfile-export        |  10 +
 tests/expected/libsmartcols/fromfile-hidden        |  11 +
 tests/expected/libsmartcols/fromfile-noextremes    |  12 ++
 tests/expected/libsmartcols/fromfile-raw           |  11 +
 tests/expected/libsmartcols/fromfile-right         |  11 +
 tests/expected/libsmartcols/fromfile-right-maxout  |  11 +
 tests/expected/libsmartcols/fromfile-strictwidth   |  11 +
 tests/expected/libsmartcols/fromfile-tree          |  11 +
 tests/expected/libsmartcols/fromfile-tree-end      |  11 +
 tests/expected/libsmartcols/fromfile-tree-json     |  29 +++
 tests/expected/libsmartcols/fromfile-tree-middle   |  11 +
 tests/expected/libsmartcols/fromfile-trunc         |  11 +
 tests/expected/libsmartcols/fromfile-wrap          |  17 ++
 tests/expected/libsmartcols/fromfile-wrap-tree     |  18 ++
 tests/expected/libsmartcols/fromfile-wrapnl        |  19 ++
 tests/expected/libsmartcols/fromfile-wrapnl-tree   |  19 ++
 tests/expected/libsmartcols/title                  |  16 ++
 tests/ts/libsmartcols/files/col-hidden             |   3 +
 tests/ts/libsmartcols/files/col-id                 |   3 +
 tests/ts/libsmartcols/files/col-name               |   3 +
 tests/ts/libsmartcols/files/col-noextremes         |   3 +
 tests/ts/libsmartcols/files/col-number             |   3 +
 tests/ts/libsmartcols/files/col-parent             |   3 +
 tests/ts/libsmartcols/files/col-strict             |   3 +
 tests/ts/libsmartcols/files/col-string             |   3 +
 tests/ts/libsmartcols/files/col-tree               |   3 +
 tests/ts/libsmartcols/files/col-trunc              |   3 +
 tests/ts/libsmartcols/files/col-wrap               |   3 +
 tests/ts/libsmartcols/files/col-wrapnl             |   3 +
 tests/ts/libsmartcols/files/data-id                |  10 +
 tests/ts/libsmartcols/files/data-number            |  10 +
 tests/ts/libsmartcols/files/data-number-tiny       |  10 +
 tests/ts/libsmartcols/files/data-parent            |  10 +
 tests/ts/libsmartcols/files/data-string            |  10 +
 tests/ts/libsmartcols/files/data-string-extreme    |  10 +
 tests/ts/libsmartcols/files/data-string-long       |  10 +
 tests/ts/libsmartcols/files/data-string-nl         |  10 +
 tests/ts/libsmartcols/fromfile                     | 240 +++++++++++++++++++++
 tests/ts/libsmartcols/title                        |  28 +++
 42 files changed, 637 insertions(+)
 create mode 100644 tests/expected/libsmartcols/fromfile
 create mode 100644 tests/expected/libsmartcols/fromfile-column-separator
 create mode 100644 tests/expected/libsmartcols/fromfile-export
 create mode 100644 tests/expected/libsmartcols/fromfile-hidden
 create mode 100644 tests/expected/libsmartcols/fromfile-noextremes
 create mode 100644 tests/expected/libsmartcols/fromfile-raw
 create mode 100644 tests/expected/libsmartcols/fromfile-right
 create mode 100644 tests/expected/libsmartcols/fromfile-right-maxout
 create mode 100644 tests/expected/libsmartcols/fromfile-strictwidth
 create mode 100644 tests/expected/libsmartcols/fromfile-tree
 create mode 100644 tests/expected/libsmartcols/fromfile-tree-end
 create mode 100644 tests/expected/libsmartcols/fromfile-tree-json
 create mode 100644 tests/expected/libsmartcols/fromfile-tree-middle
 create mode 100644 tests/expected/libsmartcols/fromfile-trunc
 create mode 100644 tests/expected/libsmartcols/fromfile-wrap
 create mode 100644 tests/expected/libsmartcols/fromfile-wrap-tree
 create mode 100644 tests/expected/libsmartcols/fromfile-wrapnl
 create mode 100644 tests/expected/libsmartcols/fromfile-wrapnl-tree
 create mode 100644 tests/expected/libsmartcols/title
 create mode 100644 tests/ts/libsmartcols/files/col-hidden
 create mode 100644 tests/ts/libsmartcols/files/col-id
 create mode 100644 tests/ts/libsmartcols/files/col-name
 create mode 100644 tests/ts/libsmartcols/files/col-noextremes
 create mode 100644 tests/ts/libsmartcols/files/col-number
 create mode 100644 tests/ts/libsmartcols/files/col-parent
 create mode 100644 tests/ts/libsmartcols/files/col-strict
 create mode 100644 tests/ts/libsmartcols/files/col-string
 create mode 100644 tests/ts/libsmartcols/files/col-tree
 create mode 100644 tests/ts/libsmartcols/files/col-trunc
 create mode 100644 tests/ts/libsmartcols/files/col-wrap
 create mode 100644 tests/ts/libsmartcols/files/col-wrapnl
 create mode 100644 tests/ts/libsmartcols/files/data-id
 create mode 100644 tests/ts/libsmartcols/files/data-number
 create mode 100644 tests/ts/libsmartcols/files/data-number-tiny
 create mode 100644 tests/ts/libsmartcols/files/data-parent
 create mode 100644 tests/ts/libsmartcols/files/data-string
 create mode 100644 tests/ts/libsmartcols/files/data-string-extreme
 create mode 100644 tests/ts/libsmartcols/files/data-string-long
 create mode 100644 tests/ts/libsmartcols/files/data-string-nl
 create mode 100755 tests/ts/libsmartcols/fromfile
 create mode 100755 tests/ts/libsmartcols/title

diff --git a/tests/commands.sh b/tests/commands.sh
index e769b5dac..96b8dc97c 100644
--- a/tests/commands.sh
+++ b/tests/commands.sh
@@ -20,6 +20,8 @@ TS_HELPER_PARTITIONS="$top_builddir/sample-partitions"
 TS_HELPER_PATHS="$top_builddir/test_pathnames"
 TS_HELPER_STRUTILS="$top_builddir/test_strutils"
 TS_HELPER_SYSINFO="$top_builddir/test_sysinfo"
+TS_HELPER_LIBSMARTCOLS_FROMFILE="$top_builddir/sample-scols-fromfile"
+TS_HELPER_LIBSMARTCOLS_TITLE="$top_builddir/sample-scols-title"
 
 # paths to commands
 TS_CMD_BLKID=${TS_CMD_BLKID-"$top_builddir/blkid"}
diff --git a/tests/expected/libsmartcols/fromfile b/tests/expected/libsmartcols/fromfile
new file mode 100644
index 000000000..4155aa36f
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile
@@ -0,0 +1 @@
+...done.
diff --git a/tests/expected/libsmartcols/fromfile-column-separator b/tests/expected/libsmartcols/fromfile-column-separator
new file mode 100644
index 000000000..8c5aa2aff
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-column-separator
@@ -0,0 +1,11 @@
+NAME  |      NUM|TRUNC
+aaaa  |        0|qqqqqqqqqqqqqqqqqX
+bbb   |      100|dddddddddddddX
+ccccc |       21|ffffffffffffffffffffffffffffffffffffffffX
+dddddd|        3|ssssssssssX
+ee    |      411|ddddddddddddddddddddddddddX
+ffff  |     5111|jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX
+gggggg|678993321|mmmmmmmmmmmmmmmmmmmX
+hhh   |  7666666|lllllllllllllllllllllllllllllllllllllX
+iiiiii|     8765|yyyyyyyyyyyyyyyyyyyyyyyyyyyyX
+jj    |   987456|pppppppppX
diff --git a/tests/expected/libsmartcols/fromfile-export b/tests/expected/libsmartcols/fromfile-export
new file mode 100644
index 000000000..f63afd882
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-export
@@ -0,0 +1,10 @@
+NAME="aaaa" NUM="0" TRUNC="qqqqqqqqqqqqqqqqqX"
+NAME="bbb" NUM="100" TRUNC="dddddddddddddX"
+NAME="ccccc" NUM="21" TRUNC="ffffffffffffffffffffffffffffffffffffffffX"
+NAME="dddddd" NUM="3" TRUNC="ssssssssssX"
+NAME="ee" NUM="411" TRUNC="ddddddddddddddddddddddddddX"
+NAME="ffff" NUM="5111" TRUNC="jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX"
+NAME="gggggg" NUM="678993321" TRUNC="mmmmmmmmmmmmmmmmmmmX"
+NAME="hhh" NUM="7666666" TRUNC="lllllllllllllllllllllllllllllllllllllX"
+NAME="iiiiii" NUM="8765" TRUNC="yyyyyyyyyyyyyyyyyyyyyyyyyyyyX"
+NAME="jj" NUM="987456" TRUNC="pppppppppX"
diff --git a/tests/expected/libsmartcols/fromfile-hidden b/tests/expected/libsmartcols/fromfile-hidden
new file mode 100644
index 000000000..cf50bcb3e
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-hidden
@@ -0,0 +1,11 @@
+NAME         NUM
+aaaa           0
+bbb          100
+ccccc         21
+dddddd         3
+ee           411
+ffff        5111
+gggggg 678993321
+hhh      7666666
+iiiiii      8765
+jj        987456
diff --git a/tests/expected/libsmartcols/fromfile-noextremes b/tests/expected/libsmartcols/fromfile-noextremes
new file mode 100644
index 000000000..4bac08070
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-noextremes
@@ -0,0 +1,12 @@
+NAME   NOEXTREME         NUM NAME         NUM
+aaaa   qqqqqqX             0 aaaa           0
+bbb    ddddddddX         100 bbb          100
+ccccc  ffffffffffffffffffffffffffffffffffX
+                          21 ccccc         21
+dddddd sssX                3 dddddd         3
+ee     ddX               411 ee           411
+ffff   jjjjjX           5111 ffff        5111
+gggggg mmmmmmmX    678993321 gggggg 678993321
+hhh    llllllllllX   7666666 hhh      7666666
+iiiiii yyyyyyX          8765 iiiiii      8765
+jj     pppppX         987456 jj        987456
diff --git a/tests/expected/libsmartcols/fromfile-raw b/tests/expected/libsmartcols/fromfile-raw
new file mode 100644
index 000000000..cc188aaab
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-raw
@@ -0,0 +1,11 @@
+NAME NUM TRUNC
+aaaa 0 qqqqqqqqqqqqqqqqqX
+bbb 100 dddddddddddddX
+ccccc 21 ffffffffffffffffffffffffffffffffffffffffX
+dddddd 3 ssssssssssX
+ee 411 ddddddddddddddddddddddddddX
+ffff 5111 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX
+gggggg 678993321 mmmmmmmmmmmmmmmmmmmX
+hhh 7666666 lllllllllllllllllllllllllllllllllllllX
+iiiiii 8765 yyyyyyyyyyyyyyyyyyyyyyyyyyyyX
+jj 987456 pppppppppX
diff --git a/tests/expected/libsmartcols/fromfile-right b/tests/expected/libsmartcols/fromfile-right
new file mode 100644
index 000000000..d78285a13
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-right
@@ -0,0 +1,11 @@
+NAME         NUM STRINGS
+aaaa           0 qqqqqqqqqqqqqqqqqX
+bbb          100 dddddddddddddX
+ccccc         21 ffffffffffffffffffffffffffffffffffffffffX
+dddddd         3 ssssssssssX
+ee           411 ddddddddddddddddddddddddddX
+ffff        5111 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX
+gggggg 678993321 mmmmmmmmmmmmmmmmmmmX
+hhh      7666666 lllllllllllllllllllllllllllllllllllllX
+iiiiii      8765 yyyyyyyyyyyyyyyyyyyyyyyyyyyyX
+jj        987456 pppppppppX
diff --git a/tests/expected/libsmartcols/fromfile-right-maxout b/tests/expected/libsmartcols/fromfile-right-maxout
new file mode 100644
index 000000000..3bcb65abd
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-right-maxout
@@ -0,0 +1,11 @@
+NAME                                                                         NUM
+aaaa                                                                           0
+bbb                                                                          100
+ccccc                                                                         21
+dddddd                                                                         3
+ee                                                                           411
+ffff                                                                        5111
+gggggg                                                                 678993321
+hhh                                                                      7666666
+iiiiii                                                                      8765
+jj                                                                        987456
diff --git a/tests/expected/libsmartcols/fromfile-strictwidth b/tests/expected/libsmartcols/fromfile-strictwidth
new file mode 100644
index 000000000..41054b235
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-strictwidth
@@ -0,0 +1,11 @@
+NAME                 STRICT       NUM
+aaaa                      0         0
+bbb                       1       100
+ccccc                     2        21
+dddddd                    3         3
+ee                        4       411
+ffff                      5      5111
+gggggg                    6 678993321
+hhh                       7   7666666
+iiiiii                    8      8765
+jj                        9    987456
diff --git a/tests/expected/libsmartcols/fromfile-tree b/tests/expected/libsmartcols/fromfile-tree
new file mode 100644
index 000000000..9d345f8dc
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-tree
@@ -0,0 +1,11 @@
+TREE           ID PARENT STRINGS
+aaaa            1      0 qqqqqqqqqqqqqqqqqX
+|-bbb           2      1 dddddddddddddX
+| |-ee          5      2 ddddddddddddddddddddddddddX
+| `-ffff        6      2 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX
+|-ccccc         3      1 ffffffffffffffffffffffffffffffffffffffffX
+| `-gggggg      7      3 mmmmmmmmmmmmmmmmmmmX
+|   |-hhh       8      7 lllllllllllllllllllllllllllllllllllllX
+|   | `-iiiiii  9      8 yyyyyyyyyyyyyyyyyyyyyyyyyyyyX
+|   `-jj       10      7 pppppppppX
+`-dddddd        4      1 ssssssssssX
diff --git a/tests/expected/libsmartcols/fromfile-tree-end b/tests/expected/libsmartcols/fromfile-tree-end
new file mode 100644
index 000000000..41aebff56
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-tree-end
@@ -0,0 +1,11 @@
+ID PARENT STRINGS                                            TREE
+ 1      0 qqqqqqqqqqqqqqqqqX                                 aaaa
+ 2      1 dddddddddddddX                                     |-bbb
+ 5      2 ddddddddddddddddddddddddddX                        | |-ee
+ 6      2 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX | `-ffff
+ 3      1 ffffffffffffffffffffffffffffffffffffffffX          |-ccccc
+ 7      3 mmmmmmmmmmmmmmmmmmmX                               | `-gggggg
+ 8      7 lllllllllllllllllllllllllllllllllllllX             |   |-hhh
+ 9      8 yyyyyyyyyyyyyyyyyyyyyyyyyyyyX                      |   | `-iiiiii
+10      7 pppppppppX                                         |   `-jj
+ 4      1 ssssssssssX                                        `-dddddd
diff --git a/tests/expected/libsmartcols/fromfile-tree-json b/tests/expected/libsmartcols/fromfile-tree-json
new file mode 100644
index 000000000..5b3546d0a
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-tree-json
@@ -0,0 +1,29 @@
+{
+   "testtable": [
+      {"tree":"aaaa", "id":"1", "parent":"0", "strings":"qqqqqqqqqqqqqqqqqX",
+         "children": [
+            {"tree":"bbb", "id":"2", "parent":"1", "strings":"dddddddddddddX",
+               "children": [
+                  {"tree":"ee", "id":"5", "parent":"2", "strings":"ddddddddddddddddddddddddddX"},
+                  {"tree":"ffff", "id":"6", "parent":"2", "strings":"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX"}
+               ]
+            },
+            {"tree":"ccccc", "id":"3", "parent":"1", "strings":"ffffffffffffffffffffffffffffffffffffffffX",
+               "children": [
+                  {"tree":"gggggg", "id":"7", "parent":"3", "strings":"mmmmmmmmmmmmmmmmmmmX",
+                     "children": [
+                        {"tree":"hhh", "id":"8", "parent":"7", "strings":"lllllllllllllllllllllllllllllllllllllX",
+                           "children": [
+                              {"tree":"iiiiii", "id":"9", "parent":"8", "strings":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyX"}
+                           ]
+                        },
+                        {"tree":"jj", "id":"10", "parent":"7", "strings":"pppppppppX"}
+                     ]
+                  }
+               ]
+            },
+            {"tree":"dddddd", "id":"4", "parent":"1", "strings":"ssssssssssX"}
+         ]
+      }
+   ]
+}
diff --git a/tests/expected/libsmartcols/fromfile-tree-middle b/tests/expected/libsmartcols/fromfile-tree-middle
new file mode 100644
index 000000000..b2183313c
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-tree-middle
@@ -0,0 +1,11 @@
+ID PARENT TREE           STRINGS
+ 1      0 aaaa           qqqqqqqqqqqqqqqqqX
+ 2      1 |-bbb          dddddddddddddX
+ 5      2 | |-ee         ddddddddddddddddddddddddddX
+ 6      2 | `-ffff       jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX
+ 3      1 |-ccccc        ffffffffffffffffffffffffffffffffffffffffX
+ 7      3 | `-gggggg     mmmmmmmmmmmmmmmmmmmX
+ 8      7 |   |-hhh      lllllllllllllllllllllllllllllllllllllX
+ 9      8 |   | `-iiiiii yyyyyyyyyyyyyyyyyyyyyyyyyyyyX
+10      7 |   `-jj       pppppppppX
+ 4      1 `-dddddd       ssssssssssX
diff --git a/tests/expected/libsmartcols/fromfile-trunc b/tests/expected/libsmartcols/fromfile-trunc
new file mode 100644
index 000000000..6a095dc88
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-trunc
@@ -0,0 +1,11 @@
+NAME         NUM TRUNC
+aaaa           0 qqqqqqqqqqqqqqqqqX
+bbb          100 dddddddddddddX
+ccccc         21 fffffffffffffffffffffff
+dddddd         3 ssssssssssX
+ee           411 ddddddddddddddddddddddd
+ffff        5111 jjjjjjjjjjjjjjjjjjjjjjj
+gggggg 678993321 mmmmmmmmmmmmmmmmmmmX
+hhh      7666666 lllllllllllllllllllllll
+iiiiii      8765 yyyyyyyyyyyyyyyyyyyyyyy
+jj        987456 pppppppppX
diff --git a/tests/expected/libsmartcols/fromfile-wrap b/tests/expected/libsmartcols/fromfile-wrap
new file mode 100644
index 000000000..bb94f4973
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-wrap
@@ -0,0 +1,17 @@
+NAME         NUM WRAP
+aaaa           0 qqqqqqqqqqqqqqqqqX
+bbb          100 dddddddddddddX
+ccccc         21 fffffffffffffffffffffff
+                 fffffffffffffffffX
+dddddd         3 ssssssssssX
+ee           411 ddddddddddddddddddddddd
+                 dddX
+ffff        5111 jjjjjjjjjjjjjjjjjjjjjjj
+                 jjjjjjjjjjjjjjjjjjjjjjj
+                 jjjX
+gggggg 678993321 mmmmmmmmmmmmmmmmmmmX
+hhh      7666666 lllllllllllllllllllllll
+                 llllllllllllllX
+iiiiii      8765 yyyyyyyyyyyyyyyyyyyyyyy
+                 yyyyyX
+jj        987456 pppppppppX
diff --git a/tests/expected/libsmartcols/fromfile-wrap-tree b/tests/expected/libsmartcols/fromfile-wrap-tree
new file mode 100644
index 000000000..a2db7a4ac
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-wrap-tree
@@ -0,0 +1,18 @@
+TREE           ID PARENT WRAP
+aaaa            1      0 qqqqqqqqqqqqqqqqqX
+|-bbb           2      1 dddddddddddddX
+| |-ee          5      2 dddddddddddddddddddd
+| |                      ddddddX
+| `-ffff        6      2 jjjjjjjjjjjjjjjjjjjj
+|                        jjjjjjjjjjjjjjjjjjjj
+|                        jjjjjjjjjX
+|-ccccc         3      1 ffffffffffffffffffff
+| |                      ffffffffffffffffffff
+| |                      X
+| `-gggggg      7      3 mmmmmmmmmmmmmmmmmmmX
+|   |-hhh       8      7 llllllllllllllllllll
+|   | |                  lllllllllllllllllX
+|   | `-iiiiii  9      8 yyyyyyyyyyyyyyyyyyyy
+|   |                    yyyyyyyyX
+|   `-jj       10      7 pppppppppX
+`-dddddd        4      1 ssssssssssX
diff --git a/tests/expected/libsmartcols/fromfile-wrapnl b/tests/expected/libsmartcols/fromfile-wrapnl
new file mode 100644
index 000000000..c747ebb08
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-wrapnl
@@ -0,0 +1,19 @@
+NAME         NUM WRAPNL
+aaaa           0 aaa
+bbb          100 bbbbb
+ccccc         21 cccc
+                 CCCC
+dddddd         3 dddddddd
+                 DDDD
+                 DD
+ee           411 hello
+                 baby
+ffff        5111 aaa
+                 bbb
+                 ccc
+                 ddd
+gggggg 678993321 eee
+hhh      7666666 fffff
+iiiiii      8765 g
+                 hhhhh
+jj        987456 ppppppppp
diff --git a/tests/expected/libsmartcols/fromfile-wrapnl-tree b/tests/expected/libsmartcols/fromfile-wrapnl-tree
new file mode 100644
index 000000000..3862cf16a
--- /dev/null
+++ b/tests/expected/libsmartcols/fromfile-wrapnl-tree
@@ -0,0 +1,19 @@
+TREE           ID PARENT WRAPNL
+aaaa            1      0 aaa
+|-bbb           2      1 bbbbb
+| |-ee          5      2 hello
+| |                      baby
+| `-ffff        6      2 aaa
+|                        bbb
+|                        ccc
+|                        ddd
+|-ccccc         3      1 cccc
+| |                      CCCC
+| `-gggggg      7      3 eee
+|   |-hhh       8      7 fffff
+|   | `-iiiiii  9      8 g
+|   |                    hhhhh
+|   `-jj       10      7 ppppppppp
+`-dddddd        4      1 dddddddd
+                         DDDD
+                         DD
diff --git a/tests/expected/libsmartcols/title b/tests/expected/libsmartcols/title
new file mode 100644
index 000000000..bb5d7225a
--- /dev/null
+++ b/tests/expected/libsmartcols/title
@@ -0,0 +1,16 @@
+                                                             This is right title
+NAME DATA
+foo  bla bla bla
+bar  alb alb alb
+This is left title (without padding)
+NAME DATA
+foo  bla bla bla
+bar  alb alb alb
+=======================This is center title (with padding)======================
+NAME DATA
+foo  bla bla bla
+bar  alb alb alb
+This is left title (with padding)-----------------------------------------------
+NAME DATA
+foo  bla bla bla
+bar  alb alb alb
diff --git a/tests/ts/libsmartcols/files/col-hidden b/tests/ts/libsmartcols/files/col-hidden
new file mode 100644
index 000000000..83182a8ee
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-hidden
@@ -0,0 +1,3 @@
+FOO
+0
+hidden
diff --git a/tests/ts/libsmartcols/files/col-id b/tests/ts/libsmartcols/files/col-id
new file mode 100644
index 000000000..0188f42a0
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-id
@@ -0,0 +1,3 @@
+ID
+0
+right
diff --git a/tests/ts/libsmartcols/files/col-name b/tests/ts/libsmartcols/files/col-name
new file mode 100644
index 000000000..0a98f29cf
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-name
@@ -0,0 +1,3 @@
+NAME
+0
+none
diff --git a/tests/ts/libsmartcols/files/col-noextremes b/tests/ts/libsmartcols/files/col-noextremes
new file mode 100644
index 000000000..715edce7e
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-noextremes
@@ -0,0 +1,3 @@
+NOEXTREME
+0
+noextremes
diff --git a/tests/ts/libsmartcols/files/col-number b/tests/ts/libsmartcols/files/col-number
new file mode 100644
index 000000000..34a70e4a4
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-number
@@ -0,0 +1,3 @@
+NUM
+0
+right
diff --git a/tests/ts/libsmartcols/files/col-parent b/tests/ts/libsmartcols/files/col-parent
new file mode 100644
index 000000000..86fe08ced
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-parent
@@ -0,0 +1,3 @@
+PARENT
+0
+right
diff --git a/tests/ts/libsmartcols/files/col-strict b/tests/ts/libsmartcols/files/col-strict
new file mode 100644
index 000000000..62bb96b9a
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-strict
@@ -0,0 +1,3 @@
+STRICT
+20
+strictwidth,right
diff --git a/tests/ts/libsmartcols/files/col-string b/tests/ts/libsmartcols/files/col-string
new file mode 100644
index 000000000..7e2904b9f
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-string
@@ -0,0 +1,3 @@
+STRINGS
+0
+none
diff --git a/tests/ts/libsmartcols/files/col-tree b/tests/ts/libsmartcols/files/col-tree
new file mode 100644
index 000000000..507688000
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-tree
@@ -0,0 +1,3 @@
+TREE
+0
+tree
diff --git a/tests/ts/libsmartcols/files/col-trunc b/tests/ts/libsmartcols/files/col-trunc
new file mode 100644
index 000000000..2887b4314
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-trunc
@@ -0,0 +1,3 @@
+TRUNC
+0
+trunc
diff --git a/tests/ts/libsmartcols/files/col-wrap b/tests/ts/libsmartcols/files/col-wrap
new file mode 100644
index 000000000..dc4ca340e
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-wrap
@@ -0,0 +1,3 @@
+WRAP
+0
+wrap
diff --git a/tests/ts/libsmartcols/files/col-wrapnl b/tests/ts/libsmartcols/files/col-wrapnl
new file mode 100644
index 000000000..0a18fd146
--- /dev/null
+++ b/tests/ts/libsmartcols/files/col-wrapnl
@@ -0,0 +1,3 @@
+WRAPNL
+0
+wrapnl
diff --git a/tests/ts/libsmartcols/files/data-id b/tests/ts/libsmartcols/files/data-id
new file mode 100644
index 000000000..f00c965d8
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-id
@@ -0,0 +1,10 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
diff --git a/tests/ts/libsmartcols/files/data-number b/tests/ts/libsmartcols/files/data-number
new file mode 100644
index 000000000..562d75061
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-number
@@ -0,0 +1,10 @@
+0
+100
+21
+3
+411
+5111
+678993321
+7666666
+8765
+987456
diff --git a/tests/ts/libsmartcols/files/data-number-tiny b/tests/ts/libsmartcols/files/data-number-tiny
new file mode 100644
index 000000000..8b1acc12b
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-number-tiny
@@ -0,0 +1,10 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
diff --git a/tests/ts/libsmartcols/files/data-parent b/tests/ts/libsmartcols/files/data-parent
new file mode 100644
index 000000000..aa5071608
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-parent
@@ -0,0 +1,10 @@
+0
+1
+1
+1
+2
+2
+3
+7
+8
+7
diff --git a/tests/ts/libsmartcols/files/data-string b/tests/ts/libsmartcols/files/data-string
new file mode 100644
index 000000000..dff6e9c80
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-string
@@ -0,0 +1,10 @@
+aaaa
+bbb
+ccccc
+dddddd
+ee
+ffff
+gggggg
+hhh
+iiiiii
+jj
diff --git a/tests/ts/libsmartcols/files/data-string-extreme b/tests/ts/libsmartcols/files/data-string-extreme
new file mode 100644
index 000000000..6fb395d7a
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-string-extreme
@@ -0,0 +1,10 @@
+qqqqqqX
+ddddddddX
+ffffffffffffffffffffffffffffffffffX
+sssX
+ddX
+jjjjjX
+mmmmmmmX
+llllllllllX
+yyyyyyX
+pppppX
diff --git a/tests/ts/libsmartcols/files/data-string-long b/tests/ts/libsmartcols/files/data-string-long
new file mode 100644
index 000000000..1b5683aa4
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-string-long
@@ -0,0 +1,10 @@
+qqqqqqqqqqqqqqqqqX
+dddddddddddddX
+ffffffffffffffffffffffffffffffffffffffffX
+ssssssssssX
+ddddddddddddddddddddddddddX
+jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjX
+mmmmmmmmmmmmmmmmmmmX
+lllllllllllllllllllllllllllllllllllllX
+yyyyyyyyyyyyyyyyyyyyyyyyyyyyX
+pppppppppX
diff --git a/tests/ts/libsmartcols/files/data-string-nl b/tests/ts/libsmartcols/files/data-string-nl
new file mode 100644
index 000000000..7822e57bc
--- /dev/null
+++ b/tests/ts/libsmartcols/files/data-string-nl
@@ -0,0 +1,10 @@
+aaa
+bbbbb
+cccc\nCCCC
+dddddddd\nDDDD\nDD
+hello\nbaby
+aaa\nbbb\nccc\nddd
+eee
+fffff
+g\nhhhhh
+ppppppppp
diff --git a/tests/ts/libsmartcols/fromfile b/tests/ts/libsmartcols/fromfile
new file mode 100755
index 000000000..311dd7e1e
--- /dev/null
+++ b/tests/ts/libsmartcols/fromfile
@@ -0,0 +1,240 @@
+#!/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="fromfile"
+
+. $TS_TOPDIR/functions.sh
+ts_init "$*"
+
+TESTPROG="$TS_HELPER_LIBSMARTCOLS_FROMFILE"
+ts_check_test_command "$TESTPROG"
+
+ts_init_subtest "tree"
+$TESTPROG --nlines 10 \
+	--tree-id-column 1 \
+	--tree-parent-column 2 \
+	--column $TS_SELF/files/col-tree \
+	--column $TS_SELF/files/col-id \
+	--column $TS_SELF/files/col-parent \
+	--column $TS_SELF/files/col-string \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-id \
+	$TS_SELF/files/data-parent \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "tree-json"
+$TESTPROG --nlines 10 --json \
+	--tree-id-column 1 \
+	--tree-parent-column 2 \
+	--column $TS_SELF/files/col-tree \
+	--column $TS_SELF/files/col-id \
+	--column $TS_SELF/files/col-parent \
+	--column $TS_SELF/files/col-string \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-id \
+	$TS_SELF/files/data-parent \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "tree-middle"
+$TESTPROG --nlines 10 \
+	--tree-id-column 0 \
+	--tree-parent-column 1 \
+	--column $TS_SELF/files/col-id \
+	--column $TS_SELF/files/col-parent \
+	--column $TS_SELF/files/col-tree \
+	--column $TS_SELF/files/col-string \
+	$TS_SELF/files/data-id \
+	$TS_SELF/files/data-parent \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "tree-end"
+$TESTPROG --nlines 10 \
+	--tree-id-column 0 \
+	--tree-parent-column 1 \
+	--column $TS_SELF/files/col-id \
+	--column $TS_SELF/files/col-parent \
+	--column $TS_SELF/files/col-string \
+	--column $TS_SELF/files/col-tree \
+	$TS_SELF/files/data-id \
+	$TS_SELF/files/data-parent \
+	$TS_SELF/files/data-string-long \
+	$TS_SELF/files/data-string \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "trunc"
+$TESTPROG --nlines 10 --width 40 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-trunc \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "right"
+$TESTPROG --nlines 10 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-string \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "right-maxout"
+$TESTPROG --nlines 10 --maxout --width 80\
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "strictwidth"
+$TESTPROG --nlines 10 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-strict \
+	--column $TS_SELF/files/col-number \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number-tiny \
+	$TS_SELF/files/data-number \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "noextremes"
+$TESTPROG --nlines 10 --width 45 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-noextremes \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-string-extreme \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "hidden"
+$TESTPROG --nlines 10 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-hidden \
+	--column $TS_SELF/files/col-number \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-string-long \
+	$TS_SELF/files/data-number \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "wrap"
+$TESTPROG --nlines 10 --width 40 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-wrap \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "wrap-tree"
+$TESTPROG --nlines 10 --width 45 \
+	--tree-id-column 1 \
+	--tree-parent-column 2 \
+	--column $TS_SELF/files/col-tree \
+	--column $TS_SELF/files/col-id \
+	--column $TS_SELF/files/col-parent \
+	--column $TS_SELF/files/col-wrap \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-id \
+	$TS_SELF/files/data-parent \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "wrapnl"
+$TESTPROG --nlines 10 \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-wrapnl \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-nl \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "wrapnl-tree"
+$TESTPROG --nlines 10 \
+	--tree-id-column 1 \
+	--tree-parent-column 2 \
+	--column $TS_SELF/files/col-tree \
+	--column $TS_SELF/files/col-id \
+	--column $TS_SELF/files/col-parent \
+	--column $TS_SELF/files/col-wrapnl \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-id \
+	$TS_SELF/files/data-parent \
+	$TS_SELF/files/data-string-nl \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "raw"
+$TESTPROG --nlines 10 --raw \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-trunc \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "export"
+$TESTPROG --nlines 10 --export \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-trunc \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "column-separator"
+$TESTPROG --nlines 10 --colsep \| \
+	--column $TS_SELF/files/col-name \
+	--column $TS_SELF/files/col-number \
+	--column $TS_SELF/files/col-trunc \
+	$TS_SELF/files/data-string \
+	$TS_SELF/files/data-number \
+	$TS_SELF/files/data-string-long \
+	>> $TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_log "...done."
+ts_finalize
diff --git a/tests/ts/libsmartcols/title b/tests/ts/libsmartcols/title
new file mode 100755
index 000000000..a9ba6a4fd
--- /dev/null
+++ b/tests/ts/libsmartcols/title
@@ -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_TITLE"
+ts_check_test_command "$TESTPROG"
+
+$TESTPROG --width 80 >> $TS_OUTPUT 2>&1
+
+ts_finalize
-- 
2.14.4