xref: /freebsd/usr.bin/lorder/tests/lorder_test.sh (revision 96da41b6dbf383436018f11ad8a672faab2d3789)
1*96da41b6SDag-Erling Smørgrav#
2*96da41b6SDag-Erling Smørgrav# Copyright (c) 2024 Klara, Inc.
3*96da41b6SDag-Erling Smørgrav#
4*96da41b6SDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause
5*96da41b6SDag-Erling Smørgrav#
6*96da41b6SDag-Erling Smørgrav
7*96da41b6SDag-Erling Smørgravatf_test_case noargs
8*96da41b6SDag-Erling Smørgravnoargs_head() {
9*96da41b6SDag-Erling Smørgrav	atf_set descr "No arguments"
10*96da41b6SDag-Erling Smørgrav}
11*96da41b6SDag-Erling Smørgravnoargs_body() {
12*96da41b6SDag-Erling Smørgrav	atf_check -s exit:1 -e match:"^usage:" \
13*96da41b6SDag-Erling Smørgrav		  lorder
14*96da41b6SDag-Erling Smørgrav}
15*96da41b6SDag-Erling Smørgrav
16*96da41b6SDag-Erling Smørgravatf_test_case onearg
17*96da41b6SDag-Erling Smørgravonearg_head() {
18*96da41b6SDag-Erling Smørgrav	atf_set descr "One argument"
19*96da41b6SDag-Erling Smørgrav}
20*96da41b6SDag-Erling Smørgravonearg_body() {
21*96da41b6SDag-Erling Smørgrav	echo "void a(void) { }" >a.c
22*96da41b6SDag-Erling Smørgrav	cc -o a.o -c a.c
23*96da41b6SDag-Erling Smørgrav	echo "a.o a.o" >output
24*96da41b6SDag-Erling Smørgrav	atf_check -o file:output \
25*96da41b6SDag-Erling Smørgrav		  lorder *.o
26*96da41b6SDag-Erling Smørgrav}
27*96da41b6SDag-Erling Smørgrav
28*96da41b6SDag-Erling Smørgravatf_test_case dashdash
29*96da41b6SDag-Erling Smørgravdashdash_head() {
30*96da41b6SDag-Erling Smørgrav	atf_set descr "One argument"
31*96da41b6SDag-Erling Smørgrav}
32*96da41b6SDag-Erling Smørgravdashdash_body() {
33*96da41b6SDag-Erling Smørgrav	echo "void a(void) { }" >a.c
34*96da41b6SDag-Erling Smørgrav	cc -o a.o -c a.c
35*96da41b6SDag-Erling Smørgrav	echo "a.o a.o" >output
36*96da41b6SDag-Erling Smørgrav	atf_check -o file:output \
37*96da41b6SDag-Erling Smørgrav		  lorder -- *.o
38*96da41b6SDag-Erling Smørgrav}
39*96da41b6SDag-Erling Smørgrav
40*96da41b6SDag-Erling Smørgravatf_test_case nonexistent
41*96da41b6SDag-Erling Smørgravnonexistent_head() {
42*96da41b6SDag-Erling Smørgrav	atf_set descr "Nonexistent file"
43*96da41b6SDag-Erling Smørgrav}
44*96da41b6SDag-Erling Smørgravnonexistent_body() {
45*96da41b6SDag-Erling Smørgrav	atf_check -s not-exit:0 -e match:"No such file" -o empty \
46*96da41b6SDag-Erling Smørgrav		  lorder nonexistent.o
47*96da41b6SDag-Erling Smørgrav}
48*96da41b6SDag-Erling Smørgrav
49*96da41b6SDag-Erling Smørgravatf_test_case invalid
50*96da41b6SDag-Erling Smørgravinvalid_head() {
51*96da41b6SDag-Erling Smørgrav	atf_set descr "Invalid file"
52*96da41b6SDag-Erling Smørgrav}
53*96da41b6SDag-Erling Smørgravinvalid_body() {
54*96da41b6SDag-Erling Smørgrav	echo "not an object file" >invalid.o
55*96da41b6SDag-Erling Smørgrav	atf_check -s not-exit:0 -e match:"File format not" -o empty \
56*96da41b6SDag-Erling Smørgrav		  lorder invalid.o
57*96da41b6SDag-Erling Smørgrav}
58*96da41b6SDag-Erling Smørgrav
59*96da41b6SDag-Erling Smørgravatf_test_case objects
60*96da41b6SDag-Erling Smørgravobjects_head() {
61*96da41b6SDag-Erling Smørgrav	atf_set descr "Order objects"
62*96da41b6SDag-Erling Smørgrav}
63*96da41b6SDag-Erling Smørgravobjects_body() {
64*96da41b6SDag-Erling Smørgrav	echo "void a(void) { }" >a.c
65*96da41b6SDag-Erling Smørgrav	echo "void a(void); void b(void) { a(); }" >b.c
66*96da41b6SDag-Erling Smørgrav	echo "void b(void); void c(void) { b(); }" >c.c
67*96da41b6SDag-Erling Smørgrav	for n in a b c ; do
68*96da41b6SDag-Erling Smørgrav		cc -o $n.o -c $n.c
69*96da41b6SDag-Erling Smørgrav		echo "$n.o $n.o"
70*96da41b6SDag-Erling Smørgrav	done >output
71*96da41b6SDag-Erling Smørgrav	echo "b.o a.o" >>output
72*96da41b6SDag-Erling Smørgrav	echo "c.o b.o" >>output
73*96da41b6SDag-Erling Smørgrav	atf_check -o file:output \
74*96da41b6SDag-Erling Smørgrav		  lorder *.o
75*96da41b6SDag-Erling Smørgrav}
76*96da41b6SDag-Erling Smørgrav
77*96da41b6SDag-Erling Smørgravatf_test_case archives
78*96da41b6SDag-Erling Smørgravarchives_head() {
79*96da41b6SDag-Erling Smørgrav	atf_set descr "Order archives"
80*96da41b6SDag-Erling Smørgrav}
81*96da41b6SDag-Erling Smørgravarchives_body() {
82*96da41b6SDag-Erling Smørgrav	echo "void a(void) { }" >a.c
83*96da41b6SDag-Erling Smørgrav	echo "void a(void); void b(void) { a(); }" >b.c
84*96da41b6SDag-Erling Smørgrav	echo "void b(void); void c(void) { b(); }" >c.c
85*96da41b6SDag-Erling Smørgrav	echo "void e(void); void d(void) { e(); }" >d.c
86*96da41b6SDag-Erling Smørgrav	echo "void d(void); void e(void) { d(); }" >e.c
87*96da41b6SDag-Erling Smørgrav	for n in a b c d e ; do
88*96da41b6SDag-Erling Smørgrav		cc -o $n.o -c $n.c
89*96da41b6SDag-Erling Smørgrav	done
90*96da41b6SDag-Erling Smørgrav	for n in a b c ; do
91*96da41b6SDag-Erling Smørgrav		ar -crs $n.a $n.o
92*96da41b6SDag-Erling Smørgrav		echo "$n.a $n.a"
93*96da41b6SDag-Erling Smørgrav	done >output
94*96da41b6SDag-Erling Smørgrav	ar -crs z.a d.o e.o
95*96da41b6SDag-Erling Smørgrav	echo "z.a z.a" >>output
96*96da41b6SDag-Erling Smørgrav	echo "b.a a.a" >>output
97*96da41b6SDag-Erling Smørgrav	echo "c.a b.a" >>output
98*96da41b6SDag-Erling Smørgrav	atf_check -o file:output \
99*96da41b6SDag-Erling Smørgrav		  lorder *.a
100*96da41b6SDag-Erling Smørgrav}
101*96da41b6SDag-Erling Smørgrav
102*96da41b6SDag-Erling Smørgravatf_init_test_cases()
103*96da41b6SDag-Erling Smørgrav{
104*96da41b6SDag-Erling Smørgrav	atf_add_test_case noargs
105*96da41b6SDag-Erling Smørgrav	atf_add_test_case onearg
106*96da41b6SDag-Erling Smørgrav	atf_add_test_case dashdash
107*96da41b6SDag-Erling Smørgrav	atf_add_test_case nonexistent
108*96da41b6SDag-Erling Smørgrav	atf_add_test_case invalid
109*96da41b6SDag-Erling Smørgrav	atf_add_test_case objects
110*96da41b6SDag-Erling Smørgrav	atf_add_test_case archives
111*96da41b6SDag-Erling Smørgrav}
112