# jobs for functional test
parameters:
  vmImage: 'macOS-10.14'
  vmImageForIOS: 'macOS-10.14' # Not sure the reason, but macOS 10.14 instance raises no info.plist error
  xcodeForIOS: 11.3
  xcodeForTVOS: 11.3
  androidSDK: 29
  appiumVersion: 'beta'
  ignoreVersionSkip: true
  CI: true

jobs:
  # Run unit tests on different Node versions
  - job: func_test_ios_base
    pool:
      vmImage: ${{ parameters.vmImageForIOS }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForIOS }}
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/driver_test.rb,test/functional/ios/patch_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS'

  - job: func_test_ios_webdriver1
    pool:
      vmImage: ${{ parameters.vmImageForIOS }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForIOS }}
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/webdriver/create_session_test.rb,test/functional/ios/webdriver/w3c_actions_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS_webdriver1'

  - job: func_test_ios_webdriver2
    pool:
      vmImage: ${{ parameters.vmImageForIOS }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForIOS }}
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/webdriver/device_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS_webdriver2'

  - job: func_test_ios_ios1
    pool:
      vmImage: ${{ parameters.vmImageForIOS }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForIOS }}
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/ios/device_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS_ios1'

  - job: func_test_ios_ios2
    pool:
      vmImage: ${{ parameters.vmImageForIOS }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForIOS }}
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/ios/device_wda_attachment_test.rb,test/functional/ios/ios/search_context_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS_ios2'

  - job: func_test_ios_ios3
    pool:
      vmImage: ${{ parameters.vmImageForIOS }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForIOS }}
    - script: brew install ffmpeg && brew tap wix/brew && brew install wix/brew/applesimutils
      displayName: Install ffmpeg and applesimutils
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/ios/mjpeg_server_test.rb,test/functional/ios/ios/mobile_commands_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS_ios3'

  - job: func_test_ios_tvos
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    steps:
    - template: ./functional/ios_setup.yml
      parameters:
        xcodeVersion: ${{ parameters.xcodeForTVOS }}
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:ios TESTS=test/functional/ios/tv_driver_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_iOS_tv'

