Parcourir la source

fix directive parser to deal with arguments containing non-identifier chars

Evan You il y a 11 ans
Parent
commit
0e81f7344e
2 fichiers modifiés avec 10 ajouts et 1 suppressions
  1. 1 1
      src/parse/directive.js
  2. 9 0
      test/unit/specs/parse/directive_spec.js

+ 1 - 1
src/parse/directive.js

@@ -1,7 +1,7 @@
 var _ = require('../util')
 var _ = require('../util')
 var Cache = require('../cache')
 var Cache = require('../cache')
 var cache = new Cache(1000)
 var cache = new Cache(1000)
-var argRE = /^[\w\$-]+$|^'[^']*'$|^"[^"]*"$/
+var argRE = /^[^\{\?]+$|^'[^']*'$|^"[^"]*"$/
 var filterTokenRE = /[^\s'"]+|'[^']+'|"[^"]+"/g
 var filterTokenRE = /[^\s'"]+|'[^']+'|"[^"]+"/g
 
 
 /**
 /**

+ 9 - 0
test/unit/specs/parse/directive_spec.js

@@ -104,6 +104,15 @@ describe('Directive Parser', function () {
     expect(res[2].expression).toBe('{a:1,b:2}')
     expect(res[2].expression).toBe('{a:1,b:2}')
   })
   })
 
 
+  it('arguments with non-indentifier chars', function () {
+    var res = parse('show.bs.collapse:test, a@b%c:test')
+    expect(res.length).toBe(2)
+    expect(res[0].arg).toBe('show.bs.collapse')
+    expect(res[0].expression).toBe('test')
+    expect(res[1].arg).toBe('a@b%c')
+    expect(res[1].expression).toBe('test')
+  })
+
   it('quoted arguments', function () {
   it('quoted arguments', function () {
     var res = parse('"xlink:href":a?"fsef":ff')
     var res = parse('"xlink:href":a?"fsef":ff')
     expect(res.length).toBe(1)
     expect(res.length).toBe(1)