Просмотр исходного кода

fix empty string filter args being casted into undefined (unblock #1135)

Evan You 10 лет назад
Родитель
Сommit
9e25f05430
2 измененных файлов с 9 добавлено и 6 удалено
  1. 4 3
      src/parsers/directive.js
  2. 5 3
      test/unit/specs/parsers/directive_spec.js

+ 4 - 3
src/parsers/directive.js

@@ -2,7 +2,7 @@ var _ = require('../util')
 var Cache = require('../cache')
 var cache = new Cache(1000)
 var argRE = /^[^\{\?]+$|^'[^']*'$|^"[^"]*"$/
-var filterTokenRE = /[^\s'"]+|'[^']+'|"[^"]+"/g
+var filterTokenRE = /[^\s'"]+|'[^']*'|"[^"]*"/g
 var reservedArgRE = /^in$|^-?\d+/
 
 /**
@@ -71,9 +71,10 @@ function processFilterArg (arg) {
   var stripped = reservedArgRE.test(arg)
     ? arg
     : _.stripQuotes(arg)
+  var dynamic = stripped === false
   return {
-    value: stripped || arg,
-    dynamic: !stripped
+    value: dynamic ? arg : stripped,
+    dynamic: dynamic
   }
 }
 

+ 5 - 3
test/unit/specs/parsers/directive_spec.js

@@ -18,18 +18,20 @@ describe('Directive Parser', function () {
   })
 
   it('with filters', function () {
-    var res = parse(' arg : exp | abc de \'ok\' | bcd')
+    var res = parse(' arg : exp | abc de \'ok\' \'\' | bcd')
     expect(res.length).toBe(1)
     expect(res[0].expression).toBe('exp')
     expect(res[0].arg).toBe('arg')
-    expect(res[0].raw).toBe('arg : exp | abc de \'ok\' | bcd')
+    expect(res[0].raw).toBe('arg : exp | abc de \'ok\' \'\' | bcd')
     expect(res[0].filters.length).toBe(2)
     expect(res[0].filters[0].name).toBe('abc')
-    expect(res[0].filters[0].args.length).toBe(2)
+    expect(res[0].filters[0].args.length).toBe(3)
     expect(res[0].filters[0].args[0].value).toBe('de')
     expect(res[0].filters[0].args[0].dynamic).toBe(true)
     expect(res[0].filters[0].args[1].value).toBe('ok')
     expect(res[0].filters[0].args[1].dynamic).toBe(false)
+    expect(res[0].filters[0].args[2].value).toBe('')
+    expect(res[0].filters[0].args[2].dynamic).toBe(false)
     expect(res[0].filters[1].name).toBe('bcd')
     expect(res[0].filters[1].args).toBeUndefined()
   })