function getData(key = '') {
  return new Promise(async (resolve, reject) => {
    const data = await page.data()
    resolve(key ? data[key] : data)
  })
}

const PAGE_PATH = '/pages/component/picker-view/picker-view'

let page
beforeAll(async () => {
  page = await program.reLaunch(PAGE_PATH)
  await page.waitFor('view')
  await page.callMethod('setEventCallbackNum', 0)
})

afterEach(async () => {
  await page.callMethod('setEventCallbackNum', 0)
})

describe('PickerView.uvue', () => {
  it('value', async () => {
    const el = await page.$('.picker-view')
    await page.callMethod('setValue')
    await page.waitFor(1000)
    const newValue1 = await el.property('value')
    // TODO
    expect(newValue1.toString()).toEqual('0,0,0')
    if (process.env.UNI_PLATFORM === 'app-android') {
      expect(await getData('result')).toEqual([0, 0, 0])
    }

    await page.callMethod('setValue1')
    await page.waitFor(1000)
    const newValue2 = await el.property('value')
    // TODO
    expect(newValue2.toString()).toEqual('10,10,10')
    if (process.env.UNI_PLATFORM === 'app-android') {
      expect(await getData('result')).toEqual([10, 10, 10])
    }
  })

  it('length', async () => {
    const els = await page.$$('.picker-view')
    expect(els.length).toBe(1)
    const els1 = await page.$$('.picker-view-column')
    expect(els1.length).toBe(3)
  })
  it('indicator-style', async () => {
    const el = await page.$('.picker-view')
    await page.setData({
      indicatorStyle: 'height: 100px;',
    })
    await page.waitFor(500)
    expect(await el.attribute('indicatorStyle')).toBe('height: 100px;')
  })
  it('mask-top-style', async () => {
    const el = await page.$('.picker-view')
    await page.setData({
      maskTopStyle: 'background: #ffffff;',
    })
    expect(await el.attribute('mask-top-style')).toBe('background: #ffffff;')
  })
  it('mask-bottom-style', async () => {
    const el = await page.$('.picker-view')
    await page.setData({
      maskBottomStyle: 'background: #ffffff;',
    })
    expect(await el.attribute('mask-bottom-style')).toBe('background: #ffffff;')
  })

  it('reopen-picker-view-page', async () => {
    page = await program.switchTab('/pages/tabBar/component')
    await page.waitFor(500)
    page = await program.navigateTo(PAGE_PATH)
    await page.waitFor(500)
    const date = new Date()
    const {
      year,
      month,
      day
    } = await page.data()
    expect(year).toEqual(date.getFullYear())
    expect(month).toEqual(date.getMonth() + 1)
    expect(day).toEqual(date.getDate())
  })

  it('trigger UniPickerViewChangeEvent', async () => {

    // if web skip todo
    if (
      process.env.uniTestPlatformInfo.startsWith('web')
    ) {
      expect(1).toBe(1)
      return
    }

    const el = await page.$('.picker-view')
    await page.callMethod('setValue')
    await page.waitFor(1500)
    const eventCallbackNum = await page.callMethod('getEventCallbackNum')
    // 3 times 3*3
    expect(eventCallbackNum).toBe(9)
  })
})
