diff --git a/.taskcluster.yml b/.taskcluster.yml new file mode 100644 index 00000000000000..fed74f53010faa --- /dev/null +++ b/.taskcluster.yml @@ -0,0 +1,687 @@ +allowPullRequests: collaborators +tasks: +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-reftest-1, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome reftest 1 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-reftest-2, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome reftest 2 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-reftest-3, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome reftest 3 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-reftest-4, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome reftest 4 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-reftest-5, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome reftest 5 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-reftest-6, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome reftest 6 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-wdspec-1, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome wdspec 1 1"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-1, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 1 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-2, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 2 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-3, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 3 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-4, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 4 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-5, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 5 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-6, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 6 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-7, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 7 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-8, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 8 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-9, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 9 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-10, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 10 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-11, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 11 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-chrome-dev-testharness-12, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ chrome testharness 12 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-reftest-1, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox reftest 1 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-reftest-2, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox reftest 2 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-reftest-3, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox reftest 3 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-reftest-4, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox reftest 4 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-reftest-5, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox reftest 5 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-reftest-6, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox reftest 6 6"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-wdspec-1, owner: '{{ event.head.user.email + }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox wdspec 1 1"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-1, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 1 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-2, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 2 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-3, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 3 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-4, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 4 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-5, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 5 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-6, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 6 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-7, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 7 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-8, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 8 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-9, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 9 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-10, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 10 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-11, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 11 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +- extra: + github: + branches: [master] + events: [push] + metadata: {description: '', name: wpt-firefox-nightly-testharness-12, owner: '{{ + event.head.user.email }}', source: '{{ event.head.repo.url }}'} + payload: + artifacts: + public/results: {path: /home/test/artifacts, type: directory} + command: [/bin/bash, --login, -c, ">-\n ~/start.sh &&\n \ + \ cd /home/test/web-platform-tests &&\n git fetch {{event.head.repo.url}}\ + \ &&\n git config advice.detachedHead false &&\n git\ + \ checkout {{event.head.sha}} &&\n ./tools/ci/ci_taskcluster.sh\ + \ firefox testharness 12 12"] + image: harjgam/web-platform-tests:0.5 + maxRunTime: 3600 + provisionerId: '{{ taskcluster.docker.provisionerId }}' + workerType: '{{ taskcluster.docker.workerType }}' +version: 0 diff --git a/css/css-align/content-distribution/place-content-shorthand-007-ref.html b/css/css-align/content-distribution/place-content-shorthand-007-ref.html new file mode 100644 index 00000000000000..67727f4fd26fb9 --- /dev/null +++ b/css/css-align/content-distribution/place-content-shorthand-007-ref.html @@ -0,0 +1,22 @@ + + +CSS Test Reference + + +Should see a green square centered and at the bottom of the blue square. +
diff --git a/css/css-align/content-distribution/place-content-shorthand-007.html b/css/css-align/content-distribution/place-content-shorthand-007.html new file mode 100644 index 00000000000000..be954c9712189d --- /dev/null +++ b/css/css-align/content-distribution/place-content-shorthand-007.html @@ -0,0 +1,22 @@ + + +CSS Box Alignment: place-content shorthand with fallback + + + + + +Should see a green square centered and at the bottom of the blue square. +
diff --git a/css/css-scoping/slotted-invalidation.html b/css/css-scoping/slotted-invalidation.html new file mode 100644 index 00000000000000..f8471062e1d0b2 --- /dev/null +++ b/css/css-scoping/slotted-invalidation.html @@ -0,0 +1,35 @@ + +CSS Test: Style invalidation for ::slotted() + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ diff --git a/css/css-values/calc-ch-ex-lang-ref.html b/css/css-values/calc-ch-ex-lang-ref.html new file mode 100644 index 00000000000000..e0ac1ead1e5247 --- /dev/null +++ b/css/css-values/calc-ch-ex-lang-ref.html @@ -0,0 +1,12 @@ + + +CSS Test Reference + + +
diff --git a/css/css-values/calc-ch-ex-lang.html b/css/css-values/calc-ch-ex-lang.html new file mode 100644 index 00000000000000..eb447475d52887 --- /dev/null +++ b/css/css-values/calc-ch-ex-lang.html @@ -0,0 +1,16 @@ + + +CSS Test: Calc in font-size with ch / ex units across lang changes + + + + + + +
+
+
diff --git a/css/css-values/calc-rem-lang-ref.html b/css/css-values/calc-rem-lang-ref.html new file mode 100644 index 00000000000000..a0f6add684a57f --- /dev/null +++ b/css/css-values/calc-rem-lang-ref.html @@ -0,0 +1,6 @@ + + +CSS Test Reference + +

You should see a green box twice-the-initial-font-size wide.

