|
|
@@ -0,0 +1,133 @@
|
|
|
+package org.leumasjaffe.recipe.view;
|
|
|
+
|
|
|
+import static org.hamcrest.MatcherAssert.assertThat;
|
|
|
+import static org.hamcrest.collection.IsArrayWithSize.arrayWithSize;
|
|
|
+import static org.mockito.Mockito.*;
|
|
|
+
|
|
|
+import javax.swing.JTextField;
|
|
|
+import javax.swing.event.DocumentListener;
|
|
|
+import javax.swing.text.BadLocationException;
|
|
|
+
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+import org.junit.jupiter.api.extension.ExtendWith;
|
|
|
+import org.junit.platform.runner.JUnitPlatform;
|
|
|
+import org.junit.runner.RunWith;
|
|
|
+import org.leumasjaffe.recipe.view.AutoGrowPanel.DocumentListenable;
|
|
|
+import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
+
|
|
|
+@ExtendWith(MockitoExtension.class)
|
|
|
+@RunWith(JUnitPlatform.class)
|
|
|
+class AutoGrowPanelTest extends SwingTestCase {
|
|
|
+ @SuppressWarnings("serial")
|
|
|
+ private static class MockComponent extends JTextField implements DocumentListenable {
|
|
|
+ public MockComponent() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public MockComponent(String s) {
|
|
|
+ super(s);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addDocumentListener(DocumentListener dl) {
|
|
|
+ super.getDocument().addDocumentListener(dl);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void removeDocumentListener(DocumentListener dl) {
|
|
|
+ super.getDocument().removeDocumentListener(dl);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testAlwaysHasAtLeastOneComponent() {
|
|
|
+ final MockComponent wrapper = spy(new MockComponent());
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel(() -> wrapper);
|
|
|
+
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(1));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testInputParamIsZeroIndex() {
|
|
|
+ final MockComponent[] wrapper = {
|
|
|
+ spy(new MockComponent()),
|
|
|
+ spy(new MockComponent())
|
|
|
+ };
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel((i) -> wrapper[i], 1);
|
|
|
+
|
|
|
+ verify(wrapper[0]).addDocumentListener(any());
|
|
|
+ verify(wrapper[1], never()).addDocumentListener(any());
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(1));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testCreatesGivenNumberOfChildren() {
|
|
|
+ final MockComponent[] wrapper = {
|
|
|
+ spy(new MockComponent()),
|
|
|
+ spy(new MockComponent())
|
|
|
+ };
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel((i) -> wrapper[i], 2);
|
|
|
+
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(2));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testEnteringContentTriggersNewRow() {
|
|
|
+ final MockComponent[] wrapper = {
|
|
|
+ spy(new MockComponent()),
|
|
|
+ spy(new MockComponent())
|
|
|
+ };
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel((i) -> wrapper[i], 1);
|
|
|
+ getTestFrame().add(panel);
|
|
|
+ wrapper[0].setText("A");
|
|
|
+
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(2));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testEnteringEmptyContentDoesNotTrigger() {
|
|
|
+ final MockComponent[] wrapper = {
|
|
|
+ spy(new MockComponent()),
|
|
|
+ spy(new MockComponent())
|
|
|
+ };
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel((i) -> wrapper[i], 1);
|
|
|
+ getTestFrame().add(panel);
|
|
|
+ wrapper[0].setText("");
|
|
|
+
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(1));
|
|
|
+ verify(wrapper[0], never()).removeDocumentListener(any());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testEmptyingContentClearsPanel() {
|
|
|
+ final MockComponent[] wrapper = {
|
|
|
+ spy(new MockComponent("A")),
|
|
|
+ spy(new MockComponent())
|
|
|
+ };
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel((i) -> wrapper[i], 2);
|
|
|
+ getTestFrame().add(panel);
|
|
|
+ wrapper[0].setText("");
|
|
|
+
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(1));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void testChangingTextDoesNotDeleteRow() throws BadLocationException {
|
|
|
+ final MockComponent[] wrapper = {
|
|
|
+ spy(new MockComponent("A")),
|
|
|
+ spy(new MockComponent())
|
|
|
+ };
|
|
|
+
|
|
|
+ AutoGrowPanel panel = new AutoGrowPanel((i) -> wrapper[i], 2);
|
|
|
+ getTestFrame().add(panel);
|
|
|
+ wrapper[0].getDocument().insertString(0, "B", null);
|
|
|
+
|
|
|
+ assertThat(panel.getComponents(), arrayWithSize(2));
|
|
|
+ }
|
|
|
+}
|