ミラクルライト作った - プリキュア Advent Calendar 2013 #cure_advent
この記事はプリキュア Advent Calendar 2013のやつです。
大きなお友達は基本的にミラクルライトもらえないみたいなので Python で作った。プリキュアに力を与えてテストを実行する。
pypi: https://pypi.python.org/pypi/miraclelight
github: https://github.com/drillbits/miraclelight
$ pip install miraclelight
これで miraclelight コマンドができるけど、今回はテスト用意するのめんどくさいのでリポジトリに入ってるサンプルのテストを実行する。
$ git clone git@github.com:drillbits/miraclelight.git $ cd miraclelight $ python setup.py install $ tree . ├── README.rst ├── setup.py ├── src │ └── miraclelight │ └── __init__.py └── tests ├── __init__.py └── test_sample.py 3 directories, 5 files
カレントディレクトリに Python の unittest が discover してくれそうなやつがあるので、そのまま実行すればいい。*1
$ miraclelight
実行すると、このように表示されて止まる。
ライトをふって プリキュアを おうえんしてね!(Press enter, enter, enter) ( ^q^)ノシ
このままだとテストは永久に実行されず、プロジェクトは崩壊し、世界が砂漠になってもうダメです。
エンターキーを連打してプリキュアを応援しましょう。
10 エンターで 1 テストケース倒せる。
このテストランナーを使うと Jenkins で自動的に定期テストとかいっさいできなくなるけど、そんな人任せじゃダメだと思う。年末あたりに滅びかける世界は救えないと思う。「みんなで力を合わせれば不可能はない」とプリキュア 5 つの誓いの 6 つ目にもある。
がんばってすべてのテストを倒そう。
技術的な話
基本的には標準の unittest 拡張しただけだけど、普通にエンター入力すると改行されてしまうので、こんな感じで防いでる。
import fcntl import os import sys import termios fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: c = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
*1:ちなみに開始ディレクトリを指定したい場合は unittest と同じで miraclelight discover -s