chromium/headless/test/data/protocol/sanity/renderer-window-location-fragments.js

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(async function(testRunner) {
  let {page, session, dp} = await testRunner.startWithFrameControl(
      'Tests renderer: window location fragments.');

  let RendererTestHelper =
      await testRunner.loadScript('../helpers/renderer-test-helper.js');
  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
      await (new RendererTestHelper(testRunner, dp, page)).init();

  httpInterceptor.addResponse('http://www.example.com/#fragment1',
      `<script>
        if (window.location.hash == '#fragment1') {
          document.write('<iframe id="frame" src="iframe#fragment2"></iframe>');
        }
      </script>`);

  httpInterceptor.addResponse('http://www.example.com/iframe#fragment2',
      `<script>
        if (window.location.hash == '#fragment2') {
          document.location = 'http://www.example.com/pass';
        }
      </script>)`);

  httpInterceptor.addResponse('http://www.example.com/pass',
      `<p>Pass</p>`);

  await virtualTimeController.initialize(1000);
  await frameNavigationHelper.navigate('http://www.example.com/#fragment1');
  await virtualTimeController.grantTime(1000);

  testRunner.log(await session.evaluate(
    `document.getElementById('frame').contentDocument.body.innerText`));
  testRunner.completeTest();
})