File size: 2,253 Bytes
96bdf6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e4e0afe
96bdf6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { ModeToggle } from './mode-toggle';
import { I18nProvider } from '@/lib/i18n';
import { renderInClientDom } from '@/test-utils/react-dom';
import assert from 'node:assert/strict';
import { describe, it } from 'node:test';
import * as React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';

const noop = () => {};

describe('ModeToggle responsive labels', { concurrency: false }, () => {
    it('lets translated mode labels wrap inside narrow tab cells', () => {
        const html = renderToStaticMarkup(
            <I18nProvider>
                <ModeToggle currentMode='generate' onModeChange={noop} />
            </I18nProvider>
        );

        assert.match(html, /复用提示词/);
        assert.match(html, /data-workbench-mode="generate"/);
        assert.match(html, /data-workbench-mode="edit"/);
        assert.match(html, /data-workbench-mode="batch"/);
        assert.match(html, /data-workbench-mode="reuse"/);
        assert.match(html, /text-\[13px\] leading-4 font-medium break-words whitespace-normal/);
        assert.match(html, /flex w-full min-w-0 items-center/);
        assert.doesNotMatch(html, /font-medium whitespace-nowrap/);
        assert.doesNotMatch(html, /block truncate text-\[13px\]/);
        assert.doesNotMatch(html, /sm:text-\[13px\]/);
        assert.doesNotMatch(html, /2xl:text-sm/);
        assert.doesNotMatch(html, /2xl:block/);
    });

    it('updates the controlled mode through a rendered tab click', async () => {
        function ModeToggleHarness() {
            const [mode, setMode] = React.useState<'generate' | 'edit' | 'batch' | 'reuse'>('generate');

            return <ModeToggle currentMode={mode} onModeChange={setMode} />;
        }

        const view = await renderInClientDom(
            <I18nProvider>
                <ModeToggleHarness />
            </I18nProvider>
        );

        try {
            const editTab = view.container.querySelector<HTMLButtonElement>('[data-workbench-mode="edit"]');
            assert.ok(editTab, 'missing edit mode tab');

            await view.click(editTab);

            assert.equal(editTab.getAttribute('data-state'), 'active');
        } finally {
            await view.cleanup();
        }
    });
});