テストケースを記述する(3)
(Jython で作成した)既存のモジュール hexagon.py を再利用しながら、新たなモジュールの動作を検証するために、テストケースを作成します。
class ExWindow(Window): def init(self): target = "tabControl", "button", self._Controls(target) self.items = {} for e, mino in TestCase(): tray = Tray() mino.tray = tray self.items[e] = mino item = TabItem(Header=e) self.tabControl.Items.Add(item) panel = Canvas() item.Content = panel self.addTray(panel, tray) self.addMino(panel, mino) self.tabControl.SelectionChanged += self.selectionChanged self.button.Click += self.click self.KeyDown += self.keyDown
ジェネレーター TestCase によって、10種類のテトリミノが得られます。さらに、各テトリミノごとに Tray を用意します。
def addTray(self, panel, tray):
for k, tile in tray.leftEdges.items():
panel.Children.Add(tile.shape)
for k, tile in tray.rightEdges.items():
panel.Children.Add(tile.shape)
for k, tile in tray.tiles.items():
panel.Children.Add(tile.shape)
Tray を構成する各要素(leftEdges/rightEdges/tiles)をパネルに追加します。
def keyDown(self, sender, e): KeyValues(e.Key).switch({ Key.Right: self.mino.shiftRight, Key.Left : self.mino.shiftLeft, Key.Up : self.mino.counterClockwise, Key.Down : self.mino.rotateClockwise, }) self.button.Content = self.state()
矢印キーを選択すると、テトリミノを回転(↓|↑)シフト(←|→)できます。テストケース2と違って、ここでは引数を必要としないメソッド群を呼び出します。
class KeyValues: def switch(self, cases): for key, f in cases.items(): if key == self.value: f()
押されたキーに対応するアクションを起動します。テストケース2と違って、ここでは引数を必要としないメソッド f を呼び出します。