lobe-chat

Форк
0
/
platform.test.ts 
83 строки · 2.7 Кб
1
import { describe, expect, it, vi } from 'vitest';
2

3
import { isSonomaOrLaterSafari } from './platform';
4

5
describe('isSonomaOrLaterSafari', () => {
6
  beforeEach(() => {
7
    // 重置 navigator 对象
8
    vi.stubGlobal('navigator', {
9
      userAgent:
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',
11
      maxTouchPoints: 0,
12
    });
13
  });
14

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);
18
  });
19

20
  it('should return false when navigator.maxTouchPoints > 0', () => {
21
    Object.defineProperty(navigator, 'maxTouchPoints', { value: 1 });
22
    expect(isSonomaOrLaterSafari()).toBe(false);
23
  });
24

25
  it('should return false when Safari version < 17', () => {
26
    vi.stubGlobal('navigator', {
27
      userAgent:
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',
29
    });
30
    expect(isSonomaOrLaterSafari()).toBe(false);
31
  });
32

33
  it('should return false when audio codec check fails', () => {
34
    vi.stubGlobal('navigator', {
35
      userAgent:
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',
37
    });
38
    vi.spyOn(document, 'createElement').mockReturnValueOnce({
39
      canPlayType: vi.fn().mockReturnValue(''),
40
    } as any);
41
    vi.stubGlobal(
42
      'OffscreenCanvas',
43
      class {
44
        getContext = vi.fn().mockReturnValueOnce(null);
45
      },
46
    );
47
    expect(isSonomaOrLaterSafari()).toBe(false);
48
  });
49

50
  it('should return false when WebGL check fails', () => {
51
    vi.stubGlobal('navigator', {
52
      userAgent:
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',
54
    });
55
    vi.spyOn(document, 'createElement').mockReturnValueOnce({
56
      canPlayType: vi.fn().mockReturnValue('maybe'),
57
    } as any);
58
    vi.stubGlobal(
59
      'OffscreenCanvas',
60
      class {
61
        getContext = vi.fn().mockReturnValueOnce(null);
62
      },
63
    );
64
    expect(isSonomaOrLaterSafari()).toBe(false);
65
  });
66

67
  it('should return true when all checks pass', () => {
68
    vi.stubGlobal('navigator', {
69
      userAgent:
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',
71
    });
72
    vi.spyOn(document, 'createElement').mockReturnValueOnce({
73
      canPlayType: vi.fn().mockReturnValue('maybe'),
74
    } as any);
75
    vi.stubGlobal(
76
      'OffscreenCanvas',
77
      class {
78
        getContext = vi.fn().mockReturnValueOnce({});
79
      },
80
    );
81
    expect(isSonomaOrLaterSafari()).toBe(true);
82
  });
83
});
84

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.