浏览代码

Add more tests.

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

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

@@ -4,12 +4,14 @@ import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 
 import org.leumasjaffe.observer.ForwardingObservableListener;
+import org.leumasjaffe.observer.ObservableController;
 import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Phase;
 import org.leumasjaffe.recipe.model.Element;
 
 import lombok.AccessLevel;
+import lombok.Getter;
 import lombok.experimental.FieldDefaults;
 
 import org.jdesktop.swingx.VerticalLayout;
@@ -29,10 +31,11 @@ import javax.swing.Box;
 @SuppressWarnings("serial")
 @FieldDefaults(level=AccessLevel.PRIVATE)
 public class ElementPanel extends JScrollPane {
-	ObservableListener<CollatedDurationPanel, Element> durationListener;
 	ForwardingObservableListener<Element> listener = new ForwardingObservableListener<>();
+	ObservableListener<JTextField, Element> nameListener;
+	ObservableListener<CollatedDurationPanel, Element> durationListener;
 
-	JTextField txtName;
+	@Getter(AccessLevel.PACKAGE) JTextField txtName;
 	JPanel panelViewPort;
 
 	public ElementPanel() {
@@ -73,7 +76,9 @@ public class ElementPanel extends JScrollPane {
 		panelViewPort = new JPanel();
 		setViewportView(panelViewPort);
 		panelViewPort.setLayout(new VerticalLayout(5));
-				
+		
+		nameListener = ObservableController.from(txtName,
+				Element::getName, Element::setName);
 		durationListener = new ObservableListener<>(panelDuration,
 				(c, v) -> c.setModel(v.getCollatedDuration()));
 	}
@@ -84,8 +89,6 @@ public class ElementPanel extends JScrollPane {
 	}
 	
 	public void setModel(final Element element) {
-		txtName.setText(element.getName());
-		
 		panelViewPort.removeAll();
 		for (final Phase phase : element.getPhases()) {
 			panelViewPort.add(new PhasePanel(phase));
@@ -93,6 +96,7 @@ public class ElementPanel extends JScrollPane {
 		}
 		
 		listener.setObserved(element, element.getPhases());
+		nameListener.setObserved(element);
 		durationListener.setObserved(element);
 	}
 	

+ 25 - 6
src/test/java/org/leumasjaffe/recipe/view/ElementPanelTest.java

@@ -1,5 +1,6 @@
 package org.leumasjaffe.recipe.view;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.*;
 
 import java.util.ArrayList;
@@ -7,13 +8,10 @@ import java.util.Arrays;
 import java.util.List;
 
 import javax.swing.JPanel;
-import javax.swing.JTextField;
 
 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.mock.MockObserverListener;
 import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
@@ -25,14 +23,12 @@ import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 @ExtendWith(MockitoExtension.class)
-@RunWith(JUnitPlatform.class)
 class ElementPanelTest extends SwingTestCase {
 	
 	List<Phase> phases;
 	Element stuff;
 	
 	@Mock ObservableListener<CollatedDurationPanel, Element> durationListener;
-	@Spy JTextField txtName;
 	@Spy JPanel panelViewPort;
 	@InjectMocks ElementPanel panel = new ElementPanel();
 
@@ -48,10 +44,33 @@ class ElementPanelTest extends SwingTestCase {
 	
 	@Test
 	void testFilledOutWithContent() {
-		verify(txtName).setText(eq("Curry"));
+		assertEquals("Curry", panel.getTxtName().getText());
 		verify(panelViewPort).add(any(PhasePanel.class));
 		verify(durationListener).setObserved(same(stuff));
 	}
+	
+	@Test
+	void testIsSubscribedToUpdates() {
+		stuff.setName("Sandwich");
+		
+		ObserverDispatch.notifySubscribers(stuff);
+		
+		assertEquals("Sandwich", panel.getTxtName().getText());
+	}
+	
+	@Test
+	void testViewUpdateToNameAltersModel() {
+		final MockObserverListener listener = spy(MockObserverListener.class);
+		listener.setObserved(stuff);
+		// setObserved() calls update
+		clearInvocations(listener);
+
+		panel.getTxtName().setText("Sandwich");
+		waitForSwing();
+
+		assertEquals("Sandwich", stuff.getName());
+		verify(listener).updateWasSignalled();
+	}
 
 	@Test
 	void testPropogatesNotifications() {