Skip to content

Commit de41053

Browse files
author
Arun Prasaad
committed
Add a test for the quit button
1 parent c394ec3 commit de41053

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

src/main/java/ihm/Editor.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -229,21 +229,22 @@ private void createQuitButton(String name) {
229229
JButton quit = new JButton("Quit");
230230
quit.setName(Component.QUIT_BUTTON.name());
231231
quit.setBounds(windowWidth + 20, 250, 110, 30);
232-
233-
quit.addActionListener(new ActionListener() {
234-
@Override
235-
public void actionPerformed(ActionEvent e) {
236-
try {
237-
File level_drop = new File(new File(".").getCanonicalPath() + "/levels/" + name + ".txt");
238-
level_drop.delete();
239-
} catch (IOException e1) {
240-
LOGGER.log(Level.SEVERE, "Error while deleting level file: " + name, e1);
241-
}
242-
System.exit(0);
232+
quit.addActionListener(_ -> {
233+
try {
234+
File level_drop = new File(new File(".").getCanonicalPath() + "/levels/" + name + ".txt");
235+
level_drop.delete();
236+
} catch (IOException e) {
237+
LOGGER.log(Level.SEVERE, "Error while deleting level file: " + name, e);
243238
}
239+
defaultExitHandler().exit(ExitHandler.SUCCESS);
244240
});
245241
this.add(quit);
246242
}
243+
244+
@VisibleForTesting
245+
ExitHandler defaultExitHandler() {
246+
return System::exit;
247+
}
247248

248249
private void createPlayerButton() {
249250
JButton button = new JButton(new ImageIcon("img/Joueur.jpg"));

src/test/java/ihm/EditorTest.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
import java.awt.event.MouseListener;
1111
import java.awt.event.MouseMotionListener;
1212
import java.io.IOException;
13+
import java.nio.file.Files;
1314
import java.nio.file.Path;
1415
import java.util.Arrays;
1516

1617
import static java.nio.file.Files.deleteIfExists;
1718
import static org.assertj.core.api.BDDAssertions.then;
19+
import static org.mockito.Mockito.mock;
20+
import static org.mockito.Mockito.verify;
1821
import static swing.ComponentFinder.findComponentByNameAsType;
1922

2023
@NullMarked
@@ -31,6 +34,7 @@ class EditorTest {
3134
void setUp() throws Exception {
3235
// Create a new Editor instance for testing
3336
editor = new Editor(TEST_ROWS, TEST_COLUMNS, TEST_LEVEL_NAME);
37+
deleteIfExists(TEST_LEVEL_PATH);
3438
}
3539

3640
@AfterEach
@@ -162,10 +166,38 @@ void target_button_sets_content_to_storage_area() {
162166
void empty_button_sets_content_to_floor() {
163167
// Given
164168
JButton button = findComponentByNameAsType(editor, Editor.Component.EMPTY_BUTTON.name(), JButton.class);
165-
166-
// When - Simulate button click
169+
170+
// When
167171
button.doClick();
168-
172+
173+
// Then
169174
then(editor.getContent()).isEqualTo(TileType.FLOOR);
170175
}
176+
177+
@Test
178+
void quit_button_triggers_exit_handler_and_deletes_file() throws IOException {
179+
// Given
180+
ExitHandler mockExitHandler = mock(ExitHandler.class);
181+
182+
// Create a test level file that should be deleted
183+
Files.createDirectories(TEST_LEVEL_PATH.getParent());
184+
Files.createFile(TEST_LEVEL_PATH);
185+
then(Files.exists(TEST_LEVEL_PATH)).isTrue();
186+
187+
editor = new Editor(TEST_ROWS, TEST_COLUMNS, TEST_LEVEL_NAME) {
188+
@Override
189+
ExitHandler defaultExitHandler() {
190+
return mockExitHandler;
191+
}
192+
};
193+
194+
JButton quitButton = findComponentByNameAsType(editor, Editor.Component.QUIT_BUTTON.name(), JButton.class);
195+
196+
// When
197+
quitButton.doClick();
198+
199+
// Then
200+
then(Files.exists(TEST_LEVEL_PATH)).isFalse();
201+
verify(mockExitHandler).exit(ExitHandler.SUCCESS);
202+
}
171203
}

0 commit comments

Comments
 (0)