source: josm/trunk/test/unit/org/openstreetmap/josm/gui/help/HelpBrowserTest.java@ 17531

Last change on this file since 17531 was 17121, checked in by simon04, 4 years ago

see #18200 - Fix HelpBrowserTest after JMockit update (patch by taylor.smock)

  • Property svn:eol-style set to native
File size: 7.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.help;
3
4import static org.junit.jupiter.api.Assertions.assertEquals;
5import static org.junit.jupiter.api.Assertions.assertNull;
6
7import java.util.Collections;
8
9import javax.swing.JOptionPane;
10
11import org.junit.jupiter.api.Test;
12import org.junit.jupiter.api.extension.RegisterExtension;
13import org.openstreetmap.josm.TestUtils;
14import org.openstreetmap.josm.testutils.JOSMTestRules;
15import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
16import org.openstreetmap.josm.tools.LanguageInfo.LocaleType;
17import org.openstreetmap.josm.tools.PlatformHook;
18import org.openstreetmap.josm.tools.PlatformManager;
19
20import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
21import mockit.Expectations;
22import mockit.Injectable;
23import mockit.Mocked;
24
25/**
26 * Unit tests of {@link HelpBrowser} class.
27 */
28class HelpBrowserTest {
29
30 static final String URL_1 = "https://josm.openstreetmap.de/wiki/Help";
31 static final String URL_2 = "https://josm.openstreetmap.de/wiki/Introduction";
32 static final String URL_3 = "https://josm.openstreetmap.de/javadoc";
33
34 /**
35 * Setup tests
36 */
37 @RegisterExtension
38 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
39 static JOSMTestRules test = new JOSMTestRules().preferences().https();
40
41 static IHelpBrowser newHelpBrowser() {
42 return new IHelpBrowser() {
43
44 private final HelpBrowserHistory history = new HelpBrowserHistory(this);
45 private String url;
46
47 @Override
48 public void openUrl(String url) {
49 history.setCurrentUrl(url);
50 this.url = url;
51 }
52
53 @Override
54 public void openHelpTopic(String relativeHelpTopic) {
55 openUrl(HelpUtil.getHelpTopicUrl(HelpUtil.buildAbsoluteHelpTopic(relativeHelpTopic, LocaleType.ENGLISH)));
56 }
57
58 @Override
59 public String getUrl() {
60 return url;
61 }
62
63 @Override
64 public void setUrl(String url) {
65 this.url = url;
66 }
67
68 @Override
69 public HelpBrowserHistory getHistory() {
70 return history;
71 }
72 };
73 }
74
75 /**
76 * Unit test of {@link HelpBrowser.BackAction} and {@link HelpBrowser.ForwardAction} classes.
77 */
78 @Test
79 void testBackAndForwardActions() {
80 IHelpBrowser browser = newHelpBrowser();
81 browser.openUrl(URL_1);
82 assertEquals(URL_1, browser.getUrl());
83 browser.openUrl(URL_2);
84 assertEquals(URL_2, browser.getUrl());
85 new HelpBrowser.BackAction(browser).actionPerformed(null);
86 assertEquals(URL_1, browser.getUrl());
87 new HelpBrowser.ForwardAction(browser).actionPerformed(null);
88 assertEquals(URL_2, browser.getUrl());
89 }
90
91 /**
92 * Unit test of {@link HelpBrowser.HomeAction} class.
93 */
94 @Test
95 void testHomeAction() {
96 IHelpBrowser browser = newHelpBrowser();
97 assertNull(browser.getUrl());
98 new HelpBrowser.HomeAction(browser).actionPerformed(null);
99 assertEquals(URL_1, browser.getUrl());
100 }
101
102 /**
103 * Unit test of {@link HelpBrowser.EditAction} class handling a null url.
104 * @param mockPlatformHook platform hook mock
105 * @param platformManager {@link PlatformManager} mock
106 * @throws Exception in case of error
107 */
108 @Test
109 void testEditActionNull(@Injectable final PlatformHook mockPlatformHook, @Mocked final PlatformManager platformManager) throws Exception {
110 TestUtils.assumeWorkingJMockit();
111 new Expectations() {{
112 PlatformManager.getPlatform(); result = mockPlatformHook; minTimes = 0;
113 // should not be called
114 mockPlatformHook.openUrl((String) any); times = 0;
115 }};
116
117 IHelpBrowser browser = newHelpBrowser();
118 assertNull(browser.getUrl());
119 new HelpBrowser.EditAction(browser).actionPerformed(null);
120 }
121
122 /**
123 * Unit test of {@link HelpBrowser.EditAction} class handling an "internal" url.
124 * @param mockPlatformHook platform hook mock
125 * @param platformManager {@link PlatformManager} mock
126 * @throws Exception in case of error
127 */
128 @Test
129 void testEditActionInternal(@Injectable final PlatformHook mockPlatformHook,
130 @Mocked final PlatformManager platformManager) throws Exception {
131 TestUtils.assumeWorkingJMockit();
132 new Expectations() {{
133 PlatformManager.getPlatform(); result = mockPlatformHook;
134 mockPlatformHook.openUrl(URL_2 + "?action=edit"); result = null; times = 1;
135 }};
136
137 IHelpBrowser browser = newHelpBrowser();
138 browser.openUrl(URL_2);
139 assertEquals(URL_2, browser.getUrl());
140 new HelpBrowser.EditAction(browser).actionPerformed(null);
141 }
142
143 /**
144 * Unit test of {@link HelpBrowser.EditAction} class handling an "external" url.
145 * @param mockPlatformHook platform hook mock
146 * @param platformManager {@link PlatformManager} mock
147 * @throws Exception in case of error
148 */
149 @Test
150 void testEditActionExternal(@Injectable final PlatformHook mockPlatformHook,
151 @Mocked final PlatformManager platformManager) throws Exception {
152 TestUtils.assumeWorkingJMockit();
153 new Expectations() {{
154 PlatformManager.getPlatform(); result = mockPlatformHook; minTimes = 0;
155 // should not be called
156 mockPlatformHook.openUrl((String) any); times = 0;
157 }};
158 final JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker(
159 Collections.singletonMap(
160 "<html>The current URL <tt>https://josm.openstreetmap.de/javadoc</tt><br>is an external "
161 + "URL. Editing is only possible for help topics<br>on the help server "
162 + "<tt>https://josm.openstreetmap.de</tt>.</html>",
163 JOptionPane.OK_OPTION
164 )
165 );
166
167 IHelpBrowser browser = newHelpBrowser();
168 browser.openUrl(URL_3);
169 assertEquals(URL_3, browser.getUrl());
170 new HelpBrowser.EditAction(browser).actionPerformed(null);
171
172 assertEquals(1, jopsMocker.getInvocationLog().size());
173 Object[] invocationLogEntry = jopsMocker.getInvocationLog().get(0);
174 assertEquals(JOptionPane.OK_OPTION, (int) invocationLogEntry[0]);
175 assertEquals("Warning", invocationLogEntry[2]);
176 }
177
178 /**
179 * Unit test of {@link HelpBrowser.OpenInBrowserAction} class.
180 * @param mockPlatformHook platform hook moc
181 * @param platformManager {@link PlatformManager} mock
182 * @throws Exception in case of error
183 */
184 @Test
185 void testOpenInBrowserAction(@Injectable final PlatformHook mockPlatformHook,
186 @Mocked final PlatformManager platformManager) throws Exception {
187 TestUtils.assumeWorkingJMockit();
188 new Expectations() {{
189 PlatformManager.getPlatform(); result = mockPlatformHook;
190 mockPlatformHook.openUrl(URL_1); result = null; times = 1;
191 }};
192
193 IHelpBrowser browser = newHelpBrowser();
194 browser.openUrl(URL_1);
195 assertEquals(URL_1, browser.getUrl());
196 new HelpBrowser.OpenInBrowserAction(browser).actionPerformed(null);
197 }
198
199 /**
200 * Unit test of {@link HelpBrowser.ReloadAction} class.
201 */
202 @Test
203 void testReloadAction() {
204 IHelpBrowser browser = newHelpBrowser();
205 browser.openUrl(URL_1);
206 assertEquals(URL_1, browser.getUrl());
207 new HelpBrowser.ReloadAction(browser).actionPerformed(null);
208 assertEquals(URL_1, browser.getUrl());
209 }
210}
Note: See TracBrowser for help on using the repository browser.