import { describe, expect, it } from 'vitest'
import { parseEmbedCode } from '../src/node/demo/normal.js'
describe('parseEmbedCode', () => {
it('should parse basic HTML code', () => {
const code = '
Hello World
'
const result = parseEmbedCode(code)
expect(result.html).toBe('Hello World
')
expect(result.script).toBe('')
expect(result.css).toBe('')
expect(result.jsType).toBe('js')
expect(result.cssType).toBe('css')
})
it('should parse HTML with script', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.html?.trim()).toBe('Hello
')
expect(result.script?.trim()).toBe('const message = \'Hello World\'')
expect(result.jsType).toBe('js')
})
it('should parse HTML with TypeScript script', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.jsType).toBe('ts')
expect(result.script?.trim()).toBe('const message: string = \'Hello World\'')
})
it('should parse HTML with style', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.html?.trim()).toBe('Hello
')
expect(result.css?.trim()).toBe('.container { color: red; }')
expect(result.cssType).toBe('css')
})
it('should parse HTML with SCSS style', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.cssType).toBe('scss')
})
it('should parse HTML with Less style', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.cssType).toBe('less')
})
it('should parse HTML with Stylus style', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.cssType).toBe('stylus')
})
it('should parse HTML with Stylus style (styl extension)', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.cssType).toBe('stylus')
})
it('should parse HTML with config', () => {
const code = `Hello
`
const result = parseEmbedCode(code)
expect(result.imports?.trim()).toContain('jsLib')
expect(result.imports?.trim()).toContain('cssLib')
})
it('should parse complete code with all parts', () => {
const code = `{{ message }}
`
const result = parseEmbedCode(code)
expect(result.html?.trim()).toBe('{{ message }}
')
expect(result.imports).toContain('vue')
expect(result.jsType).toBe('ts')
expect(result.cssType).toBe('scss')
})
it('should handle empty code', () => {
const result = parseEmbedCode('')
expect(result.html).toBe('')
expect(result.script).toBe('')
expect(result.css).toBe('')
})
it('should handle code with only whitespace', () => {
const result = parseEmbedCode(' \n \n ')
expect(result.html?.trim()).toBe('')
})
it('should handle unknown script lang as js', () => {
const code = ``
const result = parseEmbedCode(code)
expect(result.jsType).toBe('js')
})
it('should handle unknown style lang as css', () => {
const code = ``
const result = parseEmbedCode(code)
expect(result.cssType).toBe('css')
})
})