// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.data.imagery;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.junit.Rule;
import org.junit.Test;
import org.openstreetmap.josm.data.Preferences;
import org.openstreetmap.josm.testutils.JOSMTestRules;
import org.openstreetmap.josm.tools.MultiMap;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
*
* Unit tests for class {@link ImageryInfo}.
*
*/
public class ImageryInfoTest {
/**
* Setup tests
*/
@Rule
@SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public JOSMTestRules test = new JOSMTestRules();
/**
* Test if extended URL is returned properly
*/
@Test
public void testGetExtendedUrl() {
ImageryInfo testImageryTMS = new ImageryInfo("test imagery", "http://localhost", "tms", null, null);
testImageryTMS.setDefaultMinZoom(16);
testImageryTMS.setDefaultMaxZoom(23);
assertEquals("tms[16,23]:http://localhost", testImageryTMS.getExtendedUrl());
}
/**
* Non-regression test for <a href="https://josm.openstreetmap.de/ticket/13264">Bug #13264</a>.
*/
@Test
public void testConstruct13264() {
final ImageryInfo info = new ImageryInfo("test imagery", "tms[16-23]:http://localhost");
assertEquals(ImageryInfo.ImageryType.TMS, info.getImageryType());
assertEquals(16, info.getMinZoom());
assertEquals(23, info.getMaxZoom());
assertEquals("http://localhost", info.getUrl());
}
/**
* Tests the {@linkplain Preferences#serializeStruct(Object, Class) serialization} of {@link ImageryInfo.ImageryPreferenceEntry}
*/
@Test
public void testSerializeStruct() {
final ImageryInfo.ImageryPreferenceEntry info = new ImageryInfo.ImageryPreferenceEntry();
info.noTileHeaders = new MultiMap<>();
info.noTileHeaders.put("ETag", "foo");
info.noTileHeaders.put("ETag", "bar");
final Map<String, String> map = Preferences.serializeStruct(info, ImageryInfo.ImageryPreferenceEntry.class);
assertEquals("{noTileHeaders={\"ETag\":[\"foo\",\"bar\"]}}", map.toString());
}
/**
* Tests the {@linkplain Preferences#deserializeStruct(Map, Class)} deserialization} of {@link ImageryInfo.ImageryPreferenceEntry}
*/
@Test
public void testDeserializeStruct() {
final ImageryInfo.ImageryPreferenceEntry info = Preferences.deserializeStruct(
Collections.singletonMap("noTileHeaders", "{\"ETag\":[\"foo\",\"bar\"]}"), ImageryInfo.ImageryPreferenceEntry.class);
MultiMap<String, String> expect = new MultiMap<>();
expect.put("ETag", "foo");
expect.put("ETag", "bar");
assertEquals(info.noTileHeaders, expect);
final Set<String> eTag = info.noTileHeaders.get("ETag");
assertEquals(eTag, new HashSet<>(Arrays.asList("foo", "bar")));
}
/**
* Tests the {@linkplain Preferences#deserializeStruct(Map, Class)} deserialization} of legacy {@link ImageryInfo.ImageryPreferenceEntry}
*/
@Test
public void testDeserializeStructTicket12474() {
final ImageryInfo.ImageryPreferenceEntry info = Preferences.deserializeStruct(
Collections.singletonMap("noTileHeaders", "{\"ETag\":\"foo-and-bar\"}"), ImageryInfo.ImageryPreferenceEntry.class);
final Set<String> eTag = info.noTileHeaders.get("ETag");
assertEquals(eTag, Collections.singleton("foo-and-bar"));
}
}