Skip to content

Commit ecd0451

Browse files
danyeawntoll
authored andcommitted
Add media js test
1 parent 2979b8b commit ecd0451

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

core/tests/javascript/media.html

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Pyodide Media Module Test</title>
5+
<link rel="stylesheet" href="../../dist/core.css">
6+
<script type="module" src="../../dist/core.js"></script>
7+
</head>
8+
<body>
9+
<h1>Pyodide Media Module Test</h1>
10+
<div id="test-results">Running tests...</div>
11+
12+
<script type="py" terminal>
13+
from pyscript import window, document
14+
from pyscript import media
15+
16+
async def run_tests():
17+
# Test basic module structure
18+
assert hasattr(media, "Device"), "media module should have Device class"
19+
assert hasattr(media, "list_devices"), "media module should have list_devices function"
20+
21+
# Test device enumeration
22+
devices = await media.list_devices()
23+
assert isinstance(devices, list), "list_devices should return a list"
24+
25+
# If we have devices, test properties of one
26+
if devices:
27+
device = devices[0]
28+
assert hasattr(device, "id"), "Device should have id property"
29+
assert hasattr(device, "group"), "Device should have group property"
30+
assert hasattr(device, "kind"), "Device should have kind property"
31+
assert hasattr(device, "label"), "Device should have label property"
32+
33+
document.getElementById('test-results').innerText = "Success!"
34+
document.documentElement.classList.add('media-ok')
35+
36+
await run_tests()
37+
</script>
38+
</body>
39+
</html>

core/tests/js_tests.spec.js

+21
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,24 @@ test('MicroPython buffered NO error', async ({ page }) => {
171171
const body = await page.evaluate(() => document.body.textContent.trim());
172172
await expect(body).toBe('');
173173
});
174+
175+
test('Pyodide media module', async ({ page }) => {
176+
await page.context().grantPermissions(['camera', 'microphone']);
177+
await page.context().addInitScript(() => {
178+
const originalEnumerateDevices = navigator.mediaDevices.enumerateDevices;
179+
navigator.mediaDevices.enumerateDevices = async function() {
180+
const realDevices = await originalEnumerateDevices.call(this);
181+
if (!realDevices || realDevices.length === 0) {
182+
return [
183+
{ deviceId: 'camera1', groupId: 'group1', kind: 'videoinput', label: 'Simulated Camera' },
184+
{ deviceId: 'mic1', groupId: 'group2', kind: 'audioinput', label: 'Simulated Microphone' }
185+
];
186+
}
187+
return realDevices;
188+
};
189+
});
190+
await page.goto('http://localhost:8080/tests/javascript/media.html');
191+
await page.waitForSelector('html.media-ok', { timeout: 10000 });
192+
const isSuccess = await page.evaluate(() => document.documentElement.classList.contains('media-ok'));
193+
expect(isSuccess).toBe(true);
194+
});

0 commit comments

Comments
 (0)