package rabbitescape.engine.menu; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; import java.util.ArrayList; import java.util.List; import org.junit.*; import rabbitescape.engine.config.Config; import rabbitescape.engine.config.TestConfig; public class TestByNumberConfigBasedLevelsCompleted { @Test public void Report_highest_level_from_config() { FakeConfig fakeConfig = new FakeConfig( "{\"bar\":2,\"foo\":3}" ); ByNumberConfigBasedLevelsCompleted lc = new ByNumberConfigBasedLevelsCompleted( fakeConfig ); int ans = lc.highestLevelCompleted( "foo" ); assertThat( ans, equalTo( 3 ) ); // We called set with the right config key and value assertThat( fakeConfig.log.get( 0 ), equalTo( "get levels.completed" ) ); assertThat( fakeConfig.log.size(), equalTo( 1 ) ); } @Test public void Save_changes_to_config_new_dir() { FakeConfig fakeConfig = new FakeConfig( "{\"bar\":2,\"foo\":3}" ); ByNumberConfigBasedLevelsCompleted lc = new ByNumberConfigBasedLevelsCompleted( fakeConfig ); lc.setCompletedLevel( "baz", 1 ); // We called set with the right config key and value assertThat( fakeConfig.log.get( 1 ), // First was a get equalTo( "set levels.completed {\"bar\":2,\"baz\":1,\"foo\":3}" ) ); assertThat( fakeConfig.log.get( 2 ), equalTo( "save" ) ); assertThat( fakeConfig.log.size(), equalTo( 3 ) ); } @Test public void Save_changes_to_config_existing_dir() { FakeConfig fakeConfig = new FakeConfig( "{\"bar\":2,\"foo\":3}" ); ByNumberConfigBasedLevelsCompleted lc = new ByNumberConfigBasedLevelsCompleted( fakeConfig ); lc.setCompletedLevel( "foo", 4 ); // We called get with the right config key assertThat( fakeConfig.log.get( 1 ), // First was a get equalTo( "set levels.completed {\"bar\":2,\"foo\":4}" ) ); assertThat( fakeConfig.log.get( 2 ), equalTo( "save" ) ); assertThat( fakeConfig.log.size(), equalTo( 3 ) ); } @Test public void Characters_stripped_from_set_names() { assertThat( ByNumberConfigBasedLevelsCompleted.stripNumber_( "01_easy" ), equalTo( "easy" ) ); } // --- private static class FakeConfig extends Config { private final String getAnswer; public final List<String> log; public FakeConfig( String getAnswer ) { super( null, new TestConfig.EmptyConfigStorage() ); this.getAnswer = getAnswer; this.log = new ArrayList<String>(); } @Override public void set( String key, String value ) { log.add( "set " + key + " " + value ); } @Override public String get( String key ) { log.add( "get " + key ); return getAnswer; } @Override public void save() { log.add( "save" ); } } }