diff --git a/lib/src/main/java/io/github/oblarg/oblog/ComplexWidgetWrapper.java b/lib/src/main/java/io/github/oblarg/oblog/ComplexWidgetWrapper.java new file mode 100644 index 0000000..47edb9e --- /dev/null +++ b/lib/src/main/java/io/github/oblarg/oblog/ComplexWidgetWrapper.java @@ -0,0 +1,8 @@ +package io.github.oblarg.oblog; + +import java.util.Map; + +interface ComplexWidgetWrapper { + ComplexWidgetWrapper withProperties(Map properties); + ComplexWidgetWrapper withWidget(String widgetType); +} diff --git a/lib/src/main/java/io/github/oblarg/oblog/Logger.java b/lib/src/main/java/io/github/oblarg/oblog/Logger.java index 1f1d3d3..aa9f5bf 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/Logger.java +++ b/lib/src/main/java/io/github/oblarg/oblog/Logger.java @@ -3,6 +3,8 @@ import edu.wpi.first.networktables.EntryListenerFlags; import edu.wpi.first.networktables.NetworkTable; import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.wpilibj.AnalogInput; +import edu.wpi.first.wpilibj.Sendable; import io.github.oblarg.oblog.annotations.*; import edu.wpi.first.networktables.NetworkTableEntry; import edu.wpi.first.wpilibj.shuffleboard.BuiltInWidgets; @@ -256,25 +258,25 @@ private interface SetterProcessor { entry(Config.Command.class, (supplier, rawParams, bin, name) -> { Config.Command params = (Config.Command) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kCommand.getWidgetName()); }), entry(Config.PIDCommand.class, (supplier, rawParams, bin, name) -> { Config.PIDCommand params = (Config.PIDCommand) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kPIDCommand.getWidgetName()); }), entry(Config.PIDController.class, (supplier, rawParams, bin, name) -> { Config.PIDController params = (Config.PIDController) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kPIDController.getWidgetName()); }), entry(Config.Relay.class, (supplier, rawParams, bin, name) -> { Config.Relay params = (Config.Relay) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kRelay.getWidgetName()); }) ); @@ -338,23 +340,35 @@ private interface SetterProcessor { }), entry(Log.VoltageView.class, (supplier, rawParams, bin, name) -> { - Log.VoltageView params = (Log.VoltageView) rawParams; - Logger.registerEntry( - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) - .withWidget(BuiltInWidgets.kVoltageView.getWidgetName()) - .withProperties(Map.of( - "min", params.min(), - "max", params.max(), - "center", params.center(), - "orientation", params.orientation(), - "numberOfTickMarks", params.numTicks())) - .getEntry(), - supplier); + if (supplier.get() instanceof AnalogInput) { + Log.VoltageView params = (Log.VoltageView) rawParams; + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) + .withWidget(BuiltInWidgets.kVoltageView.getWidgetName()) + .withProperties(Map.of( + "min", params.min(), + "max", params.max(), + "center", params.center(), + "orientation", params.orientation(), + "numberOfTickMarks", params.numTicks())); + } else { + Log.VoltageView params = (Log.VoltageView) rawParams; + Logger.registerEntry( + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + .withWidget(BuiltInWidgets.kVoltageView.getWidgetName()) + .withProperties(Map.of( + "min", params.min(), + "max", params.max(), + "center", params.center(), + "orientation", params.orientation(), + "numberOfTickMarks", params.numTicks())) + .getEntry(), + supplier); + } }), entry(Log.PDP.class, (supplier, rawParams, bin, name) -> { Log.PDP params = (Log.PDP) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kPowerDistributionPanel.getWidgetName()) .withProperties(Map.of( "showVoltageAndCurrentValues", params.showVoltageAndCurrent())); @@ -362,13 +376,13 @@ private interface SetterProcessor { entry(Log.Encoder.class, (supplier, rawParams, bin, name) -> { Log.Encoder params = (Log.Encoder) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kEncoder.getWidgetName()); }), entry(Log.SpeedController.class, (supplier, rawParams, bin, name) -> { Log.SpeedController params = (Log.SpeedController) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kSpeedController.getWidgetName()) .withProperties(Map.of( "orientation", params.orientation())); @@ -376,7 +390,7 @@ private interface SetterProcessor { entry(Log.Accelerometer.class, (supplier, rawParams, bin, name) -> { Log.Accelerometer params = (Log.Accelerometer) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kAccelerometer.getWidgetName()) .withProperties(Map.of( "min", params.min(), @@ -388,7 +402,7 @@ private interface SetterProcessor { entry(Log.ThreeAxisAccelerometer.class, (supplier, rawParams, bin, name) -> { Log.ThreeAxisAccelerometer params = (Log.ThreeAxisAccelerometer) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.k3AxisAccelerometer.getWidgetName()) .withProperties(Map.of( "range", params.range(), @@ -399,7 +413,7 @@ private interface SetterProcessor { entry(Log.Gyro.class, (supplier, rawParams, bin, name) -> { Log.Gyro params = (Log.Gyro) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kGyro.getWidgetName()) .withProperties(Map.of( "majorTickSpacing", params.majorTickSpacing(), @@ -409,7 +423,7 @@ private interface SetterProcessor { entry(Log.DifferentialDrive.class, (supplier, rawParams, bin, name) -> { Log.DifferentialDrive params = (Log.DifferentialDrive) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kDifferentialDrive.getWidgetName()) .withProperties(Map.of( "numberOfWheels", params.numWheels(), @@ -419,7 +433,7 @@ private interface SetterProcessor { entry(Log.MecanumDrive.class, (supplier, rawParams, bin, name) -> { Log.MecanumDrive params = (Log.MecanumDrive) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kMecanumDrive.getWidgetName()) .withProperties(Map.of( "showVelocityVectors", params.showVel())); @@ -427,7 +441,7 @@ private interface SetterProcessor { entry(Log.CameraStream.class, (supplier, rawParams, bin, name) -> { Log.CameraStream params = (Log.CameraStream) rawParams; - bin.add((params.name().equals("NO_NAME")) ? name : params.name(), supplier.get()) + bin.add((params.name().equals("NO_NAME")) ? name : params.name(), (Sendable) supplier.get()) .withWidget(BuiltInWidgets.kCameraStream.getWidgetName()) .withProperties(Map.of( "showCrosshair", params.showCrosshairs(), diff --git a/lib/src/main/java/io/github/oblarg/oblog/NTComplexWidget.java b/lib/src/main/java/io/github/oblarg/oblog/NTComplexWidget.java new file mode 100644 index 0000000..2ededd0 --- /dev/null +++ b/lib/src/main/java/io/github/oblarg/oblog/NTComplexWidget.java @@ -0,0 +1,15 @@ +package io.github.oblarg.oblog; + +import java.util.Map; + +public class NTComplexWidget implements ComplexWidgetWrapper { + @Override + public ComplexWidgetWrapper withProperties(Map properties) { + return this; + } + + @Override + public ComplexWidgetWrapper withWidget(String widgetType) { + return this; + } +} diff --git a/lib/src/main/java/io/github/oblarg/oblog/NTContainer.java b/lib/src/main/java/io/github/oblarg/oblog/NTContainer.java index 908a3ed..d2ec92f 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/NTContainer.java +++ b/lib/src/main/java/io/github/oblarg/oblog/NTContainer.java @@ -1,6 +1,7 @@ package io.github.oblarg.oblog; import edu.wpi.first.networktables.NetworkTable; +import edu.wpi.first.wpilibj.Sendable; import edu.wpi.first.wpilibj.shuffleboard.LayoutType; class NTContainer implements ShuffleboardContainerWrapper { @@ -17,7 +18,12 @@ public ShuffleboardLayoutWrapper getLayout(String title, LayoutType type) { } @Override - public ShuffleboardWidgetWrapper add(String title, Object defaultValue) { + public SimpleWidgetWrapper add(String title, Object defaultValue) { return new NTWidget(table.getEntry(title), defaultValue); } + + @Override + public ComplexWidgetWrapper add(String title, Sendable defaultValue) { + return new NTComplexWidget(); + } } diff --git a/lib/src/main/java/io/github/oblarg/oblog/NTLayout.java b/lib/src/main/java/io/github/oblarg/oblog/NTLayout.java index 12e4e9b..f2fb7ef 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/NTLayout.java +++ b/lib/src/main/java/io/github/oblarg/oblog/NTLayout.java @@ -1,6 +1,7 @@ package io.github.oblarg.oblog; import edu.wpi.first.networktables.NetworkTable; +import edu.wpi.first.wpilibj.Sendable; import edu.wpi.first.wpilibj.shuffleboard.LayoutType; import java.util.Map; @@ -24,7 +25,12 @@ public ShuffleboardLayoutWrapper getLayout(String title, LayoutType type) { } @Override - public ShuffleboardWidgetWrapper add(String title, Object defaultValue) { + public SimpleWidgetWrapper add(String title, Object defaultValue) { return new NTWidget(table.getEntry(title), defaultValue); } + + @Override + public ComplexWidgetWrapper add(String title, Sendable defaultValue) { + return new NTComplexWidget(); + } } diff --git a/lib/src/main/java/io/github/oblarg/oblog/NTWidget.java b/lib/src/main/java/io/github/oblarg/oblog/NTWidget.java index 2ddd12b..f974b90 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/NTWidget.java +++ b/lib/src/main/java/io/github/oblarg/oblog/NTWidget.java @@ -4,7 +4,7 @@ import java.util.Map; -class NTWidget implements ShuffleboardWidgetWrapper { +class NTWidget implements SimpleWidgetWrapper { NetworkTableEntry entry; @@ -19,12 +19,12 @@ public NetworkTableEntry getEntry() { } @Override - public ShuffleboardWidgetWrapper withProperties(Map properties) { + public SimpleWidgetWrapper withProperties(Map properties) { return this; } @Override - public ShuffleboardWidgetWrapper withWidget(String widgetType) { + public SimpleWidgetWrapper withWidget(String widgetType) { return this; } } diff --git a/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardContainerWrapper.java b/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardContainerWrapper.java index 8602da4..836de11 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardContainerWrapper.java +++ b/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardContainerWrapper.java @@ -1,8 +1,10 @@ package io.github.oblarg.oblog; +import edu.wpi.first.wpilibj.Sendable; import edu.wpi.first.wpilibj.shuffleboard.LayoutType; interface ShuffleboardContainerWrapper { ShuffleboardLayoutWrapper getLayout(String title, LayoutType type); - ShuffleboardWidgetWrapper add(String title, Object defaultValue); + SimpleWidgetWrapper add(String title, Object defaultValue); + ComplexWidgetWrapper add(String title, Sendable defaultValue); } diff --git a/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardWidgetWrapper.java b/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardWidgetWrapper.java deleted file mode 100644 index 85051f1..0000000 --- a/lib/src/main/java/io/github/oblarg/oblog/ShuffleboardWidgetWrapper.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.oblarg.oblog; - -import edu.wpi.first.networktables.NetworkTableEntry; - -import java.util.Map; - -interface ShuffleboardWidgetWrapper { - NetworkTableEntry getEntry(); - ShuffleboardWidgetWrapper withProperties(Map properties); - ShuffleboardWidgetWrapper withWidget(String widgetType); -} diff --git a/lib/src/main/java/io/github/oblarg/oblog/SimpleWidgetWrapper.java b/lib/src/main/java/io/github/oblarg/oblog/SimpleWidgetWrapper.java new file mode 100644 index 0000000..5d7d1a9 --- /dev/null +++ b/lib/src/main/java/io/github/oblarg/oblog/SimpleWidgetWrapper.java @@ -0,0 +1,11 @@ +package io.github.oblarg.oblog; + +import edu.wpi.first.networktables.NetworkTableEntry; + +import java.util.Map; + +interface SimpleWidgetWrapper { + NetworkTableEntry getEntry(); + SimpleWidgetWrapper withProperties(Map properties); + SimpleWidgetWrapper withWidget(String widgetType); +} diff --git a/lib/src/main/java/io/github/oblarg/oblog/WrappedComplexWidget.java b/lib/src/main/java/io/github/oblarg/oblog/WrappedComplexWidget.java new file mode 100644 index 0000000..3d2a530 --- /dev/null +++ b/lib/src/main/java/io/github/oblarg/oblog/WrappedComplexWidget.java @@ -0,0 +1,26 @@ +package io.github.oblarg.oblog; + +import edu.wpi.first.wpilibj.shuffleboard.ComplexWidget; + +import java.util.Map; + +public class WrappedComplexWidget implements ComplexWidgetWrapper{ + + ComplexWidget widget; + + public WrappedComplexWidget(ComplexWidget widget) { + this.widget = widget; + } + + @Override + public ComplexWidgetWrapper withProperties(Map properties) { + widget.withProperties(properties); + return this; + } + + @Override + public ComplexWidgetWrapper withWidget(String widgetType) { + widget.withWidget(widgetType); + return this; + } +} diff --git a/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardContainer.java b/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardContainer.java index 6eed609..86b91d8 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardContainer.java +++ b/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardContainer.java @@ -1,5 +1,6 @@ package io.github.oblarg.oblog; +import edu.wpi.first.wpilibj.Sendable; import edu.wpi.first.wpilibj.shuffleboard.LayoutType; import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardContainer; @@ -17,7 +18,12 @@ public ShuffleboardLayoutWrapper getLayout(String title, LayoutType type) { } @Override - public ShuffleboardWidgetWrapper add(String title, Object defaultValue) { - return new WrappedShuffleboardWidget (container.add(title, defaultValue)); + public SimpleWidgetWrapper add(String title, Object defaultValue) { + return new WrappedSimpleWidget(container.add(title, defaultValue)); + } + + @Override + public ComplexWidgetWrapper add(String title, Sendable defaultValue) { + return new WrappedComplexWidget(container.add(title, defaultValue)); } } diff --git a/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardLayout.java b/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardLayout.java index ada196c..f745fc5 100644 --- a/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardLayout.java +++ b/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardLayout.java @@ -1,5 +1,6 @@ package io.github.oblarg.oblog; +import edu.wpi.first.wpilibj.Sendable; import edu.wpi.first.wpilibj.shuffleboard.LayoutType; import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardLayout; @@ -19,8 +20,13 @@ public ShuffleboardLayoutWrapper getLayout(String title, LayoutType type) { } @Override - public ShuffleboardWidgetWrapper add(String title, Object defaultValue) { - return new WrappedShuffleboardWidget(layout.add(title, defaultValue)); + public SimpleWidgetWrapper add(String title, Object defaultValue) { + return new WrappedSimpleWidget(layout.add(title, defaultValue)); + } + + @Override + public ComplexWidgetWrapper add(String title, Sendable defaultValue) { + return new WrappedComplexWidget(layout.add(title, defaultValue)); } @Override diff --git a/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardWidget.java b/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardWidget.java deleted file mode 100644 index e4cbfa6..0000000 --- a/lib/src/main/java/io/github/oblarg/oblog/WrappedShuffleboardWidget.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.github.oblarg.oblog; - -import edu.wpi.first.networktables.NetworkTableEntry; -import edu.wpi.first.wpilibj.shuffleboard.SimpleWidget; - -import java.util.Map; - -class WrappedShuffleboardWidget implements ShuffleboardWidgetWrapper { - - private SimpleWidget widget; - - WrappedShuffleboardWidget(SimpleWidget component) { - this.widget = component; - } - - @Override - public NetworkTableEntry getEntry() { - return widget.getEntry(); - } - - @Override - public ShuffleboardWidgetWrapper withProperties(Map properties) { - return new WrappedShuffleboardWidget(widget.withProperties(properties)); - } - - @Override - public ShuffleboardWidgetWrapper withWidget(String widgetType) { - return new WrappedShuffleboardWidget(widget.withWidget(widgetType)); - } -} diff --git a/lib/src/main/java/io/github/oblarg/oblog/WrappedSimpleWidget.java b/lib/src/main/java/io/github/oblarg/oblog/WrappedSimpleWidget.java new file mode 100644 index 0000000..ba55efd --- /dev/null +++ b/lib/src/main/java/io/github/oblarg/oblog/WrappedSimpleWidget.java @@ -0,0 +1,32 @@ +package io.github.oblarg.oblog; + +import edu.wpi.first.networktables.NetworkTableEntry; +import edu.wpi.first.wpilibj.shuffleboard.SimpleWidget; + +import java.util.Map; + +class WrappedSimpleWidget implements SimpleWidgetWrapper { + + private SimpleWidget widget; + + WrappedSimpleWidget(SimpleWidget component) { + this.widget = component; + } + + @Override + public NetworkTableEntry getEntry() { + return widget.getEntry(); + } + + @Override + public SimpleWidgetWrapper withProperties(Map properties) { + widget.withProperties(properties); + return this; + } + + @Override + public SimpleWidgetWrapper withWidget(String widgetType) { + widget.withWidget(widgetType); + return this; + } +} diff --git a/lib/src/test/java/io/github/oblarg/oblog/SendableTester.java b/lib/src/test/java/io/github/oblarg/oblog/SendableTester.java new file mode 100644 index 0000000..180ec7d --- /dev/null +++ b/lib/src/test/java/io/github/oblarg/oblog/SendableTester.java @@ -0,0 +1,38 @@ +package io.github.oblarg.oblog; + +import edu.wpi.first.networktables.NetworkTableEntry; +import edu.wpi.first.wpilibj.Sendable; +import io.github.oblarg.oblog.Logger; +import io.github.oblarg.oblog.ShuffleboardMocks; +import io.github.oblarg.oblog.TestLoggableBasic; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; + +public class SendableTester { + + @Test + public void testSendable() { + List mockedEntries = new ArrayList<>(); + + TestRootContainer rootContainer = new TestRootContainer(); + + ShuffleboardMocks mocks = new ShuffleboardMocks(mockedEntries); + + Logger.configureLoggingTest(Logger.LogType.LOG,rootContainer, mocks.getMockedShuffleboard(), mocks.getMockedNTInstance()); + + verify(mocks.getMockedShuffleboard()).getTab("TestSendable: Log"); + verify(mocks.getMockedContainer()).add(eq("drive"), any()); + } + + private class TestRootContainer { + + TestSendable test = new TestSendable(); + + } +} diff --git a/lib/src/test/java/io/github/oblarg/oblog/ShuffleboardMocks.java b/lib/src/test/java/io/github/oblarg/oblog/ShuffleboardMocks.java index cd18358..de191e7 100644 --- a/lib/src/test/java/io/github/oblarg/oblog/ShuffleboardMocks.java +++ b/lib/src/test/java/io/github/oblarg/oblog/ShuffleboardMocks.java @@ -1,6 +1,7 @@ package io.github.oblarg.oblog; import edu.wpi.first.networktables.*; +import edu.wpi.first.wpilibj.Sendable; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -16,7 +17,8 @@ class ShuffleboardMocks { private ShuffleboardWrapper mockedShuffleboard = mock(WrappedShuffleboard.class); private ShuffleboardContainerWrapper mockedContainer = mock(WrappedShuffleboardContainer.class); private ShuffleboardLayoutWrapper mockedLayout = mock(WrappedShuffleboardLayout.class); - private ShuffleboardWidgetWrapper mockedWidget = mock(WrappedShuffleboardWidget.class); + private SimpleWidgetWrapper mockedSimpleWidget = mock(WrappedSimpleWidget.class); + private ComplexWidgetWrapper mockedComplexWidget = mock(WrappedComplexWidget.class); private NetworkTableInstance mockedNTInstance = mock(NetworkTableInstance.class); @@ -28,13 +30,17 @@ class ShuffleboardMocks { this.mockedEntries = mockedEntries; when(mockedShuffleboard.getTab(any())).thenReturn(mockedContainer); when(mockedContainer.getLayout(any(), any())).thenReturn(mockedLayout); - when(mockedContainer.add(any(), any())).thenReturn(mockedWidget); + when(mockedContainer.add(any(), any(Object.class))).thenReturn(mockedSimpleWidget); + when(mockedContainer.add(any(), any(Sendable.class))).thenReturn(mockedComplexWidget); when(mockedLayout.getLayout(any(), any())).thenReturn(mockedLayout); - when(mockedLayout.add(any(), any())).thenReturn(mockedWidget); + when(mockedLayout.add(any(), any(Object.class))).thenReturn(mockedSimpleWidget); + when(mockedLayout.add(any(), any(Sendable.class))).thenReturn(mockedComplexWidget); when(mockedLayout.withProperties(any())).thenReturn(mockedLayout); - when(mockedWidget.withProperties(any())).thenReturn(mockedWidget); - when(mockedWidget.withWidget(any())).thenReturn(mockedWidget); - when(mockedWidget.getEntry()).thenReturn(newMockEntry(mockedEntries)); + when(mockedSimpleWidget.withProperties(any())).thenReturn(mockedSimpleWidget); + when(mockedSimpleWidget.withWidget(any())).thenReturn(mockedSimpleWidget); + when(mockedSimpleWidget.getEntry()).thenReturn(newMockEntry(mockedEntries)); + when(mockedComplexWidget.withProperties(any())).thenReturn(mockedComplexWidget); + when(mockedComplexWidget.withWidget(any())).thenReturn(mockedComplexWidget); when(mockedNTInstance.addEntryListener(any(NetworkTableEntry.class), any(), eq(EntryListenerFlags.kUpdate))).thenAnswer( new Answer() { public Object answer(InvocationOnMock invocation) { @@ -63,8 +69,8 @@ ShuffleboardLayoutWrapper getMockedLayout() { return mockedLayout; } - ShuffleboardWidgetWrapper getMockedWidget() { - return mockedWidget; + SimpleWidgetWrapper getMockedSimpleWidget() { + return mockedSimpleWidget; } NetworkTableInstance getMockedNTInstance() { diff --git a/lib/src/test/java/io/github/oblarg/oblog/TestSendable.java b/lib/src/test/java/io/github/oblarg/oblog/TestSendable.java new file mode 100644 index 0000000..c7d38e9 --- /dev/null +++ b/lib/src/test/java/io/github/oblarg/oblog/TestSendable.java @@ -0,0 +1,13 @@ +package io.github.oblarg.oblog; + +import static org.mockito.Mockito.*; + +import edu.wpi.first.wpilibj.Victor; +import edu.wpi.first.wpilibj.drive.DifferentialDrive; +import io.github.oblarg.oblog.annotations.Log; + +class TestSendable implements Loggable { + + @Log.DifferentialDrive + private DifferentialDrive drive = mock(DifferentialDrive.class); +}