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によるテストコードが実行され、そのすべてがテストをクリアしている。