source: josm/trunk/test/unit/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreferenceTestIT.java @ 12849

Last change on this file since 12849 was 12849, checked in by bastiK, 15 months ago

see #15229 - use Config in tests

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.map;
3
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertTrue;
6
7import java.io.IOException;
8import java.util.Collection;
9import java.util.HashMap;
10import java.util.HashSet;
11import java.util.Map;
12import java.util.Set;
13
14import org.junit.BeforeClass;
15import org.junit.Rule;
16import org.junit.Test;
17import org.junit.rules.Timeout;
18import org.openstreetmap.josm.JOSMFixture;
19import org.openstreetmap.josm.data.preferences.sources.ExtendedSourceEntry;
20import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
21import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
22import org.openstreetmap.josm.spi.preferences.Config;
23import org.openstreetmap.josm.tools.ImageProvider;
24import org.openstreetmap.josm.tools.Logging;
25import org.xml.sax.SAXException;
26
27import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
28
29/**
30 * Integration tests of {@link TaggingPresetPreference} class.
31 */
32public class TaggingPresetPreferenceTestIT {
33
34    /**
35     * Global timeout applied to all test methods.
36     */
37    @Rule
38    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
39    public Timeout globalTimeout = Timeout.seconds(10*60);
40
41    /**
42     * Setup test.
43     */
44    @BeforeClass
45    public static void setUpBeforeClass() {
46        JOSMFixture.createUnitTestFixture().init();
47    }
48
49    /**
50     * Test that available tagging presets are valid.
51     * @throws Exception in case of error
52     */
53    @Test
54    public void testValidityOfAvailablePresets() throws Exception {
55        ImageProvider.clearCache();
56        Collection<ExtendedSourceEntry> sources = new TaggingPresetPreference.TaggingPresetSourceEditor()
57                .loadAndGetAvailableSources();
58        assertFalse(sources.isEmpty());
59        // Double traditional timeouts to avoid random problems
60        Config.getPref().putInt("socket.timeout.connect", 30);
61        Config.getPref().putInt("socket.timeout.read", 60);
62        Map<Object, Throwable> allErrors = new HashMap<>();
63        Set<String> allMessages = new HashSet<>();
64        for (ExtendedSourceEntry source : sources) {
65            System.out.println(source.url);
66            try {
67                testPresets(allMessages, source);
68            } catch (IOException e) {
69                try {
70                    Logging.warn(e);
71                    // try again in case of temporary network error
72                    testPresets(allMessages, source);
73                } catch (SAXException | IOException e1) {
74                    e.printStackTrace();
75                    // ignore frequent network errors with www.freietonne.de causing too much Jenkins failures
76                    if (!source.url.contains("www.freietonne.de")) {
77                        allErrors.put(source.url, e1);
78                    }
79                    System.out.println(" => KO");
80                }
81            } catch (SAXException | IllegalArgumentException e) {
82                e.printStackTrace();
83                if (!source.url.contains("yopaseopor/")) {
84                    // ignore https://raw.githubusercontent.com/yopaseopor/traffic_signs_preset_JOSM cause too much errors
85                    allErrors.put(source.url, e);
86                }
87                System.out.println(" => KO");
88            }
89        }
90        ImageProvider.clearCache();
91        assertTrue(allErrors.toString(), allErrors.isEmpty());
92        assertTrue(allMessages.toString(), allMessages.isEmpty());
93    }
94
95    private static void testPresets(Set<String> allMessages, ExtendedSourceEntry source) throws SAXException, IOException {
96        Collection<TaggingPreset> presets = TaggingPresetReader.readAll(source.url, true);
97        assertFalse(presets.isEmpty());
98        Collection<String> errorsAndWarnings = Logging.getLastErrorAndWarnings();
99        boolean error = false;
100        for (String message : errorsAndWarnings) {
101            if (message.contains(TaggingPreset.PRESET_ICON_ERROR_MSG_PREFIX)) {
102                error = true;
103                // ignore https://github.com/yopaseopor/traffic_signs_preset_JOSM because of far too frequent missing icons errors
104                if (!source.url.contains("yopaseopor/traffic_signs")) {
105                    allMessages.add(message);
106                }
107            }
108        }
109        System.out.println(error ? " => KO" : " => OK");
110        if (error) {
111            Logging.clearLastErrorAndWarnings();
112        }
113    }
114}
Note: See TracBrowser for help on using the repository browser.