### Question:
Game implements IGame { @Override public void onRequestOpen(final IField fieldInterface) { Field field = (Field) fieldInterface; if (isFinished()) return; if (field.isFlagged()) { onRequestFlag(field); return; } itsBoard.updateLastTouched(field); if (!isMined()) { mine(field); fireStart(); } if (field.isOpen()) openNeighborsIfFullyFlagged(field); else { open(field); fireChange(); } handleGameDone(); } Game(final int dimX, final int dimY, final int bombs, final IBoardMiner miner); private  Game(final GameState state, final IBoardMiner miner); @Override void addListener(final IMinesGameListener listener); @Override IBoard getBoard(); @Override int getBombCount(); @Override void onRequestFlag(final IField fieldInterface); @Override void onRequestOpen(final IField fieldInterface); @Override boolean isStarted(); @Override boolean isRunning(); @Override void removeListener(final IMinesGameListener listener); @Override String toString(); static Game createFromState(final GameState state, final IBoardMiner miner); GameState getState(); @Override IStopWatch getWatch(); @Override void tickWatch(); @Override int hashCode(); @Override boolean equals(Object obj);  }### Answer:
@Test public void testOpenClosedField() { IField left = getFieldAt(0, 0, itsGame2by1); assertEquals(false, left.isOpen()); itsGame2by1.onRequestOpen(left); assertEquals(true, left.isOpen()); }
@Test public void testOpenOpenField() { IField field = openAt(0, 0, itsGame2by1); itsGame2by1.onRequestOpen(field); assertEquals(true, field.isOpen()); }
@Test public void testOpenFlaggedField() { Game game = new Game(2, 2, 2, new TestBoardMiner(new boolean[][]{{false, false}, {true, true}})); openAt(0, 0, game); IField field = flagAt(1, 1, game); game.onRequestOpen(field); assertEquals(false, field.isOpen()); assertEquals(false, field.isFlagged()); }
@Test public void testOpenUnflaggedNeighborsOnOpenAnOpenField() { testOpenUnflaggedNeighbors(new Runnable() { @Override public void run() { itsGame2by2.onRequestOpen(its2by2UpLeft); } }); }