浏览代码

Add state test to ElementPanel ahead of making it into an AutoGrowPanel.ChildComponent.

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

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

@@ -15,10 +15,10 @@ import lombok.experimental.FieldDefaults;
 import org.jdesktop.swingx.VerticalLayout;
 
 import javax.swing.JSeparator;
+import javax.swing.JTextField;
 import javax.swing.ScrollPaneConstants;
 
 import java.awt.GridBagLayout;
-import javax.swing.JLabel;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
 import java.awt.Component;
@@ -27,12 +27,12 @@ import java.awt.Dimension;
 import javax.swing.Box;
 
 @SuppressWarnings("serial")
-@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+@FieldDefaults(level=AccessLevel.PRIVATE)
 public class ElementPanel extends JScrollPane {
 	ObservableListener<CollatedDurationPanel, Element> durationListener;
 	ForwardingObservableListener<Element> listener = new ForwardingObservableListener<>();
 
-	JLabel lblName;
+	JTextField txtName;
 	JPanel panelViewPort;
 
 	public ElementPanel() {
@@ -50,12 +50,12 @@ public class ElementPanel extends JScrollPane {
 		gbl_panelColumnHeader.rowWeights = new double[]{0.0, Double.MIN_VALUE};
 		panelColumnHeader.setLayout(gbl_panelColumnHeader);
 		
-		lblName = new JLabel();
-		GridBagConstraints gbc_lblName = new GridBagConstraints();
-		gbc_lblName.insets = new Insets(0, 0, 0, 5);
-		gbc_lblName.gridx = 0;
-		gbc_lblName.gridy = 0;
-		panelColumnHeader.add(lblName, gbc_lblName);
+		txtName = new JTextField();
+		GridBagConstraints gbc_txtName = new GridBagConstraints();
+		gbc_txtName.insets = new Insets(0, 0, 0, 5);
+		gbc_txtName.gridx = 0;
+		gbc_txtName.gridy = 0;
+		panelColumnHeader.add(txtName, gbc_txtName);
 		
 		Component horizontalGlue = Box.createHorizontalGlue();
 		GridBagConstraints gbc_horizontalGlue = new GridBagConstraints();
@@ -84,7 +84,7 @@ public class ElementPanel extends JScrollPane {
 	}
 	
 	public void setModel(final Element element) {
-		lblName.setText(element.getName());
+		txtName.setText(element.getName());
 		
 		panelViewPort.removeAll();
 		for (final Phase phase : element.getPhases()) {

+ 32 - 12
src/test/java/org/leumasjaffe/recipe/view/ElementPanelTest.java

@@ -2,7 +2,12 @@ package org.leumasjaffe.recipe.view;
 
 import static org.mockito.Mockito.*;
 
+import java.util.ArrayList;
 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;
@@ -10,10 +15,11 @@ 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;
 import org.leumasjaffe.recipe.model.Phase;
-import org.leumasjaffe.recipe.model.CollatedDuration;
 import org.leumasjaffe.recipe.model.Element;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
@@ -22,25 +28,39 @@ import org.mockito.junit.jupiter.MockitoExtension;
 @RunWith(JUnitPlatform.class)
 class ElementPanelTest extends SwingTestCase {
 	
-	@Spy MockObserverListener listener;
-	final Phase stub = new Phase();
-	@Mock Element stuff;
-	ElementPanel panel;
+	List<Phase> phases;
+	Element stuff;
+	
+	@Mock ObservableListener<CollatedDurationPanel, Element> durationListener;
+	@Spy JTextField txtName;
+	@Spy JPanel panelViewPort;
+	@InjectMocks ElementPanel panel = new ElementPanel();
 
 	@BeforeEach
 	void setUp() {
-		doReturn(Arrays.asList(stub)).when(stuff).getPhases();
-		doReturn(CollatedDuration.ZERO).when(stuff).getCollatedDuration();
-		panel = new ElementPanel(stuff);
+		phases = new ArrayList<>(Arrays.asList(new Phase()));
+		stuff = new Element();
+		stuff.setName("Curry");
+		stuff.setPhases(phases);
 		
+		panel.setModel(stuff);
+	}
+	
+	@Test
+	void testFilledOutWithContent() {
+		verify(txtName).setText(eq("Curry"));
+		verify(panelViewPort).add(any(PhasePanel.class));
+		verify(durationListener).setObserved(same(stuff));
+	}
+
+	@Test
+	void testPropogatesNotifications() {
+		final MockObserverListener listener = spy(MockObserverListener.class);
 		listener.setObserved(stuff);
 		// setObserved() calls update
 		clearInvocations(listener);
-	}
 
-	@Test
-	void testPropogatesSignalFromChildren() {
-		ObserverDispatch.notifySubscribers(stub);
+		ObserverDispatch.notifySubscribers(phases.get(0));
 		verify(listener).updateWasSignalled();
 	}