浏览代码

Fix onDelete not being used.

Sam Jaffe 5 年之前
父节点
当前提交
ea8b6671e9

+ 9 - 9
src/main/lombok/org/leumasjaffe/recipe/view/AutoGrowPanel.java

@@ -5,6 +5,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.function.IntConsumer;
 import java.util.function.IntFunction;
 import java.util.function.Supplier;
 
@@ -16,7 +17,6 @@ import org.jdesktop.swingx.VerticalLayout;
 import org.leumasjaffe.event.AnyActionDocumentListener;
 
 import lombok.AllArgsConstructor;
-import lombok.RequiredArgsConstructor;
 
 @SuppressWarnings("serial")
 public class AutoGrowPanel extends JPanel {
@@ -33,7 +33,7 @@ public class AutoGrowPanel extends JPanel {
 			if (e.getDocument().getLength() == 0) {
 				content.removeDocumentListener(this);
 				int index = members.indexOf(content);
-				members.remove(index);
+				onDelete.accept(index);
 				for (final int size = members.size(); index < size; ++index) {
 					members.get(index).setListPosition(index);
 				}
@@ -43,7 +43,7 @@ public class AutoGrowPanel extends JPanel {
 		}
 	}
 	
-	@RequiredArgsConstructor
+	@AllArgsConstructor
 	private class ExtendAction<T, C extends Component & DocumentListenable> implements AnyActionDocumentListener {
 		final Function<T, C> factory;
 		final Consumer<? super T> previous;
@@ -52,9 +52,7 @@ public class AutoGrowPanel extends JPanel {
 
 		@Override
 		public void update(DocumentEvent e) {
-			if (current != null) {
-				previous.accept(current);
-			}
+			previous.accept(current);
 			
 			final C object = factory.apply(current = next.get());
 			final DocumentListenable back = getBack();
@@ -73,14 +71,17 @@ public class AutoGrowPanel extends JPanel {
 	
 	IntFunction<DocumentListenable> prod;
 	AnyActionDocumentListener grow;
+	IntConsumer onDelete;
 	List<DocumentListenable> members = new ArrayList<>();
 	
 	@SafeVarargs
 	public <T, C extends Component & DocumentListenable> AutoGrowPanel(Function<T, C> function,
-			Supplier<T> newItem, Consumer<? super T> onData, Consumer<Integer> onDelete, T...ts) {
+			Supplier<T> newItem, Consumer<? super T> onData, IntConsumer onDelete, T...ts) {
 		setLayout(new VerticalLayout(5));
 		
-		this.grow = new ExtendAction<T, C>(function, onData, newItem);
+		T next = newItem.get();
+		this.onDelete = onDelete;
+		this.grow = new ExtendAction<T, C>(function, onData, newItem, next);
 		
 		for (T value : ts) {
 			C listen = function.apply(value);
@@ -89,7 +90,6 @@ public class AutoGrowPanel extends JPanel {
 			listen.addDocumentListener(new DeleteOnEmpty(listen));
 		}
 		
-		T next = newItem.get();
 		C empty = function.apply(next);
 		members.add(empty);
 		add(empty);

+ 14 - 3
src/test/java/org/leumasjaffe/recipe/view/AutoGrowPanelTest.java

@@ -6,16 +6,20 @@ import static org.mockito.Mockito.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
+import java.util.function.IntConsumer;
 
 import javax.swing.JTextField;
 import javax.swing.event.DocumentListener;
 import javax.swing.text.BadLocationException;
 
+import org.junit.jupiter.api.BeforeEach;
 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.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 @ExtendWith(MockitoExtension.class)
@@ -41,6 +45,8 @@ class AutoGrowPanelTest extends SwingTestCase {
 		}
 	}
 	
+	@Mock Consumer<MockComponent> add;
+	@Mock IntConsumer remove;
 	List<MockComponent> components = new ArrayList<>();
 	
 	private MockComponent mocked() {
@@ -50,8 +56,7 @@ class AutoGrowPanelTest extends SwingTestCase {
 	}
 	
 	private AutoGrowPanel create(MockComponent... mocks) {
-		return new AutoGrowPanel(m -> m, this::mocked,
-				m -> {}, i -> {}, mocks);
+		return new AutoGrowPanel(m -> m, this::mocked, add, remove, mocks);
 	}
 	
 	@Test
@@ -59,6 +64,7 @@ class AutoGrowPanelTest extends SwingTestCase {
 		AutoGrowPanel panel = create();
 		
 		assertThat(panel.getComponents(), arrayWithSize(1));
+		verify(add, never()).accept(any());
 	}
 
 	@Test
@@ -66,6 +72,7 @@ class AutoGrowPanelTest extends SwingTestCase {
 		AutoGrowPanel panel = create(mocked(), mocked());
 
 		assertThat(panel.getComponents(), arrayWithSize(3));
+		verify(add, never()).accept(any());
 	}
 
 	@Test
@@ -78,6 +85,7 @@ class AutoGrowPanelTest extends SwingTestCase {
 		
 		components.get(1).setText("B");
 		assertThat(panel.getComponents(), arrayWithSize(3));
+		verify(add, times(2)).accept(any());
 	}
 
 	@Test
@@ -87,7 +95,8 @@ class AutoGrowPanelTest extends SwingTestCase {
 		components.get(0).setText("");
 		
 		assertThat(panel.getComponents(), arrayWithSize(1));
-		verify(components.get(0), never()).removeDocumentListener(any());
+		verify(add, never()).accept(any());
+		verify(remove, never()).accept(anyInt());
 	}
 
 	@Test
@@ -99,6 +108,7 @@ class AutoGrowPanelTest extends SwingTestCase {
 		mock.setText("");
 		
 		assertThat(panel.getComponents(), arrayWithSize(1));
+		verify(remove, times(1)).accept(0);
 	}
 
 
@@ -111,5 +121,6 @@ class AutoGrowPanelTest extends SwingTestCase {
 		mock.getDocument().insertString(0, "B", null);
 		
 		assertThat(panel.getComponents(), arrayWithSize(2));
+		verify(remove, never()).accept(anyInt());
 	}
 }