github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/public/libs/vue-1.0.24/test/unit/specs/parsers/directive_spec.js (about)

     1  var parse = require('src/parsers/directive').parseDirective
     2  
     3  describe('Directive Parser', function () {
     4    it('simple', function () {
     5      var res = parse('exp')
     6      expect(res.expression).toBe('exp')
     7    })
     8  
     9    it('with filters', function () {
    10      var res = parse('exp | abc de \'ok\' \'\' 123 | bcd')
    11      expect(res.expression).toBe('exp')
    12      expect(res.filters.length).toBe(2)
    13      expect(res.filters[0].name).toBe('abc')
    14      expect(res.filters[0].args.length).toBe(4)
    15      expect(res.filters[0].args[0].value).toBe('de')
    16      expect(res.filters[0].args[0].dynamic).toBe(true)
    17      expect(res.filters[0].args[1].value).toBe('ok')
    18      expect(res.filters[0].args[1].dynamic).toBe(false)
    19      expect(res.filters[0].args[2].value).toBe('')
    20      expect(res.filters[0].args[2].dynamic).toBe(false)
    21      expect(res.filters[0].args[3].value).toBe(123)
    22      expect(res.filters[0].args[3].dynamic).toBe(false)
    23      expect(res.filters[1].name).toBe('bcd')
    24      expect(res.filters[1].args).toBeUndefined()
    25    })
    26  
    27    it('reserved filter args', function () {
    28      var res = parse('arr | filterBy a in b')
    29      expect(res.expression).toBe('arr')
    30      expect(res.filters.length).toBe(1)
    31      expect(res.filters[0].args.length).toBe(3)
    32      expect(res.filters[0].args[0].value).toBe('a')
    33      expect(res.filters[0].args[0].dynamic).toBe(true)
    34      expect(res.filters[0].args[1].value).toBe('in')
    35      expect(res.filters[0].args[1].dynamic).toBe(false)
    36      expect(res.filters[0].args[2].value).toBe('b')
    37      expect(res.filters[0].args[2].dynamic).toBe(true)
    38    })
    39  
    40    it('double pipe', function () {
    41      var res = parse('a || b | c')
    42      expect(res.expression).toBe('a || b')
    43      expect(res.filters.length).toBe(1)
    44      expect(res.filters[0].name).toBe('c')
    45      expect(res.filters[0].args).toBeUndefined()
    46    })
    47  
    48    it('single quote + boolean', function () {
    49      var res = parse('a ? \'b\' : c')
    50      expect(res.expression).toBe('a ? \'b\' : c')
    51      expect(res.filters).toBeUndefined()
    52    })
    53  
    54    it('double quote + boolean', function () {
    55      var res = parse('"a:b:c||d|e|f" || d ? a : b')
    56      expect(res.expression).toBe('"a:b:c||d|e|f" || d ? a : b')
    57      expect(res.filters).toBeUndefined()
    58      expect(res.arg).toBeUndefined()
    59    })
    60  
    61    it('nested function calls + array/object literals', function () {
    62      var res = parse('test(c.indexOf(d,f),"e,f")')
    63      expect(res.expression).toBe('test(c.indexOf(d,f),"e,f")')
    64    })
    65  
    66    it('array literal', function () {
    67      var res = parse('d || [e,f]')
    68      expect(res.expression).toBe('d || [e,f]')
    69      expect(res.filters).toBeUndefined()
    70    })
    71  
    72    it('object literal', function () {
    73      var res = parse('{a: 1, b: 2} | p')
    74      expect(res.expression).toBe('{a: 1, b: 2}')
    75      expect(res.filters.length).toBe(1)
    76      expect(res.filters[0].name).toBe('p')
    77      expect(res.filters[0].args).toBeUndefined()
    78    })
    79  
    80    it('escape string', function () {
    81      var res = parse("'a\\'b' | test")
    82      expect(res.expression).toBe("'a\\'b'")
    83      expect(res.filters.length).toBe(1)
    84      expect(res.filters[0].name).toBe('test')
    85      expect(res.filters[0].args).toBeUndefined()
    86    })
    87  
    88    it('cache', function () {
    89      var res1 = parse('a || b | c')
    90      var res2 = parse('a || b | c')
    91      expect(res1).toBe(res2)
    92    })
    93  })