Skip to content

Commit 0b18fc2

Browse files
added tests and cosmetic changes
1 parent d816c20 commit 0b18fc2

2 files changed

Lines changed: 187 additions & 2 deletions

File tree

packages/wdio-utils/src/envDetector.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,15 +199,13 @@ function isAndroid(capabilities?: WebdriverIO.Capabilities) {
199199
return false
200200
}
201201

202-
// Check for explicit Android platform declarations
203202
const hasAndroidPlatform = Boolean(
204203
(capabilities.platformName && capabilities.platformName.match(/Android/i)) ||
205204
(/Android/i.test(bsOptions.platformName || '')) ||
206205
(/Android/i.test(bsOptions.browserName || '')) ||
207206
(capabilities.browserName && capabilities.browserName.match(/Android/i))
208207
)
209208

210-
// Check for Android device names (case insensitive)
211209
const deviceName = bsOptions.deviceName || ''
212210
const hasAndroidDeviceName = /android|galaxy|pixel|nexus|oneplus|lg|htc|motorola|sony|huawei|vivo|oppo|xiaomi|redmi|realme|samsung/i.test(deviceName)
213211

packages/wdio-utils/tests/envDetector.test.ts

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,193 @@ describe('sessionEnvironmentDetector', () => {
223223
const { isAndroid } = sessionEnvironmentDetector({ capabilities, requestedCapabilities })
224224
expect(isAndroid).toEqual(true)
225225
})
226+
227+
it('should detect Android by device name in bstack:options using sessionEnvironmentDetector', () => {
228+
expect(sessionEnvironmentDetector({
229+
capabilities: { 'bstack:options': { deviceName: 'Samsung Galaxy S21' } },
230+
requestedCapabilities: {}
231+
}).isAndroid).toBe(true)
232+
233+
expect(sessionEnvironmentDetector({
234+
capabilities: { 'bstack:options': { deviceName: 'Google Pixel 7' } },
235+
requestedCapabilities: {}
236+
}).isAndroid).toBe(true)
237+
238+
expect(sessionEnvironmentDetector({
239+
capabilities: { 'bstack:options': { deviceName: 'OnePlus 9 Pro' } },
240+
requestedCapabilities: {}
241+
}).isAndroid).toBe(true)
242+
243+
expect(sessionEnvironmentDetector({
244+
capabilities: { 'bstack:options': { deviceName: 'Nexus 5X' } },
245+
requestedCapabilities: {}
246+
}).isAndroid).toBe(true)
247+
})
248+
249+
it('should detect Android by device name in bstack:options using capabilitiesEnvironmentDetector', () => {
250+
expect(capabilitiesEnvironmentDetector({
251+
'bstack:options': { deviceName: 'Samsung Galaxy S21' }
252+
}).isAndroid).toBe(true)
253+
254+
expect(capabilitiesEnvironmentDetector({
255+
'bstack:options': { deviceName: 'Google Pixel 7' }
256+
}).isAndroid).toBe(true)
257+
258+
expect(capabilitiesEnvironmentDetector({
259+
'bstack:options': { deviceName: 'OnePlus 9 Pro' }
260+
}).isAndroid).toBe(true)
261+
262+
expect(capabilitiesEnvironmentDetector({
263+
'bstack:options': { deviceName: 'Nexus 5X' }
264+
}).isAndroid).toBe(true)
265+
})
266+
267+
it('should detect Android by various manufacturer device names with sessionEnvironmentDetector', () => {
268+
const androidDevices = [
269+
'LG G8',
270+
'HTC One',
271+
'Motorola Edge',
272+
'Sony Xperia',
273+
'Huawei P30',
274+
'Vivo V21',
275+
'Oppo Find X3',
276+
'Xiaomi Mi 11',
277+
'Redmi Note 10',
278+
'Realme GT',
279+
'Samsung Galaxy Note'
280+
]
281+
282+
androidDevices.forEach(deviceName => {
283+
expect(sessionEnvironmentDetector({
284+
capabilities: { 'bstack:options': { deviceName } },
285+
requestedCapabilities: {}
286+
}).isAndroid).toBe(true)
287+
})
288+
})
289+
290+
it('should detect Android by various manufacturer device names with capabilitiesEnvironmentDetector', () => {
291+
const androidDevices = [
292+
'LG G8',
293+
'HTC One',
294+
'Motorola Edge',
295+
'Sony Xperia',
296+
'Huawei P30',
297+
'Vivo V21',
298+
'Oppo Find X3',
299+
'Xiaomi Mi 11',
300+
'Redmi Note 10',
301+
'Realme GT',
302+
'Samsung Galaxy Note'
303+
]
304+
305+
androidDevices.forEach(deviceName => {
306+
expect(capabilitiesEnvironmentDetector({
307+
'bstack:options': { deviceName }
308+
}).isAndroid).toBe(true)
309+
})
310+
})
311+
312+
it('should not detect Android for non-Android device names with sessionEnvironmentDetector', () => {
313+
const nonAndroidDevices = [
314+
'iPhone 13',
315+
'iPad Pro',
316+
'iPhone SE',
317+
'iPad Mini',
318+
'Desktop Chrome',
319+
'MacBook Pro'
320+
]
321+
322+
nonAndroidDevices.forEach(deviceName => {
323+
expect(sessionEnvironmentDetector({
324+
capabilities: { 'bstack:options': { deviceName } },
325+
requestedCapabilities: {}
326+
}).isAndroid).toBe(false)
327+
})
328+
})
329+
330+
it('should not detect Android for non-Android device names with capabilitiesEnvironmentDetector', () => {
331+
const nonAndroidDevices = [
332+
'iPhone 13',
333+
'iPad Pro',
334+
'iPhone SE',
335+
'iPad Mini',
336+
'Desktop Chrome',
337+
'MacBook Pro'
338+
]
339+
340+
nonAndroidDevices.forEach(deviceName => {
341+
expect(capabilitiesEnvironmentDetector({
342+
'bstack:options': { deviceName }
343+
}).isAndroid).toBe(false)
344+
})
345+
})
346+
347+
it('should detect Android case-insensitively by device name with both detectors', () => {
348+
expect(sessionEnvironmentDetector({
349+
capabilities: { 'bstack:options': { deviceName: 'SAMSUNG GALAXY S21' } },
350+
requestedCapabilities: {}
351+
}).isAndroid).toBe(true)
352+
353+
expect(capabilitiesEnvironmentDetector({
354+
'bstack:options': { deviceName: 'google pixel 7' }
355+
}).isAndroid).toBe(true)
356+
357+
expect(sessionEnvironmentDetector({
358+
capabilities: { 'bstack:options': { deviceName: 'Galaxy S22' } },
359+
requestedCapabilities: {}
360+
}).isAndroid).toBe(true)
361+
362+
expect(capabilitiesEnvironmentDetector({
363+
'bstack:options': { deviceName: 'ONEPLUS 10' }
364+
}).isAndroid).toBe(true)
365+
})
366+
367+
it('should detect Android when both platform and device name are present', () => {
368+
const capabilities = {
369+
platformName: 'Android',
370+
'bstack:options': { deviceName: 'Samsung Galaxy S21' }
371+
}
372+
373+
expect(sessionEnvironmentDetector({
374+
capabilities,
375+
requestedCapabilities: {}
376+
}).isAndroid).toBe(true)
377+
378+
expect(capabilitiesEnvironmentDetector(capabilities).isAndroid).toBe(true)
379+
})
380+
381+
it('should detect Android when only device name is present without platform', () => {
382+
const capabilities = { 'bstack:options': { deviceName: 'Pixel 7' } }
383+
384+
expect(sessionEnvironmentDetector({
385+
capabilities,
386+
requestedCapabilities: {}
387+
}).isAndroid).toBe(true)
388+
389+
expect(capabilitiesEnvironmentDetector(capabilities).isAndroid).toBe(true)
390+
})
391+
392+
it('should handle empty deviceName in bstack:options', () => {
393+
const capabilities = { 'bstack:options': { deviceName: '' } }
394+
395+
expect(sessionEnvironmentDetector({
396+
capabilities,
397+
requestedCapabilities: {}
398+
}).isAndroid).toBe(false)
399+
400+
expect(capabilitiesEnvironmentDetector(capabilities).isAndroid).toBe(false)
401+
})
402+
403+
it('should handle missing deviceName in bstack:options', () => {
404+
const capabilities = { 'bstack:options': {} }
405+
406+
expect(sessionEnvironmentDetector({
407+
capabilities,
408+
requestedCapabilities: {}
409+
}).isAndroid).toBe(false)
410+
411+
expect(capabilitiesEnvironmentDetector(capabilities).isAndroid).toBe(false)
412+
})
226413
})
227414

228415
it('isSeleniumStandalone', () => {

0 commit comments

Comments
 (0)