### Question:
FigureTypesLevel implements GameLevel { @Override public String nextLevelCriteria() { switch (event.getType()) { case LINES_REMOVED : return String.format("Remove %s lines together", event.getValue()); case TOTAL_LINES_REMOVED : return String.format("Remove %s lines", event.getValue()); case WITHOUT_OVERFLOWN_LINES_REMOVED : return String.format("Remove %s lines without overflown", event.getValue()); } return NullGameLevel.THIS_IS_LAST_LEVEL; } FigureTypesLevel(Dice dice, Figures figuresQueue, GlassEvent event, Type... figureTypesToOpen); @Override boolean accept(GlassEvent event); @Override void apply(); @Override String nextLevelCriteria(); @Override FigureQueue queue(); @Override int openCount();  }### Answer:
@Test public void validateNextLevelIngoingCriteria() { Figures queue = mock(Figures.class); Dice dice = mock(Dice.class); assertEquals("Remove 4 lines together", new FigureTypesLevel(dice, queue, new GlassEvent(LINES_REMOVED, 4)).nextLevelCriteria()); assertEquals("Remove 13 lines", new FigureTypesLevel(dice, queue, new GlassEvent(TOTAL_LINES_REMOVED, 13)).nextLevelCriteria()); assertEquals("This is last level", new FigureTypesLevel(dice, queue, new GlassEvent(FIGURE_DROPPED, 0)).nextLevelCriteria()); assertEquals("This is last level", new NullGameLevel().nextLevelCriteria()); assertEquals("Remove 77 lines without overflown", new FigureTypesLevel(dice, queue, new GlassEvent(WITHOUT_OVERFLOWN_LINES_REMOVED, 77)).nextLevelCriteria()); }