# This template uses the provided targets and optional groups to generate a matrix which is then passed to the test template.
# If this matrix template does not provide the required functionality, consider using the test template directly instead.

parameters:
  # A required list of dictionaries, one per test target.
  # Each item in the list must contain a "test" or "name" key.
  # Both may be provided. If one is omitted, the other will be used.
  - name: targets
    type: object

  # An optional list of values which will be used to multiply the targets list into a matrix.
  # Values can be strings or numbers.
  - name: groups
    type: object
    default: []

  # An optional format string used to generate the job name.
  # - {0} is the name of an item in the targets list.
  - name: nameFormat
    type: string
    default: "{0}"

  # An optional format string used to generate the test name.
  # - {0} is the name of an item in the targets list.
  - name: testFormat
    type: string
    default: "{0}"

  # An optional format string used to add the group to the job name.
  # {0} is the formatted name of an item in the targets list.
  # {{1}} is the group -- be sure to include the double "{{" and "}}".
  - name: nameGroupFormat
    type: string
    default: "{0} - {{1}}"

  # An optional format string used to add the group to the test name.
  # {0} is the formatted test of an item in the targets list.
  # {{1}} is the group -- be sure to include the double "{{" and "}}".
  - name: testGroupFormat
    type: string
    default: "{0}/{{1}}"

jobs:
  - template: test.yml
    parameters:
      jobs:
        - ${{ if eq(length(parameters.groups), 0) }}:
          - ${{ each target in parameters.targets }}:
            - name: ${{ format(parameters.nameFormat, coalesce(target.name, target.test)) }}
              test: ${{ format(parameters.testFormat, coalesce(target.test, target.name)) }}
        - ${{ if not(eq(length(parameters.groups), 0)) }}:
          - ${{ each group in parameters.groups }}:
            - ${{ each target in parameters.targets }}:
              - name: ${{ format(format(parameters.nameGroupFormat, parameters.nameFormat), coalesce(target.name, target.test), group) }}
                test: ${{ format(format(parameters.testGroupFormat, parameters.testFormat), coalesce(target.test, target.name), group) }}