{
+ expect(escapeHtml('a>b')).toBe('a>b')
+ })
+
+ it('escapes double quotes', () => {
+ expect(escapeHtml('a"b')).toBe('a"b')
+ })
+
+ it('escapes single quotes', () => {
+ expect(escapeHtml("a'b")).toBe('a'b')
+ })
+
+ it('escapes all entities in a single string', () => {
+ expect(escapeHtml('&\'test\'')).toBe(
+ '<div class="x">&'test''
+ )
+ })
+
+ it('returns empty string for null', () => {
+ expect(escapeHtml(null)).toBe('')
+ })
+
+ it('returns empty string for undefined', () => {
+ expect(escapeHtml(undefined)).toBe('')
+ })
+
+ it('converts numbers to string', () => {
+ expect(escapeHtml(42)).toBe('42')
+ })
+
+ it('passes safe strings through unchanged', () => {
+ expect(escapeHtml('hello world')).toBe('hello world')
+ })
+
+ it('neutralizes script tag XSS payload', () => {
+ const payload = ''
+ const result = escapeHtml(payload)
+ expect(result).not.toContain('