mirror of
https://github.com/zoriya/v10.git
synced 2026-08-14 01:49:30 +00:00
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
import { safeDefine } from '../safe-define';
|
|
|
|
describe('safeDefine', () => {
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
});
|
|
|
|
it('registers a custom element', () => {
|
|
class TestElement extends HTMLElement {
|
|
static tagName = 'test-sd-register';
|
|
}
|
|
|
|
expect(customElements.get('test-sd-register')).toBeUndefined();
|
|
safeDefine(TestElement);
|
|
expect(customElements.get('test-sd-register')).toBe(TestElement);
|
|
});
|
|
|
|
it('does not throw when element is already registered', () => {
|
|
class TestElement extends HTMLElement {
|
|
static tagName = 'test-sd-no-throw';
|
|
}
|
|
|
|
customElements.define('test-sd-no-throw', TestElement);
|
|
expect(() => safeDefine(TestElement)).not.toThrow();
|
|
});
|
|
|
|
it('does not replace an existing registration', () => {
|
|
class Original extends HTMLElement {
|
|
static tagName = 'test-sd-no-replace';
|
|
}
|
|
class Replacement extends HTMLElement {
|
|
static tagName = 'test-sd-no-replace';
|
|
}
|
|
|
|
safeDefine(Original);
|
|
safeDefine(Replacement);
|
|
expect(customElements.get('test-sd-no-replace')).toBe(Original);
|
|
});
|
|
|
|
it('does nothing when customElements is unavailable', () => {
|
|
vi.stubGlobal('customElements', undefined);
|
|
|
|
class TestElement extends HTMLElement {
|
|
static tagName = 'test-sd-ssr';
|
|
}
|
|
|
|
expect(() => safeDefine(TestElement)).not.toThrow();
|
|
});
|
|
});
|