- hosts: localhost
  gather_facts: false
  tasks:
    - name: Make sure foo is gone
      file:
        path: foo
        state: absent
    - name: Create foo - should only be changed in first iteration
      copy:
        dest: foo
        content: foo
      check_mode: '{{ omit }}'
      register: cmode
      loop:
        - 1
        - 2

    - when: ansible_check_mode
      block:
      - name: stat foo
        stat: path=foo
        register: foo
        check_mode: off
      - debug: var=foo
      - name: validate expected outcomes when in check mode and file does not exist
        assert:
          that:
            - cmode['results'][0] is changed
            - cmode['results'][1] is changed
        when: not foo['stat']['exists']

      - name: validate expected outcomes when in check mode and file exists
        assert:
          that:
            - cmode['results'][0] is not changed
            - cmode['results'][1] is not changed
        when: foo['stat']['exists']

    - name: validate expected outcomes when not in check mode (file is always deleted)
      assert:
        that:
          - cmode['results'][0] is changed
          - cmode['results'][1] is not changed
      when: not ansible_check_mode
