1
import { describe, expect, it, vi } from 'vitest';
3
import { isSonomaOrLaterSafari } from './platform';
5
describe('isSonomaOrLaterSafari', () => {
8
vi.stubGlobal('navigator', {
10
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15',
15
it('should return false when userAgent is not Macintosh', () => {
16
vi.stubGlobal('navigator', { userAgent: 'Windows NT 10.0; Win64; x64' });
17
expect(isSonomaOrLaterSafari()).toBe(false);
20
it('should return false when navigator.maxTouchPoints > 0', () => {
21
Object.defineProperty(navigator, 'maxTouchPoints', { value: 1 });
22
expect(isSonomaOrLaterSafari()).toBe(false);
25
it('should return false when Safari version < 17', () => {
26
vi.stubGlobal('navigator', {
28
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15',
30
expect(isSonomaOrLaterSafari()).toBe(false);
33
it('should return false when audio codec check fails', () => {
34
vi.stubGlobal('navigator', {
36
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
38
vi.spyOn(document, 'createElement').mockReturnValueOnce({
39
canPlayType: vi.fn().mockReturnValue(''),
44
getContext = vi.fn().mockReturnValueOnce(null);
47
expect(isSonomaOrLaterSafari()).toBe(false);
50
it('should return false when WebGL check fails', () => {
51
vi.stubGlobal('navigator', {
53
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
55
vi.spyOn(document, 'createElement').mockReturnValueOnce({
56
canPlayType: vi.fn().mockReturnValue('maybe'),
61
getContext = vi.fn().mockReturnValueOnce(null);
64
expect(isSonomaOrLaterSafari()).toBe(false);
67
it('should return true when all checks pass', () => {
68
vi.stubGlobal('navigator', {
70
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
72
vi.spyOn(document, 'createElement').mockReturnValueOnce({
73
canPlayType: vi.fn().mockReturnValue('maybe'),
78
getContext = vi.fn().mockReturnValueOnce({});
81
expect(isSonomaOrLaterSafari()).toBe(true);