import { describe, it, expect } from 'vitest'
import { extractURL, isIconFont, stripTranslate, safeEncodeURI, resolveURL } from '../src/utils'
describe('resolveURL', () => {
it('resolves relative URL against base', () => {
expect(resolveURL('bg_body.png', 'https://example.com/page')).toBe('https://example.com/bg_body.png')
expect(resolveURL('img/a.png', 'https://example.com/page/')).toBe('https://example.com/page/img/a.png')
})
it('returns data/blob/about URLs unchanged', () => {
expect(resolveURL('data:image/png;base64,abc')).toBe('data:image/png;base64,abc')
expect(resolveURL('blob:https://x/123')).toBe('blob:https://x/123')
})
})
describe('extractURL', () => {
it('extracts the URL from background-image', () => {
expect(extractURL('url("https://test.com/img.png")')).toBe('https://test.com/img.png')
expect(extractURL('none')).toBeNull()
})
})
describe('isIconFont', () => {
it('detects icon fonts', () => {
expect(isIconFont('Font Awesome')).toBe(true)
expect(isIconFont('Arial')).toBe(false)
})
})
describe('stripTranslate', () => {
it('removes translate transforms', () => {
expect(stripTranslate('translateX(10px) scale(2)')).toContain('scale(2)')
})
it('stripTranslate removes matrix and matrix3d', () => {
expect(stripTranslate('matrix(1,0,0,1,10,20)')).not.toContain('10,20')
expect(stripTranslate('matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,10,20,30,1)')).not.toContain('10,20,30')
})
})
describe('safeEncodeURI', () => {
it('returns an encoded string', () => {
expect(typeof safeEncodeURI('https://test.com/á')).toBe('string')
})
it('safeEncodeURI handles invalid URIs gracefully', () => {
expect(typeof safeEncodeURI('%E0%A4%A')).toBe('string')
})
})
describe('stripTranslate edge cases', () => {
it('returns empty string for empty or none', () => {
expect(stripTranslate('')).toBe('')
expect(stripTranslate('none')).toBe('')
})
it('returns original for malformed matrix', () => {
expect(stripTranslate('matrix(1,2,3)')).toBe('matrix(1,2,3)')
expect(stripTranslate('matrix3d(1,2,3)')).toBe('matrix3d(1,2,3)')
})
})