import { describe, expect, it } from 'vitest'; import { isScriptContent, isValidContent } from './html-parse'; describe('html-parse', () => { describe('isScriptContent', () => { it('应该识别 script 标签内容', () => { expect(isScriptContent('')).toBe(true); expect(isScriptContent(' ')).toBe(true); }); it('应该不识别非 script 标签内容', () => { expect(isScriptContent('
hello
')).toBe(false); expect(isScriptContent('')).toBe(false); expect(isScriptContent('hello world')).toBe(false); }); }); describe('isValidContent - 有效的 HTML 内容', () => { it('应该接受根节点完整且有 id 的 HTML(内部元素可不完整)', () => { expect(isValidContent('
h')).toBe(true); expect(isValidContent('
hello')).toBe(true); expect(isValidContent('
hello world
')).toBe(true); expect(isValidContent('
hello world')).toBe(true); expect(isValidContent('
hello world
')).toBe(true); }); it('应该接受完整的 HTML 元素', () => { expect(isValidContent('
')).toBe(true); expect(isValidContent('
content
')).toBe(true); expect(isValidContent('

Title

')).toBe(true); }); it('应该接受带有多个属性的根元素', () => { expect(isValidContent('
content
')).toBe(true); expect(isValidContent('
content
')).toBe(true); }); it('应该接受使用单引号的 id 属性', () => { expect(isValidContent("
content
")).toBe(true); expect(isValidContent("
content
")).toBe(true); }); }); describe('isValidContent - 无效的 HTML 内容', () => { it('应该拒绝根节点不完整的 HTML', () => { expect(isValidContent('
hello world
hello world { expect(isValidContent('
content
')).toBe(false); expect(isValidContent('
content
')).toBe(false); }); it('应该拒绝 id 属性不完整的根元素', () => { expect(isValidContent('
{ expect(isValidContent('
contentcontentcontent { expect(isValidContent('
hello world<')).toBe(false); expect(isValidContent('
content<')).toBe(false); expect(isValidContent('
test<')).toBe(false); }); it('应该接受 < 作为普通字符后跟完整闭合标签的内容', () => { expect(isValidContent('
hello world<
')).toBe(true); expect(isValidContent('
5 < 10
')).toBe(true); expect(isValidContent('
a
')).toBe(true); }); }); describe('isValidContent - 有效的 script 内容', () => { it('应该接受完整的 script 标签', () => { expect(isValidContent('')).toBe(true); expect(isValidContent('')).toBe(true); expect(isValidContent('')).toBe(true); }); it('应该接受使用单引号的 script 标签', () => { expect(isValidContent("")).toBe(true); }); it('应该接受带有多行代码的 script 标签', () => { const content = ``; expect(isValidContent(content)).toBe(true); }); }); describe('isValidContent - 无效的 script 内容', () => { it('应该拒绝没有 id 的 script 标签', () => { expect(isValidContent('')).toBe(false); }); it('应该拒绝没有闭合标签的 script', () => { expect(isValidContent('')).toBe(false); expect(isValidContent('')).toBe(false); }); it('应该拒绝末尾有孤立 < 字符的 script 内容', () => { expect(isValidContent('')).toBe(true); expect(isValidContent('')).toBe(true); }); }); describe('isValidContent - 有效的 style 内容', () => { it('应该接受完整的 style 标签', () => { expect(isValidContent('')).toBe(true); expect(isValidContent('')).toBe(true); expect(isValidContent('')).toBe(true); }); it('应该接受使用单引号的 style 标签', () => { expect(isValidContent("")).toBe(true); }); it('应该接受带有多行样式的 style 标签', () => { const content = ``; expect(isValidContent(content)).toBe(true); }); }); describe('isValidContent - 无效的 style 内容', () => { it('应该拒绝没有 id 的 style 标签', () => { expect(isValidContent('')).toBe(false); }); it('应该拒绝没有闭合标签的 style', () => { expect(isValidContent('')).toBe(false); expect(isValidContent('')).toBe(false); }); it('应该拒绝末尾有孤立 < 字符的 style 内容', () => { expect(isValidContent('')).toBe(true); }); }); describe('isValidContent - 边界情况', () => { it('应该拒绝空字符串', () => { expect(isValidContent('')).toBe(false); }); it('应该拒绝只有空格的字符串', () => { expect(isValidContent(' ')).toBe(false); }); it('应该拒绝 null 和 undefined', () => { expect(isValidContent(null as any)).toBe(false); expect(isValidContent(undefined as any)).toBe(false); }); it('应该拒绝非字符串类型', () => { expect(isValidContent(123 as any)).toBe(false); expect(isValidContent({} as any)).toBe(false); expect(isValidContent([] as any)).toBe(false); }); it('应该拒绝纯文本内容(不是标签)', () => { expect(isValidContent('hello world')).toBe(false); }); it('应该接受带有前导空格的有效内容', () => { expect(isValidContent('
content
')).toBe(true); expect(isValidContent(' ')).toBe(true); expect(isValidContent(' ')).toBe(true); }); }); });