+
diff --git a/css/css-values/calc-rem-lang.html b/css/css-values/calc-rem-lang.html new file mode 100644 index 00000000000000..3994efc003b5a1 --- /dev/null +++ b/css/css-values/calc-rem-lang.html @@ -0,0 +1,17 @@ + + + +CSS Test: Calc with rem and relative units on the root element + + + + + + +

You should see a green box twice-the-initial-font-size wide.

+
+ diff --git a/custom-elements/attribute-changed-callback.html b/custom-elements/attribute-changed-callback.html index bd467912b99959..5090bfbfbfecdf 100644 --- a/custom-elements/attribute-changed-callback.html +++ b/custom-elements/attribute-changed-callback.html @@ -11,6 +11,7 @@
+ diff --git a/custom-elements/parser/parser-sets-attributes-and-children.html b/custom-elements/parser/parser-sets-attributes-and-children.html index ba331370a78daa..ef4689fac0729e 100644 --- a/custom-elements/parser/parser-sets-attributes-and-children.html +++ b/custom-elements/parser/parser-sets-attributes-and-children.html @@ -8,6 +8,7 @@ +
@@ -15,6 +16,7 @@ var numberOfAttributesInConstructor; var numberOfChildNodesInConstructor; +var attributesChangedCalls = []; class MyCustomElement extends HTMLElement { constructor(...args) { @@ -22,6 +24,14 @@ numberOfAttributesInConstructor = this.attributes.length; numberOfChildNodesInConstructor = this.childNodes.length; } + + attributeChangedCallback(...args) { + attributesChangedCalls.push(create_attribute_changed_callback_log(this, ...args)); + } + + static get observedAttributes() { + return ['id', 'class']; + } }; customElements.define('my-custom-element', MyCustomElement); @@ -54,6 +64,12 @@ assert_equals(numberOfChildNodesInConstructor, 0, 'HTML parser must not append child nodes to a custom element before invoking the constructor'); }, 'HTML parser must set the attributes or append children before calling constructor'); +test(function () { + assert_equals(attributesChangedCalls.length, 2); + assert_attribute_log_entry(attributesChangedCalls[0], {name: 'id', oldValue: null, newValue: 'custom-element-id', namespace: null}); + assert_attribute_log_entry(attributesChangedCalls[1], {name: 'class', oldValue: null, newValue: 'class1 class2', namespace: null}); +}, 'HTML parser must enqueue attributeChanged reactions'); + diff --git a/editing/data/insertparagraph.js b/editing/data/insertparagraph.js index 70811ca9954468..fcf9e855e1c311 100644 --- a/editing/data/insertparagraph.js +++ b/editing/data/insertparagraph.js @@ -780,6 +780,36 @@ var browserTests = [ "

foo

{}bar

", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ["foo[]bar", [["defaultparagraphseparator","div"],["insertparagraph",""]], "
foo
{}bar
", @@ -790,6 +820,36 @@ var browserTests = [ "

foo

{}bar

", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

[]foo

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "


{}foo

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
[]foo
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

{}foo
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

[]foo

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "


{}foo

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
[]foo
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

{}foo
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

[]foo

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "


{}foo

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
[]foo
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

{}foo
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ["foo[]bar", [["defaultparagraphseparator","div"],["insertparagraph",""]], "
foo
{}bar
", @@ -860,16 +920,6 @@ var browserTests = [ "

foo

{}bar

", [true,true,true], {"stylewithcss":[false,true,"",false,false,""],"defaultparagraphseparator":[false,false,"p",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], -["

[]foo

", - [["defaultparagraphseparator","div"],["insertparagraph",""]], - "


{}foo

", - [true,true], - {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], -["

[]foo

", - [["defaultparagraphseparator","p"],["insertparagraph",""]], - "


{}foo

", - [true,true], - {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], ["

foo[]bar

", [["stylewithcss","true"],["defaultparagraphseparator","div"],["insertparagraph",""]], "

foo

{}bar

", @@ -930,6 +980,38 @@ var browserTests = [ "

foo

{}barbaz

", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]bar

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}bar

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]bar
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}bar
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]bar

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}bar

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]bar
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}bar
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]bar

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}bar

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]bar
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}bar
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +// shouldn't be duplicated in new paragraph when it's split at +// start or end of it. ["foo[]bar", [["defaultparagraphseparator","div"],["insertparagraph",""]], "
foo
{}bar
", @@ -950,6 +1032,190 @@ var browserTests = [ "

foo

{}bar

", [true,true], {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

[]foo

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "


{}foo

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
[]foo
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

{}foo
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

[]foo

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "


{}foo

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
[]foo
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

{}foo
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo[]

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo[]
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

[]foo

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "


{}foo

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
[]foo
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "

{}foo
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +//
is usually inserted after an element is split next to +// an ASCII whitespace. So,
element should be ignored if it's invisible. +["

