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

describe('Picker.uvue', () => {
  const harmony = process.env.uniTestPlatformInfo.startsWith('harmony')
  const web = process.env.uniTestPlatformInfo.startsWith('web')
  if (!harmony && !web) {
    it('app', () => {
      expect(1).toBe(1)
    })
    return
  }
  beforeAll(async () => {
    page = await program.reLaunch(PAGE_PATH)
    await page.waitFor('view');
  });

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

  function getValue(className, propertyValue = 'value') {
    return new Promise(async (resolve, reject) => {
      const el = await page.$(className)
      const value = await el.property(propertyValue)
      resolve(value)
    })
  }

  it('picker disabled', async () => {
    expect(await getValue('.picker-disabled--test')).toBe(0)
    const pickerValueEl = await page.$('.picker-disabled--value')
    expect(await pickerValueEl.text()).toBe('中国')
  })

  it('picker selector', async () => {
    expect(await getValue('.picker-selector--test')).toBe(await getData('index'))
    await page.setData({ index: 1 })
    const pickerValueEl = await page.$('.picker-selector--value')
    expect(await pickerValueEl.text()).toBe('美国')

    await page.callMethod('setSelectorValue')
    await page.waitFor(1500)
    expect(await pickerValueEl.text()).toBe('巴西')
  })

  it('picker multiSelector', async () => {
    expect(await getValue('.picker-multi--test')).toEqual(await getData('multiIndex'))
    const pickerMultiValueEl = await page.$('.picker-multi--value')
    expect(await pickerMultiValueEl.text()).toStrictEqual('亚洲，中国，北京')
    await page.setData({ multiIndex: [0, 0, 2] })
    const pickerMultiValueEl2 = await page.$('.picker-multi--value')
    expect(await pickerMultiValueEl2.text()).toStrictEqual('亚洲，中国，广州')
  })

  it('picker time', async () => {
    expect(await getValue('.picker-time--test')).toBe(await getData('time'))
    await page.setData({ time: '15:30' })
    expect(await getValue('.picker-time--test')).toEqual('15:30')
  })

  it('picer date-day', async () => {
    expect(await getValue('.picker-date-day--test')).toBe(await getData('dayDate'))
    await page.setData({ dayDate: '2028-05-20' })
    expect(await getValue('.picker-date-day--test')).toEqual('2028-05-20')
    expect(await getValue('.picker-date-day--test', 'start')).toStrictEqual(await getData('startDate'))
    expect(await getValue('.picker-date-day--test', 'end')).toStrictEqual(await getData('endDate'))
  })
  it('picker date-month', async () => {
    expect(await getValue('.picker-date-month--test')).toBe(await getData('monthDate'))
    await page.setData({ monthDate: '2028-05' })
    expect(await getValue('.picker-date-month--test')).toEqual('2028-05')
    expect(await getValue('.picker-date-month--test', 'start')).toStrictEqual(await getData('startDate'))
    expect(await getValue('.picker-date-month--test', 'end')).toStrictEqual(await getData('endDate'))
  })
  it('picker date-year', async () => {
    expect(await getValue('.picker-date-year--test')).toBe(await getData('yearDate'))
    await page.setData({ yearDate: '2028' })
    expect(await getValue('.picker-date-year--test')).toEqual('2028')
    expect(await getValue('.picker-date-year--test', 'start')).toStrictEqual(await getData('startDate'))
    expect(await getValue('.picker-date-year--test', 'end')).toStrictEqual(await getData('endDate'))
  })

})
