import { parseModel } from 'compiler/directives/model'

describe('model expression parser', () => {
  it('parse single path', () => {
    const res = parseModel('foo')
    expect(res.exp).toBe('foo')
    expect(res.key).toBe(null)
  })

  it('parse object dot notation', () => {
    const res = parseModel('a.b.c')
    expect(res.exp).toBe('a.b')
    expect(res.key).toBe('"c"')
  })

  it('parse string in brackets', () => {
    const res = parseModel('a["b"][c]')
    expect(res.exp).toBe('a["b"]')
    expect(res.key).toBe('c')
  })

  it('parse brackets with object dot notation', () => {
    const res = parseModel('a["b"][c].xxx')
    expect(res.exp).toBe('a["b"][c]')
    expect(res.key).toBe('"xxx"')
  })

  it('parse nested brackets', () => {
    const res = parseModel('a[i[c]]')
    expect(res.exp).toBe('a')
    expect(res.key).toBe('i[c]')
  })

  it('combined', () => {
    const res = parseModel('test.xxx.a["asa"][test1[key]]')
    expect(res.exp).toBe('test.xxx.a["asa"]')
    expect(res.key).toBe('test1[key]')
  })
})