package games.strategy.engine.framework.map.download;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.io.ByteArrayInputStream;
import java.util.List;
import org.hamcrest.Matchers;
import org.junit.Test;
public class DownloadFileParserTest {
private static final String GAME_NAME = "myGame";
@Test
public void testParseMap() {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(buildTestData());
final List<DownloadFileDescription> games = DownloadFileParser.parse(inputStream);
assertThat(games.size(), is(4));
final DownloadFileDescription desc = games.get(0);
assertThat(desc.getUrl(), is("http://example.com/games/game.zip"));
assertThat(desc.getDescription(), Matchers.containsString("Some notes"));
assertThat(desc.getMapName(), is(GAME_NAME));
assertThat(desc.isMap(), is(true));
assertThat(desc.isMapSkin(), is(false));
assertThat(desc.isMapTool(), is(false));
}
@Test
public void testParseModSkin() {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(buildTestData());
final List<DownloadFileDescription> games = DownloadFileParser.parse(inputStream);
assertThat(games.size(), is(4));
final DownloadFileDescription desc = games.get(2);
assertThat(desc.isMap(), is(false));
assertThat(desc.isMapSkin(), is(true));
assertThat(desc.isMapTool(), is(false));
}
@Test
public void testParseMapTool() {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(buildTestData());
final List<DownloadFileDescription> games = DownloadFileParser.parse(inputStream);
assertThat(games.size(), is(4));
final DownloadFileDescription desc = games.get(3);
assertThat(desc.isMap(), is(false));
assertThat(desc.isMapSkin(), is(false));
assertThat(desc.isMapTool(), is(true));
}
private static String createTypeTag(final DownloadFileParser.ValueType type) {
return " " + DownloadFileParser.Tags.mapType + ": " + type + "\n";
}
private static byte[] buildTestData() {
String xml = "";
xml += "- url: http://example.com/games/game.zip\n";
xml += " mapName: " + GAME_NAME + "\n";
xml += createTypeTag(DownloadFileParser.ValueType.MAP);
xml += " description: |\n";
xml += " <pre>Some notes about the game, simple html allowed.\n";
xml += " </pre>\n";
xml += "- url: http://example.com/games/mod.zip\n";
// missing map type defaults to map
xml += " description: |\n";
xml += " map mod\n";
xml += "- url: http://example.com/games/skin.zip\n";
xml += " mapName: skin\n";
xml += createTypeTag(DownloadFileParser.ValueType.MAP_SKIN);
xml += " description: |\n";
xml += " map skin\n";
xml += "- url: http://example.com/games/tool.zip\n";
xml += " mapName: mapToolName\n";
xml += createTypeTag(DownloadFileParser.ValueType.MAP_TOOL);
xml += " description: |\n";
xml += " <pre>\n";
xml += " this is a map tool";
xml += " </pre>\n";
return xml.getBytes();
}
@Test
public void testMapTypeDefaultsToMap() {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(createSimpleGameXmlWithNoTypeTag());
final DownloadFileDescription download = DownloadFileParser.parse(inputStream).get(0);
assertThat(download.isMap(), is(true));
assertThat(download.isMapSkin(), is(false));
assertThat(download.isMapTool(), is(false));
}
private static byte[] createSimpleGameXmlWithNoTypeTag() {
String xml = "";
xml += "- url: http://example.com/games/mod.zip\n";
xml += " mapName: " + GAME_NAME + "\n";
xml += " description: |\n";
xml += " description\n";
return xml.getBytes();
}
}