diff --git a/cscore/src/main/java/edu/wpi/cscore/UsbCamera.java b/cscore/src/main/java/edu/wpi/cscore/UsbCamera.java index 13689edbbf..9a99858731 100644 --- a/cscore/src/main/java/edu/wpi/cscore/UsbCamera.java +++ b/cscore/src/main/java/edu/wpi/cscore/UsbCamera.java @@ -52,7 +52,7 @@ public class UsbCamera extends VideoCamera { * * @param level 0=don't display Connecting message, 1=do display message */ - void setConnectVerbose(int level) { + public void setConnectVerbose(int level) { CameraServerJNI.setProperty(CameraServerJNI.getSourceProperty(m_handle, "connect_verbose"), level); } diff --git a/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java b/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java new file mode 100644 index 0000000000..36903b9926 --- /dev/null +++ b/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java @@ -0,0 +1,65 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.cscore; + +import java.time.Duration; +import java.util.Arrays; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledOnOs; +import org.junit.jupiter.api.condition.OS; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class UsbCameraTest { + @Nested + @EnabledOnOs(OS.LINUX) + class ConnectVerbose { + @Test + void setConnectVerboseEnabledTest() { + try (UsbCamera camera = new UsbCamera("Nonexistant Camera", getNonexistentCameraDev())) { + camera.setConnectVerbose(1); + + CompletableFuture result = new CompletableFuture<>(); + CameraServerJNI.setLogger((level, file, line, message) -> { + result.complete(message); + }, 20); + + assertTimeoutPreemptively(Duration.ofSeconds(5), + () -> assertTrue(result.get().contains("Connecting to USB camera on "))); + } + } + + @Test + void setConnectVerboseDisabledTest() { + try (UsbCamera camera = new UsbCamera("Nonexistant Camera", getNonexistentCameraDev())) { + camera.setConnectVerbose(0); + + CompletableFuture result = new CompletableFuture<>(); + CameraServerJNI.setLogger((level, file, line, message) -> { + result.complete(message); + }, 20); + + assertThrows(TimeoutException.class, + () -> result.get(3, TimeUnit.SECONDS)); + } + } + } + + private static int getNonexistentCameraDev() { + return Arrays.stream(CameraServerJNI.enumerateUsbCameras()) + .mapToInt(info -> info.dev) + .max().orElseGet(() -> -1) + 1; + } +}