<!DOCTYPE html>
<!--
tests generated by:
  https://github.com/cvazac/generate-server-timing-tests
-->

<head>
    <meta charset='utf-8' />
    <script src="/resources/testharness.js"></script>
    <script src='/resources/testharnessreport.js'></script>
    <script src="/common/performance-timeline-utils.js"></script>
    <script>
      setup({explicit_done: true})
      const tests = []
      const urlToIndex = {}
      function testServerTiming(script, expectedResults) {
        const url = script.src
        tests[urlToIndex[url]] = {url, expectedResults}
      }
      function runTests() {
        tests.forEach(function({url, expectedResults}) {
          const {serverTiming} = performance.getEntriesByName(url)[0]
          const fileName = url.substring(url.lastIndexOf('/') + 1)

          test_equals(serverTiming.length, expectedResults.length, `${fileName} - count (${serverTiming.length} ?== ${expectedResults.length})`)

          expectedResults.forEach(function(expectedResult, i) {
            const dur = expectedResult.dur || 0
            const desc = expectedResult.desc || ''
            const index = expectedResults.length === 1 ? '' : `[${i}].`
            test_equals(expectedResult.name, serverTiming[i].name,
                `${fileName} - ${index}name (${expectedResult.name} ?== ${serverTiming[i].name})`)
            test_equals(dur, serverTiming[i].duration,
                `${fileName} - ${index}duration (${dur} ?== ${serverTiming[i].duration})`)
            test_equals(desc, serverTiming[i].description,
                `${fileName} - ${index}description (${desc} ?== ${serverTiming[i].description})`)
          })
        })
        done()
      }
      for (let i = 0; i <= 83; i++) {
        const script = document.createElement('script')
        script.src = `./resources/parsing/${i}.js`
        document.getElementsByTagName('head')[0].appendChild(script)
        urlToIndex[script.src] = i
      }
      window.addEventListener('load', runTests)
    </script>
</head>
