PICTとjoでテストケースをJson形式で作る
はじめに
PICTは、Microsoft製のPairwise法でテストケースをいい感じに絞り込んでくれるコマンドラインツール。 詳しくは↓記事を参照。(私がPICTの存在を知ったきっかけ) qiita.com
で、このPICTの出力は tsv 形式なので、 まあそのままでもテストケースとしては十分に扱いやすい。
ただ、せっかくだから Json 形式にしてあげたい。
そこで jo
コマンドを使ってみた。
PICTに食わせるファイル(モデルファイル)
DATA1: A, B, C DATA2: 1, 2, 3
pictでくみあわせ作成
$ pict a.txt DATA1 DATA2 A 3 A 2 B 3 C 2 B 1 C 1 B 2 C 3 A 1
作りたい json
[ { "DATA1": "A", "DATA2": 3 }, { "DATA1": "A", "DATA2": 2 }, { "DATA1": "B", "DATA2": 3 }, { "DATA1": "C", "DATA2": 2 }, { "DATA1": "B", "DATA2": 1 }, { "DATA1": "C", "DATA2": 1 }, { "DATA1": "B", "DATA2": 2 }, { "DATA1": "C", "DATA2": 3 }, { "DATA1": "A", "DATA2": 1 } ]
試行錯誤の結果
$ pict a.txt \ | \ # awk で "jo DATA1=A DATA2=1" のような行を作っている awk 'NR==1{for(i=1;i<=NF;i++){h[i]=$i}} NR!=1{r="jo"; for(i=1;i<=NF;i++){ r = r " " h[i] "=" $i } } $0 = r' \ | \ # awk で作った jo コマンドを実行して {"DATA1":"A", "DATA2":1} を作っている sh \ | \ # jo -a で Array にしている , -p は pretty-print の意で見やすくするために使用 jo -a -p
メモ
jo -a $(jo DATA1=A DATA2=1)
はうまく動くんだけど、
echo jo DATA1=A DATA2=1 | jo -a
は動かない。
$ echo jo DATA1=A DATA2=1 | jo -a ["jo DATA1=A DATA2=1"]
まあ、冷静に考えれば当然で、jo -a
は渡された文字列をそのまま素直に配列にしてるだけなので、
事前にjsonオブジェクトになるよう書いてあげないといけない。
つまり↓なら良い。
$ jo DATA1=A DATA2=1 | jo -a [{"DATA1":"A", "DATA2":"1"}]