foo []

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo []
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo []

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo []
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo []

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo []
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo {}

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo {}
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo {}

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo {}
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo {}

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo {}
", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +// So, if
is visible, its any inline containers should be split. +["

foo []

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo []

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo []

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo []

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo []

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo []

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo {}

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo {}

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}
", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo {}

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo {}

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], +["

foo {}

", + [["defaultparagraphseparator","div"],["insertparagraph",""]], + "

foo

{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"p",false,false,"div"],"insertparagraph":[false,false,"",false,false,""]}], +["
foo {}

", + [["defaultparagraphseparator","p"],["insertparagraph",""]], + "
foo
{}

", + [true,true], + {"defaultparagraphseparator":[false,false,"div",false,false,"p"],"insertparagraph":[false,false,"",false,false,""]}], + ["

foo[]", [["defaultparagraphseparator","div"],["insertparagraph",""]], "

foo

{}

", diff --git a/fetch/api/response/response-init-002.html b/fetch/api/response/response-init-002.html index 0bb2e8d0b3b28d..a48af833644efe 100644 --- a/fetch/api/response/response-init-002.html +++ b/fetch/api/response/response-init-002.html @@ -65,6 +65,11 @@ }); }, "Testing empty Response Content-Type header"); + test(function() { + var response = new Response(null, {status: 204}); + assert_equals(response.body, null); + }, "Testing null Response body"); + diff --git a/tools/ci/.bashrc b/tools/ci/.bashrc new file mode 100644 index 00000000000000..bbe03c489aa528 --- /dev/null +++ b/tools/ci/.bashrc @@ -0,0 +1,4 @@ +function xvfb_start() { + GEOMETRY="$SCREEN_WIDTH""x""$SCREEN_HEIGHT""x""$SCREEN_DEPTH" + xvfb-run --server-args="-screen 0 $GEOMETRY -ac +extension RANDR" $@ +} diff --git a/tools/ci/Dockerfile b/tools/ci/Dockerfile new file mode 100644 index 00000000000000..28fdd78b3ec008 --- /dev/null +++ b/tools/ci/Dockerfile @@ -0,0 +1,76 @@ +FROM ubuntu:16.04 + +# No interactive frontend during docker build +ENV DEBIAN_FRONTEND=noninteractive \ + DEBCONF_NONINTERACTIVE_SEEN=true + +# General requirements not in the base image +RUN apt-get -qqy update \ + && apt-get -qqy install \ + bzip2 \ + ca-certificates \ + dbus-x11 \ + git \ + locales \ + pulseaudio \ + python \ + python-pip \ + tzdata \ + sudo \ + unzip \ + wget \ + xvfb + +# Installing just the deps of firefox and chrome is moderately tricky, so +# just install the default versions of them, and some extra deps we happen +# to know that chrome requires + +RUN apt-get -qqy install \ + firefox \ + chromium-browser \ + libnss3-tools \ + fonts-liberation \ + indicator-application \ + libappindicator1 \ + libappindicator3-1 \ + libdbusmenu-gtk3-4 \ + libindicator3-7 \ + libindicator7 + +RUN pip install --upgrade pip +RUN pip install virtualenv + +ENV TZ "UTC" +RUN echo "${TZ}" > /etc/timezone \ + && dpkg-reconfigure --frontend noninteractive tzdata + +RUN useradd test \ + --shell /bin/bash \ + --create-home \ + && usermod -a -G sudo test \ + && echo 'ALL ALL = (ALL) NOPASSWD: ALL' >> /etc/sudoers \ + && echo 'test:secret' | chpasswd + +ENV SCREEN_WIDTH 1280 +ENV SCREEN_HEIGHT 1024 +ENV SCREEN_DEPTH 24 +ENV DISPLAY :99.0 + +USER test + +WORKDIR /home/test + +COPY .bashrc /home/test/.bashrc + +COPY start.sh /home/test/start.sh + +# Remove information on how to use sudo on login +RUN sudo echo "" + +RUN git clone --depth=1 https://github.com/w3c/web-platform-tests.git + +RUN mkdir -p /home/test/.fonts && \ + cp web-platform-tests/fonts/Ahem.ttf ~/.fonts && \ + fc-cache -f -v + +RUN mkdir -p /home/test/artifacts \ No newline at end of file diff --git a/tools/ci/ci_taskcluster.sh b/tools/ci/ci_taskcluster.sh new file mode 100755 index 00000000000000..38c84628f15d53 --- /dev/null +++ b/tools/ci/ci_taskcluster.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ $1 == "firefox" ]; then + ./wpt run firefox --log-tbpl=- --log-tbpl-level=debug --log-wptreport=../artifacts/wpt_report.json --this-chunk=$3 --total-chunks=$4 --test-type=$2 -y --install-browser --no-pause --no-restart-on-unexpected +elif [ $1 == "chrome" ]; then + ./wpt run chrome --log-tbpl=- --log-tbpl-level=debug --log-wptreport=../artifacts/wpt_report.json --this-chunk=$3 --total-chunks=$4 --test-type=$2 -y --no-pause --no-restart-on-unexpected +fi diff --git a/tools/ci/commands.json b/tools/ci/commands.json index d682d2a506440c..862fde037b5a3b 100644 --- a/tools/ci/commands.json +++ b/tools/ci/commands.json @@ -2,5 +2,7 @@ "test-jobs": {"path": "jobs.py", "script": "run", "parser": "create_parser", "help": "List test jobs that should run for a set of commits", "virtualenv": false}, "check-stability": {"path": "check_stability.py", "script": "run", "parser": "get_parser", "parse_known": true, "help": "Check test stability", - "virtualenv": true, "install": ["requests"], "requirements": ["../wptrunner/requirements.txt"]} + "virtualenv": true, "install": ["requests"], "requirements": ["../wptrunner/requirements.txt"]}, + "generate-tasks": {"path": "taskgraph.py", "script": "run", "parser": "get_parser", "parse_known": true, "help": "Generate taskcluster.yml file containing the run tasks", + "virtualenv": true, "install": ["pyyaml"]} } diff --git a/tools/ci/start.sh b/tools/ci/start.sh new file mode 100755 index 00000000000000..f4adb90d7cb22e --- /dev/null +++ b/tools/ci/start.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +sudo sh -c 'echo " +127.0.0.1 web-platform.test +127.0.0.1 www.web-platform.test +127.0.0.1 www1.web-platform.test +127.0.0.1 www2.web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 xn--lve-6lad.web-platform.test +0.0.0.0 nonexistent-origin.web-platform.test" >> /etc/hosts' + +cd web-platform-tests +git pull --depth=1 + +# Install Chome unstable +deb_archive=google-chrome-unstable_current_amd64.deb +wget https://dl.google.com/linux/direct/$deb_archive + +# Installation will fail in cases where the package has unmet dependencies. +# When this occurs, attempt to use the system package manager to fetch the +# required packages and retry. +if ! sudo dpkg --install $deb_archive; then + sudo apt-get -y install --fix-broken + sudo dpkg --install $deb_archive +fi + +sudo Xvfb $DISPLAY -screen 0 ${SCREEN_WIDTH}x${SCREEN_HEIGHT}x${SCREEN_DEPTH} & diff --git a/tools/ci/taskgraph.py b/tools/ci/taskgraph.py new file mode 100644 index 00000000000000..e404def4655b51 --- /dev/null +++ b/tools/ci/taskgraph.py @@ -0,0 +1,120 @@ +import argparse +import copy +import os + +import yaml + + +here = os.path.dirname(__file__) +wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) + + +task_template = { + "provisionerId": "{{ taskcluster.docker.provisionerId }}", + "workerType": "{{ taskcluster.docker.workerType }}", + "extra": { + "github": { + "events": ["push"], + "branches": ["master"], + }, + }, + "payload": { + "maxRunTime": 3600, + "image": "harjgam/web-platform-tests:0.5", + "command":[ + "/bin/bash", + "--login", + "-c", + """>- + ~/start.sh && + cd /home/test/web-platform-tests && + git fetch {{event.head.repo.url}} && + git config advice.detachedHead false && + git checkout {{event.head.sha}} && + %(command)s"""], + "artifacts": { + "public/results": { + "path": "/home/test/artifacts", + "type": "directory" + } + } + }, + "metadata": { + "name": "wpt-%(browser_name)s-%(suite)s-%(chunk)s", + "description": "", + "owner": "{{ event.head.user.email }}", + "source": "{{ event.head.repo.url }}", + } +} + + +file_template = { + "version": 0, + "tasks": [], + "allowPullRequests": "collaborators" +} + +suites = { + "testharness": {"chunks": 12}, + "reftest": {"chunks": 6}, + "wdspec": {"chunks": 1} +} + +browsers = { + "firefox": {"name": "firefox-nightly"}, + "chrome": {"name": "chrome-dev"} +} + + +def get_parser(): + parser = argparse.ArgumentParser() + parser.add_argument("--dest", + action="store", + default=wpt_root, + help="Directory to write the .taskcluster.yml file to") + return parser + + +def fill(template, data): + rv = {} + for key, value in template.iteritems(): + rv[key] = fill_inner(value, data) + return rv + + +def fill_inner(value, data): + if isinstance(value, (str, unicode)): + return value % data + elif isinstance(value, dict): + return fill(value, data) + elif isinstance(value, list): + return [fill_inner(item, data) for item in value] + elif isinstance(value, (float, int, long)): + return value + else: + raise ValueError + + +def run(venv, *args, **kwargs): + if not os.path.isdir(kwargs["dest"]): + raise ValueError("Invalid directory %s" % kwargs["dest"]) + + task_config = copy.deepcopy(file_template) + for browser, browser_props in browsers.iteritems(): + for suite, suite_props in suites.iteritems(): + total_chunks = suite_props.get("chunks", 1) + for chunk in xrange(1, total_chunks + 1): + data = { + "suite": suite, + "chunk": chunk, + "browser_name": browser_props["name"], + "command": ("./tools/ci/ci_taskcluster.sh %s %s %s %s" % + (browser, suite, chunk, total_chunks)) + } + + task_data = fill(task_template, data) + task_config["tasks"].append(task_data) + + with open(os.path.join(kwargs["dest"], ".taskcluster.yml"), "w") as f: + yaml.dump(task_config, f) + diff --git a/tools/wpt/run.py b/tools/wpt/run.py index d1e3e49519c914..c6f3dbc0d240e4 100644 --- a/tools/wpt/run.py +++ b/tools/wpt/run.py @@ -397,7 +397,8 @@ def log(x): def run_single(venv, **kwargs): from wptrunner import wptrunner - return wptrunner.start(**kwargs) + wptrunner.start(**kwargs) + return def main(): diff --git a/tools/wpt/utils.py b/tools/wpt/utils.py index e1f4cd4bb5c75d..40e1a45d28d0e5 100644 --- a/tools/wpt/utils.py +++ b/tools/wpt/utils.py @@ -39,7 +39,7 @@ def call(*args): Returns a bytestring of the subprocess output if no error. """ - logger.debug("%s" % " ".join(args)) + logger.info("%s" % " ".join(args)) try: return subprocess.check_output(args) except subprocess.CalledProcessError as e: diff --git a/tools/wpt/virtualenv.py b/tools/wpt/virtualenv.py index 8f36aa93585ffd..6abaec5f875811 100644 --- a/tools/wpt/virtualenv.py +++ b/tools/wpt/virtualenv.py @@ -7,6 +7,7 @@ logger = logging.getLogger(__name__) + class Virtualenv(object): def __init__(self, path): self.path = path @@ -21,7 +22,7 @@ def exists(self): def create(self): if os.path.exists(self.path): shutil.rmtree(self.path) - call(self.virtualenv, self.path) + call(self.virtualenv, self.path, "-p", sys.executable) @property def bin_path(self): @@ -38,7 +39,14 @@ def pip_path(self): def activate(self): path = os.path.join(self.bin_path, "activate_this.py") + logger.info("Activating virtualenv %s" % path) + old_sys_path = sys.path[:] + logger.info(sys.path) execfile(path, {"__file__": path}) + logger.info(sys.path) + for item in sys.path: + if item not in old_sys_path: + logger.info(item) def start(self): if not self.exists: @@ -46,7 +54,7 @@ def start(self): self.activate() def install(self, *requirements): - call(self.pip_path, "install", *requirements) + logger.info(call(self.pip_path, "install", *requirements)) def install_requirements(self, requirements_path): - call(self.pip_path, "install", "-r", requirements_path) + logger.info(call(self.pip_path, "install", "-r", requirements_path)) diff --git a/tools/wpt/wpt.py b/tools/wpt/wpt.py index 49f463d2a9ed1e..e183bef230da97 100644 --- a/tools/wpt/wpt.py +++ b/tools/wpt/wpt.py @@ -90,7 +90,7 @@ def setup_virtualenv(path, props): def main(prog=None, argv=None): - logging.basicConfig(level=logging.INFO) + logging.basicConfig(level=logging.DEBUG) if prog is None: prog = sys.argv[0] diff --git a/web-animations/README.md b/web-animations/README.md index 475f58a57b1283..f6efbf977f95bc 100644 --- a/web-animations/README.md +++ b/web-animations/README.md @@ -98,10 +98,19 @@ Guidelines for writing tests Remember, even if we do need to make all tests take, say 200s each, text editors are very good at search and replace. -* Use the `assert_times_equal` assertion for comparing calculated times. - It tests times are equal using the precision recommended in the spec whilst - allowing implementations to override the function to meet their own - precision requirements. +* Use the `assert_times_equal` assertion for comparing times returned from + the API. This asserts that the time values are equal using a tolerance + based on the precision recommended in the spec. This tolerance is applied + to *both* of the values being compared. That is, it effectively allows + double the epsilon that is used when comparing with an absolute value. + + For comparing a time value returned from the API to an absolute value, use + `assert_time_equals_literal`. This tests that the actual value is equal to + the expected value within the precision recommended in the spec. + + Both `assert_times_equal` and `assert_time_equals_literal` are defined in a + way that implementations can override them to meet their own precision + requirements. * There are quite a few bad tests in the repository. We're learning as we go. Don't just copy them blindly—please fix them! diff --git a/web-animations/interfaces/Animation/playbackRate.html b/web-animations/interfaces/Animation/playbackRate.html index 9a3b76240f0272..be5bf969498ceb 100644 --- a/web-animations/interfaces/Animation/playbackRate.html +++ b/web-animations/interfaces/Animation/playbackRate.html @@ -14,16 +14,14 @@ previousAnimationCurrentTime, previousTimelineCurrentTime, description) { - const accuracy = 0.001; /* accuracy of DOMHighResTimeStamp */ const animationCurrentTimeDifference = animation.currentTime - previousAnimationCurrentTime; const timelineCurrentTimeDifference = animation.timeline.currentTime - previousTimelineCurrentTime; - assert_approx_equals(animationCurrentTimeDifference, - timelineCurrentTimeDifference * animation.playbackRate, - accuracy, - description); + assert_times_equal(animationCurrentTimeDifference, + timelineCurrentTimeDifference * animation.playbackRate, + description); } promise_test(t => { diff --git a/web-animations/interfaces/AnimationEffectTiming/direction.html b/web-animations/interfaces/AnimationEffectTiming/direction.html index 7bc315da967162..3238f5d7a5e842 100644 --- a/web-animations/interfaces/AnimationEffectTiming/direction.html +++ b/web-animations/interfaces/AnimationEffectTiming/direction.html @@ -31,13 +31,13 @@ const div = createDiv(t); const anim = div.animate(null, { duration: 10000, direction: 'normal' }); anim.currentTime = 7000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.7, - 'progress before updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.7, + 'progress before updating direction'); anim.effect.timing.direction = 'reverse'; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3, - 'progress after updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3, + 'progress after updating direction'); }, 'Can be changed from \'normal\' to \'reverse\' while in progress'); test(t => { @@ -78,13 +78,13 @@ duration: 10000, direction: 'normal' }); anim.currentTime = 17000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.7, - 'progress before updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.7, + 'progress before updating direction'); anim.effect.timing.direction = 'alternate'; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3, - 'progress after updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3, + 'progress after updating direction'); }, 'Can be changed from \'normal\' to \'alternate\' while in progress'); test(t => { @@ -94,13 +94,13 @@ duration: 10000, direction: 'alternate' }); anim.currentTime = 17000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3, - 'progress before updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3, + 'progress before updating direction'); anim.effect.timing.direction = 'alternate-reverse'; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.7, - 'progress after updating direction'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.7, + 'progress after updating direction'); }, 'Can be changed from \'alternate\' to \'alternate-reverse\' while in' + ' progress'); diff --git a/web-animations/interfaces/AnimationEffectTiming/duration.html b/web-animations/interfaces/AnimationEffectTiming/duration.html index 9caa0e36e05d03..42913f552dd40b 100644 --- a/web-animations/interfaces/AnimationEffectTiming/duration.html +++ b/web-animations/interfaces/AnimationEffectTiming/duration.html @@ -19,10 +19,10 @@ const div = createDiv(t); const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); anim.effect.timing.duration = 123.45; - assert_times_equal(anim.effect.timing.duration, 123.45, - 'set duration 123.45'); - assert_times_equal(anim.effect.getComputedTiming().duration, 123.45, - 'getComputedTiming() after set duration 123.45'); + assert_time_equals_literal(anim.effect.timing.duration, 123.45, + 'set duration 123.45'); + assert_time_equals_literal(anim.effect.getComputedTiming().duration, 123.45, + 'getComputedTiming() after set duration 123.45'); }, 'Can be set to a double value'); test(t => { @@ -176,8 +176,8 @@ assert_equals(anim.effect.getComputedTiming().progress, 1, 'progress when animation is finished'); anim.effect.timing.duration *= 2; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5, - 'progress after doubling the duration'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5, + 'progress after doubling the duration'); anim.effect.timing.duration = 0; assert_equals(anim.effect.getComputedTiming().progress, 1, 'progress after setting duration to zero'); diff --git a/web-animations/interfaces/AnimationEffectTiming/endDelay.html b/web-animations/interfaces/AnimationEffectTiming/endDelay.html index b6793edaed5b1b..3062c8c1565d4d 100644 --- a/web-animations/interfaces/AnimationEffectTiming/endDelay.html +++ b/web-animations/interfaces/AnimationEffectTiming/endDelay.html @@ -19,10 +19,10 @@ const div = createDiv(t); const anim = div.animate({ opacity: [ 0, 1 ] }, 2000); anim.effect.timing.endDelay = 123.45; - assert_times_equal(anim.effect.timing.endDelay, 123.45, - 'set endDelay 123.45'); - assert_times_equal(anim.effect.getComputedTiming().endDelay, 123.45, - 'getComputedTiming() after set endDelay 123.45'); + assert_time_equals_literal(anim.effect.timing.endDelay, 123.45, + 'set endDelay 123.45'); + assert_time_equals_literal(anim.effect.getComputedTiming().endDelay, 123.45, + 'getComputedTiming() after set endDelay 123.45'); }, 'Can be set to a positive number'); test(t => { diff --git a/web-animations/interfaces/AnimationEffectTiming/iterationStart.html b/web-animations/interfaces/AnimationEffectTiming/iterationStart.html index 5521f1e85940b9..73bc4810da1958 100644 --- a/web-animations/interfaces/AnimationEffectTiming/iterationStart.html +++ b/web-animations/interfaces/AnimationEffectTiming/iterationStart.html @@ -24,7 +24,7 @@ duration: 100, delay: 1 }); anim.effect.timing.iterationStart = 2.5; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); }, 'Changing the value updates computed timing when backwards-filling'); @@ -37,7 +37,7 @@ duration: 100, delay: 0 }); anim.effect.timing.iterationStart = 2.5; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); }, 'Changing the value updates computed timing during the active phase'); @@ -51,7 +51,7 @@ delay: 0 }); anim.finish(); anim.effect.timing.iterationStart = 2.5; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); assert_equals(anim.effect.getComputedTiming().currentIteration, 3); }, 'Changing the value updates computed timing when forwards-filling'); diff --git a/web-animations/interfaces/AnimationEffectTiming/iterations.html b/web-animations/interfaces/AnimationEffectTiming/iterations.html index 32390626463516..3bfaf8e9920d18 100644 --- a/web-animations/interfaces/AnimationEffectTiming/iterations.html +++ b/web-animations/interfaces/AnimationEffectTiming/iterations.html @@ -70,10 +70,12 @@ anim.effect.timing.iterations = 2; - assert_times_equal(anim.effect.getComputedTiming().progress, 0, - 'progress after adding an iteration'); - assert_times_equal(anim.effect.getComputedTiming().currentIteration, 1, - 'current iteration after adding an iteration'); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, + 0, + 'progress after adding an iteration'); + assert_time_equals_literal(anim.effect.getComputedTiming().currentIteration, + 1, + 'current iteration after adding an iteration'); anim.effect.timing.iterations = 0; diff --git a/web-animations/testcommon.js b/web-animations/testcommon.js index 51b84dd3e534ea..be3827fd5d8e54 100644 --- a/web-animations/testcommon.js +++ b/web-animations/testcommon.js @@ -21,10 +21,18 @@ const TIME_PRECISION = 0.0005; // ms // times based on their precision requirements. if (!window.assert_times_equal) { window.assert_times_equal = (actual, expected, description) => { - assert_approx_equals(actual, expected, TIME_PRECISION, description); + assert_approx_equals(actual, expected, TIME_PRECISION * 2, description); }; } +// Allow implementations to substitute an alternative method for comparing +// a time value based on its precision requirements with a fixed value. +if (!window.assert_time_equals_literal) { + window.assert_time_equals_literal = (actual, expected, description) => { + assert_approx_equals(actual, expected, TIME_PRECISION, description); + } +} + // creates div element, appends it to the document body and // removes the created element during test cleanup function createDiv(test, doc) { diff --git a/web-animations/timing-model/animation-effects/active-time.html b/web-animations/timing-model/animation-effects/active-time.html index 3e3b528d534b10..a2feb2323c3308 100644 --- a/web-animations/timing-model/animation-effects/active-time.html +++ b/web-animations/timing-model/animation-effects/active-time.html @@ -25,19 +25,19 @@ test(t => { const anim = createDiv(t).animate(null, 1000); anim.currentTime = 500; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in active phase and no start delay is the local time'); test(t => { const anim = createDiv(t).animate(null, { duration: 1000, delay: 500 }); anim.currentTime = 1000; - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in active phase and positive start delay is the local time' + ' minus the start delay'); test(t => { const anim = createDiv(t).animate(null, { duration: 1000, delay: -500 }); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in active phase and negative start delay is the local time' + ' minus the start delay'); @@ -58,7 +58,7 @@ fill: 'forwards' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3); }, 'Active time in after phase with forwards fill is the active duration'); test(t => { @@ -79,7 +79,7 @@ fill: 'forwards' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3); }, 'Active time in after phase with forwards fill and positive end delay' + ' is the active duration'); @@ -91,7 +91,7 @@ fill: 'forwards' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 1); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.5); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.5); }, 'Active time in after phase with forwards fill and negative end delay' + ' is the active duration + end delay'); @@ -127,7 +127,7 @@ fill: 'both' }); anim.finish(); assert_equals(anim.effect.getComputedTiming().currentIteration, 2); - assert_times_equal(anim.effect.getComputedTiming().progress, 0.3); + assert_time_equals_literal(anim.effect.getComputedTiming().progress, 0.3); }, 'Active time in after phase with \'both\' fill is the active duration'); test(t => { diff --git a/web-animations/timing-model/animations/current-time.html b/web-animations/timing-model/animations/current-time.html index d2f5075d1b25fa..08f90d9f0c1cbd 100644 --- a/web-animations/timing-model/animations/current-time.html +++ b/web-animations/timing-model/animations/current-time.html @@ -68,7 +68,7 @@ return animation.ready.then(() => waitForAnimationFrames(1)) .then(() => { - assert_times_equal(animation.currentTime, 0); + assert_time_equals_literal(animation.currentTime, 0); }); }, 'The current time does not progress if playback rate is 0'); diff --git a/web-animations/timing-model/animations/playing-an-animation.html b/web-animations/timing-model/animations/playing-an-animation.html index 2beed475e7ec41..1064192051442e 100644 --- a/web-animations/timing-model/animations/playing-an-animation.html +++ b/web-animations/timing-model/animations/playing-an-animation.html @@ -14,26 +14,26 @@ test(t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); animation.currentTime = 1 * MS_PER_SEC; - assert_times_equal(animation.currentTime, 1 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 1 * MS_PER_SEC); animation.play(); - assert_times_equal(animation.currentTime, 1 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 1 * MS_PER_SEC); }, 'Playing a running animation leaves the current time unchanged'); test(t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); animation.finish(); - assert_times_equal(animation.currentTime, 100 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 100 * MS_PER_SEC); animation.play(); - assert_times_equal(animation.currentTime, 0); + assert_time_equals_literal(animation.currentTime, 0); }, 'Playing a finished animation seeks back to the start'); test(t => { const animation = createDiv(t).animate(null, 100 * MS_PER_SEC); animation.playbackRate = -1; animation.currentTime = 0; - assert_times_equal(animation.currentTime, 0); + assert_time_equals_literal(animation.currentTime, 0); animation.play(); - assert_times_equal(animation.currentTime, 100 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 100 * MS_PER_SEC); }, 'Playing a finished and reversed animation seeks to end'); test(t => { diff --git a/web-animations/timing-model/animations/set-the-animation-start-time.html b/web-animations/timing-model/animations/set-the-animation-start-time.html index 1526be05766edb..d2a311d4dd4019 100644 --- a/web-animations/timing-model/animations/set-the-animation-start-time.html +++ b/web-animations/timing-model/animations/set-the-animation-start-time.html @@ -80,9 +80,9 @@ // If we set the start time, however, we should clear the hold time. animation.startTime = document.timeline.currentTime - 2000; - assert_times_equal(animation.currentTime, 2000, - 'The current time is calculated from the start time,' - + ' not the hold time'); + assert_time_equals_literal(animation.currentTime, 2000, + 'The current time is calculated from the start' + + ' time, not the hold time'); // Sanity check assert_equals(animation.playState, 'running', @@ -99,13 +99,14 @@ // are resolved). animation.startTime = document.timeline.currentTime - 1000; assert_equals(animation.playState, 'running'); - assert_times_equal(animation.currentTime, 1000, - 'Current time is resolved for a running animation') + assert_time_equals_literal(animation.currentTime, 1000, + 'Current time is resolved for a running animation'); // Clear start time animation.startTime = null; - assert_times_equal(animation.currentTime, 1000, - 'Hold time is set after start time is made unresolved'); + assert_time_equals_literal(animation.currentTime, 1000, + 'Hold time is set after start time is made' + + ' unresolved'); assert_equals(animation.playState, 'paused', 'Animation reports it is paused after setting an unresolved' + ' start time'); diff --git a/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html b/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html index 8a4421309b9eda..24f201d550c469 100644 --- a/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html +++ b/web-animations/timing-model/animations/set-the-timeline-of-an-animation.html @@ -26,7 +26,7 @@ animation.timeline = document.timeline; assert_equals(animation.playState, 'paused'); - assert_times_equal(animation.currentTime, 50 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 50 * MS_PER_SEC); }, 'After setting timeline on paused animation it is still paused'); test(t => { @@ -39,7 +39,7 @@ animation.timeline = document.timeline; assert_equals(animation.playState, 'paused'); - assert_times_equal(animation.currentTime, 200 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 200 * MS_PER_SEC); }, 'After setting timeline on animation paused outside active interval' + ' it is still paused'); @@ -141,7 +141,7 @@ assert_false(animation.pending); assert_equals(animation.playState, 'paused'); - assert_times_equal(animation.currentTime, 50 * MS_PER_SEC); + assert_time_equals_literal(animation.currentTime, 50 * MS_PER_SEC); }, 'After clearing timeline on paused animation it is still paused'); test(t => {