//=============================================================================
// Copyright 2006-2010 Daniel W. Dyer
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//=============================================================================
package org.uncommons.watchmaker.examples.sudoku;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import org.fest.swing.core.BasicRobot;
import org.fest.swing.core.Robot;
import org.fest.swing.data.TableCell;
import org.fest.swing.fixture.FrameFixture;
import org.fest.swing.fixture.JTableCellFixture;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* Unit test for the {@link SudokuView} class.
* @author Daniel Dyer
*/
public class SudokuViewTest
{
private static final String[] TEST_PUZZLE = {"4.5...9.7",
".2..9..6.",
"39.6.7.28",
"9..3.2..6",
"7..9.6..3",
"5..4.8..1",
"28.1.5.49",
".7..3..8.",
"6.4...3.2"};
private Robot robot;
@BeforeMethod(groups = "display-required")
public void prepare()
{
robot = BasicRobot.robotWithNewAwtHierarchy();
}
@AfterMethod(groups = "display-required")
public void cleanUp()
{
robot.cleanUp();
robot = null;
}
@Test(groups = "display-required")
public void testDisplayPuzzle()
{
SudokuView view = new SudokuView();
JFrame frame = new JFrame();
frame.add(view, BorderLayout.CENTER);
FrameFixture frameFixture = new FrameFixture(robot, frame);
frame.setSize(400, 400);
frame.validate();
frameFixture.show();
view.setPuzzle(TEST_PUZZLE);
// Check a non-empty cell.
JTableCellFixture cell1 = frameFixture.table().cell(TableCell.row(0).column(0));
cell1.requireEditable();
cell1.requireValue("4");
// And an empty cell.
JTableCellFixture cell2 = frameFixture.table().cell(TableCell.row(0).column(1));
cell2.requireEditable();
cell2.requireValue("");
}
@Test(groups = "display-required")
public void testDisplaySolution()
{
SudokuView view = new SudokuView();
JFrame frame = new JFrame();
frame.add(view, BorderLayout.CENTER);
FrameFixture frameFixture = new FrameFixture(robot, frame);
frame.setSize(400, 400);
frame.validate();
frameFixture.show();
Sudoku sudoku = SudokuTestUtils.createSudoku(new int[][]
{
{1, 2, 8, 5, 4, 3, 9, 6, 7},
{7, 6, 4, 9, 2, 8, 5, 1, 3},
{3, 9, 5, 7, 6, 1, 2, 4, 8},
{6, 1, 9, 4, 8, 5, 7, 3, 2},
{5, 8, 3, 6, 7, 2, 1, 9, 4},
{4, 7, 2, 3, 1, 9, 8, 5, 6},
{8, 5, 1, 2, 3, 6, 4, 7, 9},
{9, 4, 6, 8, 5, 7, 3, 2, 1},
{2, 3, 7, 1, 9, 4, 6, 8, 5}
});
view.setSolution(sudoku);
JTableCellFixture cell1 = frameFixture.table().cell(TableCell.row(0).column(0));
cell1.requireNotEditable();
cell1.requireValue("1");
}
}