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) } }