Makefileにテストコードをマージ

現在でファイルの配置は次のようになっている。Kyuafileとtest.atf-shはtestsディレクトリ以下に配置されている。

csv2tsvの現在のファイル配置

vscode-csv2tsv
├── data
│   ├── doublequotes.csv
│   ├── doublequotes.tsv
│   ├── empty.csv
│   ├── empty.tsv
│   ├── spaces.csv
│   ├── spaces.tsv
│   ├── zip.csv
│   └── zip.tsv
├── LICENSE
├── main.c
├── main.h
├── Makefile
├── tests
│   ├── Kyuafile
│   ├── test.atf-sh
│   ├── test.ps1
│   ├── test001.ps1
│   ├── test002.ps1
│   ├── test003.ps1
│   └── test004.ps1
├── util_csv.c
└── util_file.c

2 directories, 21 files

前回までの作業で、「make test」でテストコードが動作するようになっていた。今回は、make testで今回追加したKyuaのテストコードが動くようにMakefileを書き換える。書き換えた結果は次のとおりだ。

Kyuaに対応させたMakefile

CMD=    csv2tsv.exe

SRCS=   $(wildcard *.c)
OBJS=   $(SRCS:.c=.o)

CC= clang
CFLAGS+=-g
EXIST=  cmd.exe //C if exist

build: $(CMD)

$(CMD): $(OBJS)
    $(CC) $(CFLAGS) -o $(CMD) $(OBJS)

.c.o:
    $(CC) -c $< -o $@

test: test-kyua

test-kyua: $(CMD)
    cd tests; kyua test

test-original: $(CMD) 
    pwsh .\tests\test.ps1

report: $(CMD) clean-report
    cd tests; kyua report-html

clean: clean-report
    $(EXIST) $(CMD) del $(CMD)
    $(EXIST) main.o del $(OBJS)
    $(EXIST) $(CMD:.exe=.ilk) del $(CMD:.exe=.ilk)
    $(EXIST) $(CMD:.exe=.pdb) del $(CMD:.exe=.pdb)

clean-report:
    $(EXIST) .\tests\html rmdir .\tests\html //S //Q

上記のMakefileは、「make report」でHTML版のレポートも生成できるようにしてある。テストが失敗した場合はこのレポートが役に立つ。

この状態でmake testを実行すると次のようになる。

make testの実行結果

PS C:\Users\daichi\Documents\vscode-csv2tsv> make test
cd tests; kyua test
test.atf-sh:doublequotes  ->  passed  [0.716s]
test.atf-sh:empty  ->  passed  [0.629s]
test.atf-sh:normal  ->  passed  [0.637s]
test.atf-sh:spaces  ->  passed  [0.641s]

Results file id is c_Users_daichi_Documents_vscode-csv2tsv_tests.20211102-002327-296475
Results saved to /c/Users/daichi/.kyua/store/results.c_Users_daichi_Documents_vscode-csv2tsv_tests.20211102-002327-296475.db

4/4 passed (0 failed)
PS C:\Users\daichi\Documents\vscode-csv2tsv>

make testで実際には「cd tests; kyua test」というコマンドが実行されている。Kyuaによるテストコードが実行され、そのすべてがテストをクリアしている。