Переглянути джерело

Add tests for escapeHtml filter

Danilo Bargen 8 роки тому
батько
коміт
2df0927d7b
2 змінених файлів з 23 додано та 2 видалено
  1. 7 1
      src/filters.ts
  2. 16 1
      tests/filters.js

+ 7 - 1
src/filters.ts

@@ -30,7 +30,13 @@ angular.module('3ema.filters', [])
         '"': '"',
         "'": ''',
     };
-    return (text) => (text !== undefined && text !== null ? text : '').replace(/[&<>"']/g, (m) => map[m]);
+    return (text: string) => {
+        if (text === undefined || text === null) {
+            text = '';
+        }
+        const escaped = text.replace(/[&<>"']/g, (m) => map[m]);
+        return escaped;
+    };
 })
 
 /**

+ 16 - 1
tests/filters.js

@@ -107,7 +107,7 @@ describe('Filters', function() {
                 ['<b>bold</b>', '*bold*'],
                 ['< 	b >bold</b>', '*bold*'],
                 ['<B>bold</b>', '*bold*'],
-                ['<b class="asdf">bold</b>', '*bold*'],
+                ['<b class="gsdf">bold</b>', '*bold*'],
                 ['<strong>bold</strong>', '*bold*'],
                 ['<b><b>bold</b></b>', '**bold**'],
                 ['<b><strong>bold</strong></b>', '**bold**'],
@@ -146,4 +146,19 @@ describe('Filters', function() {
         });
 
     });
+
+    describe('escapeHtml', function() {
+
+        this.testPatterns = (cases) => testPatterns('escapeHtml', cases);
+
+        it('escapes html tags', () => {
+            this.testPatterns([
+                ['<h1>heading</h1>', '&lt;h1&gt;heading&lt;/h1&gt;'],
+                ['<b>< script >foo&ndash;</b>< script>', '&lt;b&gt;&lt; script &gt;foo&amp;ndash;&lt;/b&gt;&lt; script&gt;'],
+                ['<a href="/">a</a>', '&lt;a href=&quot;/&quot;&gt;a&lt;/a&gt;'],
+            ]);
+        });
+
+    });
+
 });