Преглед изворни кода

directive parser: fix reserved arg handling

Evan You пре 10 година
родитељ
комит
f46e516907
2 измењених фајлова са 25 додато и 7 уклоњено
  1. 12 7
      src/parsers/directive.js
  2. 13 0
      test/unit/specs/parsers/directive_spec.js

+ 12 - 7
src/parsers/directive.js

@@ -41,13 +41,18 @@ function pushFilter () {
  */
 
 function processFilterArg (arg) {
-  var stripped = reservedArgRE.test(arg)
-    ? arg
-    : _.stripQuotes(arg)
-  var dynamic = stripped === arg
-  return {
-    value: dynamic ? arg : stripped,
-    dynamic: dynamic
+  if (reservedArgRE.test(arg)) {
+    return {
+      value: arg,
+      dynamic: false
+    }
+  } else {
+    var stripped = _.stripQuotes(arg)
+    var dynamic = stripped === arg
+    return {
+      value: dynamic ? arg : stripped,
+      dynamic: dynamic
+    }
   }
 }
 

+ 13 - 0
test/unit/specs/parsers/directive_spec.js

@@ -23,6 +23,19 @@ describe('New Directive Parser', function () {
     expect(res.filters[1].args).toBeUndefined()
   })
 
+  it('reserved filter args', function () {
+    var res = parse('arr | filterBy a in b')
+    expect(res.expression).toBe('arr')
+    expect(res.filters.length).toBe(1)
+    expect(res.filters[0].args.length).toBe(3)
+    expect(res.filters[0].args[0].value).toBe('a')
+    expect(res.filters[0].args[0].dynamic).toBe(true)
+    expect(res.filters[0].args[1].value).toBe('in')
+    expect(res.filters[0].args[1].dynamic).toBe(false)
+    expect(res.filters[0].args[2].value).toBe('b')
+    expect(res.filters[0].args[2].dynamic).toBe(true)
+  })
+
   it('double pipe', function () {
     var res = parse('a || b | c')
     expect(res.expression).toBe('a || b')