# Skip since opencv4nodejs fails to install on the macOS instance
#  - job: func_test_ios_opencv
#    pool:
#      vmImage: ${{ parameters.vmImageForIOS }}
#    variables:
#      CI: ${{ parameters.ci }}
#      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
#      APPIUM_VERSION: ${{ parameters.appiumVersion }}
#    steps:
#      - template: ./functional/ios_setup.yml
#        parameters:
#          xcodeVersion: ${{ parameters.xcodeForIOS }}
#      - template: ./functional/run_appium.yml
#      - script: npm install -g opencv4nodejs@5.1.0
#        displayName: Install opencv4nodejs@5.1.0
#      - script: bundle exec rake test:func:ios test/functional/ios/ios/image_comparison_test.rb
#        displayName: Run tests
#      - template: ./functional/publish_test_result.yml
#        parameters:
#          xcodeVersion: 'Run_func_test_on_iOS_opencv'


  - job: func_test_android_base
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    strategy:
      matrix:
        uiautomator2:
          AUTOMATION_NAME_DROID: 'uiautomator2'
        espresso:
          AUTOMATION_NAME_DROID: 'espresso'
    steps:
    - template: ./functional/android_setup.yml
    - template: ./functional/run_appium.yml
    - script: bundle exec rake test:func:android TESTS=test/functional/android/driver_test.rb,test/functional/android/patch_test.rb
      displayName: Run tests
    - template: ./functional/publish_test_result.yml
      parameters:
        xcodeVersion: 'Run_func_test_on_android_base'

  - job: func_test_android_webdriver
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    strategy:
      matrix:
        uiautomator2:
          AUTOMATION_NAME_DROID: 'uiautomator2'
        espresso:
          AUTOMATION_NAME_DROID: 'espresso'
    steps:
      - template: ./functional/android_setup.yml
      - template: ./functional/run_appium.yml
      - script: bundle exec rake test:func:android TESTS=test/functional/android/webdriver/create_session_test.rb,test/functional/android/webdriver/device_test.rb,test/functional/android/webdriver/w3c_actions_test.rb
        displayName: Run tests
      - template: ./functional/publish_test_result.yml
        parameters:
          xcodeVersion: 'Run_func_test_on_android_base'

  - job: func_test_android_android1
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    strategy:
      matrix:
        uiautomator2:
          AUTOMATION_NAME_DROID: 'uiautomator2'
        espresso:
          AUTOMATION_NAME_DROID: 'espresso'
    steps:
      - template: ./functional/android_setup.yml
      - template: ./functional/run_appium.yml
      - script: bundle exec rake test:func:android TESTS=test/functional/android/android/device_test.rb
        displayName: Run test/functional/android/android/device_test.rb
      - template: ./functional/publish_test_result.yml
        parameters:
          xcodeVersion: 'func_test_android_android1'

  - job: func_test_android_android2
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    strategy:
      matrix:
        uiautomator2:
          AUTOMATION_NAME_DROID: 'uiautomator2'
        espresso:
          AUTOMATION_NAME_DROID: 'espresso'
    steps:
      - template: ./functional/android_setup.yml
      - template: ./functional/run_appium.yml
      - script: bundle exec rake test:func:android TESTS=test/functional/android/android/mobile_commands_test.rb,test/functional/android/android/search_context_test.rb,test/functional/android/android/mjpeg_server_test.rb
        displayName: Run tests
      - template: ./functional/publish_test_result.yml
        parameters:
          xcodeVersion: 'func_test_android_android3'

  - job: func_test_android_android3
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    strategy:
      matrix:
        uiautomator2:
          AUTOMATION_NAME_DROID: 'uiautomator2'
        espresso:
          AUTOMATION_NAME_DROID: 'espresso'
    steps:
      - template: ./functional/android_setup.yml
      - template: ./functional/run_appium.yml
      - script: bundle exec rake test:func:android TESTS=test/functional/android/android/device_data_test.rb
        displayName: Run tests
      - template: ./functional/publish_test_result.yml
        parameters:
          xcodeVersion: 'func_test_android_android3'

  - job: func_test_android_mobile_command_espresso
    pool:
      vmImage: ${{ parameters.vmImage }}
    variables:
      CI: ${{ parameters.ci }}
      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
      AUTOMATION_NAME_DROID: espresso
      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
      APPIUM_VERSION: ${{ parameters.appiumVersion }}
    strategy:
      matrix:
        uiautomator2:
          AUTOMATION_NAME_DROID: 'uiautomator2'
        espresso:
          AUTOMATION_NAME_DROID: 'espresso'
    steps:
      - template: ./functional/android_setup.yml
      - template: ./functional/run_appium.yml
      - script: bundle exec rake test:func:android TESTS=test/functional/android/android/mobile_commands_test.rb
        displayName: Run tests
      - template: ./functional/publish_test_result.yml
        parameters:
          xcodeVersion: 'func_test_android_mobile_command_espresso'

# Skip since opencv4nodejs fails to install on the macOS instance
#  - job: func_test_android_opencv
#    pool:
#      vmImage: ${{ parameters.vmImage }}
#    variables:
#      CI: ${{ parameters.ci }}
#      ANDROID_SDK_VERSION: ${{ parameters.androidSDK }}
#      IGNORE_VERSION_SKIP: ${{ parameters.ignoreVersionSkip }}
#      APPIUM_VERSION: ${{ parameters.appiumVersion }}
#    strategy:
#      matrix:
#        uiautomator2:
#          AUTOMATION_NAME_DROID: 'uiautomator2'
#        espresso:
#          AUTOMATION_NAME_DROID: 'espresso'
#    steps:
#      - template: ./functional/android_setup.yml
#      - template: ./functional/run_appium.yml
#      - script: npm install -g opencv4nodejs@5.1.0
#        displayName: Install opencv4nodejs@5.1.0
#      - script: bundle exec rake test:func:android TESTS=test/functional/android/android/image_comparison_test.rb
#        displayName: Run tests
#      - template: ./functional/publish_test_result.yml
#        parameters:
#          xcodeVersion: 'func_test_android_android2'