mirror of
https://github.com/taigrr/vidnumerator.git
synced 2026-04-02 05:08:52 -07:00
- Add 6 tests covering nil receiver, invalid fd, invalid path, regular file, device enumeration, and capability constant - Fix typo: fileDesciptor -> fileDescriptor - Extract magic number 69206017 into V4L2CapVideoCapture constant - Bump golang.org/x/sys v0.41.0 -> v0.42.0 - Bump Go 1.26.0 -> 1.26.1 - Add staticcheck to CI workflow
79 lines
2.2 KiB
Go
79 lines
2.2 KiB
Go
package vidnumerator
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestCapQueryFdNilReceiver(t *testing.T) {
|
|
var nilCap *cap
|
|
err := nilCap.QueryFd(0)
|
|
if err == nil {
|
|
t.Fatal("expected error for nil receiver, got nil")
|
|
}
|
|
if err.Error() != "nil receiver" {
|
|
t.Fatalf("expected 'nil receiver' error, got: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestCapQueryFdInvalidFd(t *testing.T) {
|
|
ic := cap{}
|
|
err := ic.QueryFd(-1)
|
|
if err == nil {
|
|
t.Fatal("expected error for invalid file descriptor, got nil")
|
|
}
|
|
}
|
|
|
|
func TestIsVideoCaptureInvalidPath(t *testing.T) {
|
|
isVid, err := IsVideoCapture("/nonexistent/path")
|
|
if err == nil {
|
|
t.Fatal("expected error for nonexistent path, got nil")
|
|
}
|
|
if isVid {
|
|
t.Fatal("expected false for nonexistent path")
|
|
}
|
|
}
|
|
|
|
func TestIsVideoCaptureRegularFile(t *testing.T) {
|
|
tmpFile, err := os.CreateTemp("", "vidnum-test-*")
|
|
if err != nil {
|
|
t.Fatalf("failed to create temp file: %v", err)
|
|
}
|
|
defer os.Remove(tmpFile.Name())
|
|
defer tmpFile.Close()
|
|
|
|
isVid, err := IsVideoCapture(tmpFile.Name())
|
|
if err == nil {
|
|
// Some kernels may return an error, some may not — both are valid
|
|
if isVid {
|
|
t.Fatal("regular file should not be detected as video capture")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestEnumeratedVideoDevices(t *testing.T) {
|
|
// This test verifies the function runs without panic.
|
|
// On machines without video devices, it should return an empty list.
|
|
devices, err := EnumeratedVideoDevices()
|
|
if err != nil {
|
|
// /dev might not be readable in some CI environments
|
|
t.Skipf("EnumeratedVideoDevices returned error (expected in some environments): %v", err)
|
|
}
|
|
// Just verify all returned paths start with /dev/video
|
|
for _, device := range devices {
|
|
if len(device) < 10 || device[:10] != "/dev/video" {
|
|
t.Errorf("unexpected device path: %s", device)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestV4L2CapVideoCaptureConstant(t *testing.T) {
|
|
// Verify the constant matches the expected V4L2 capability flags.
|
|
// 69206017 = 0x04200001 = V4L2_CAP_VIDEO_CAPTURE (0x1) | V4L2_CAP_STREAMING (0x04000000) | V4L2_CAP_DEVICE_CAPS (0x80000000)
|
|
// Note: 69206017 = 0x41F8001 — let's verify the actual hex.
|
|
expected := uint32(69206017)
|
|
if V4L2CapVideoCapture != expected {
|
|
t.Fatalf("V4L2CapVideoCapture = %d, expected %d", V4L2CapVideoCapture, expected)
|
|
}
|
|
}
|