layout/base/tests/test_reftests_with_caret.html
author Ehsan Akhgari <ehsan@mozilla.com>
Thu, 15 Jan 2015 11:59:13 -0500
changeset 239559 739b6b7ed6bcab0626e0f0c42ed1d14cb0000cf6
parent 239558 39c448409484df1357a6417f38c9a6965d60b51c
child 240553 d35d83e9c9f2735de69343e3b5fccce96146951e
permissions -rw-r--r--
Bug 989012 - Part 2: Don't get stuck when seeing an image without a src or alt attribute; r=roc We do not want to traverse inside native anonymous elements, but we should still be able to skip over generated content, to avoid getting stuck on such images.

<!DOCTYPE HTML>
<html>
<head>
  <title>Reftests with caret drawing</title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
  <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <style>
    iframe {
      width: 600px;
      height: 600px;
    }
  </style>
<script type="text/javascript">

SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout("untriaged");

var iframes = [];
function callbackTestIframe(iframe)
{
  iframes.push(iframe);

  if (iframes.length != 2)
    return;

  var result = iframes[0];
  var reference = iframes[1];

  // Using assertSnapshots is important to get the data-URIs of failing tests
  // dumped into the log in a format that reftest-analyzer.xhtml can process. 
  var passed = assertSnapshots(result.snapshot, reference.snapshot, true,
                               null /*no fuzz*/, result.src, reference.src);

  // Remove the iframes if the test was successful
  if (passed) {
    result.parentNode.removeChild(result);
    reference.parentNode.removeChild(reference);
  }

  iframes = [];
  SimpleTest.waitForFocus(nextTest);
}

function doSnapShot(iframe) {
  iframe.snapshot = snapshotWindow(iframe.contentWindow, true);
  callbackTestIframe(iframe);
};

function remotePageLoaded(callback) {
  var iframe = this;
  setTimeout(function(){
    doSnapShot(iframe);
    callback();
  }, 0);
};

const MAX_ITERATIONS = 1000;

function createIframe(url,next) {
  var iframe = document.createElement("iframe");
  iframe.src = url;
  iframe.remotePageLoaded = remotePageLoaded;
  var me = this;
  var currentIteration = 0;
  function iframeLoadCompleted() {
    var docEl = iframe.contentDocument.documentElement;
    if (docEl.className.indexOf("reftest-wait") >= 0) {
      if (currentIteration++ > MAX_ITERATIONS) {
        ok(false, "iframe load for " + url + " timed out");
        endTest();
      } else {
        setTimeout(iframeLoadCompleted, 10);
      }
      return;
    }
    iframe.remotePageLoaded(function() {
      if (next) {
        setTimeout(function(){createIframe(next,null);}, 0)
      }
    });
  }
  iframe.addEventListener("load", iframeLoadCompleted, false);
  window.document.body.appendChild(iframe);
  iframe.focus();
};

function refTest(test,ref) {
  createIframe(test,ref);
};

var caretBlinkTime = null;
function endTest() {
  if (caretBlinkTime !== null) {
    SpecialPowers.setIntPref("ui.caretBlinkTime", caretBlinkTime);
  } else {
    SpecialPowers.clearUserPref("ui.caretBlinkTime");
  }

  // finish(), yet let the test actually end first, to be safe.
  SimpleTest.executeSoon(SimpleTest.finish);
}

var tests = [
    [ 'bug106855-1.html' , 'bug106855-1-ref.html' ] ,
    [ 'bug106855-2.html' , 'bug106855-1-ref.html' ] ,
    [ 'bug389321-2.html' , 'bug389321-2-ref.html' ] ,
    [ 'bug613807-1.html' , 'bug613807-1-ref.html' ] ,
    [ 'bug989012-1.html' , 'bug989012-1-ref.html' ] ,
    [ 'bug989012-2.html' , 'bug989012-2-ref.html' ] ,
    [ 'bug989012-3.html' , 'bug989012-3-ref.html' ] ,
    [ 'bug1082486-1.html', 'bug1082486-1-ref.html'] ,
    [ 'bug1082486-2.html', 'bug1082486-2-ref.html'] ,
    // The following test cases are all involving with one sending
    // synthesizeKey(), the other without. They ought to be failed
    // when touch caret preference on. Test them with preference off.
    function() {SpecialPowers.setBoolPref("touchcaret.enabled", false);} ,
    [ 'bug240933-1.html' , 'bug240933-1-ref.html' ] ,
    [ 'bug240933-2.html' , 'bug240933-1-ref.html' ] ,
    [ 'bug389321-1.html' , 'bug389321-1-ref.html' ] ,
    [ 'bug389321-3.html' , 'bug389321-3-ref.html' ] ,
    [ 'bug482484.html'   , 'bug482484-ref.html'   ] ,
    [ 'bug503399.html'   , 'bug503399-ref.html'   ] ,
    [ 'bug585922.html'   , 'bug585922-ref.html'   ] ,
    [ 'bug597519-1.html' , 'bug597519-1-ref.html' ] ,
    [ 'bug602141-1.html' , 'bug602141-1-ref.html' ] ,
    [ 'bug602141-2.html' , 'bug602141-2-ref.html' ] ,
    [ 'bug602141-3.html' , 'bug602141-3-ref.html' ] ,
    [ 'bug602141-4.html' , 'bug602141-4-ref.html' ] ,
    [ 'bug612271-1.html' , 'bug612271-ref.html' ]   ,
    [ 'bug612271-2.html' , 'bug612271-ref.html' ]   ,
    [ 'bug612271-3.html' , 'bug612271-ref.html' ]   ,
    [ 'bug613433-1.html' , 'bug613433-ref.html' ]   ,
    [ 'bug613433-2.html' , 'bug613433-ref.html' ]   ,
    [ 'bug613433-3.html' , 'bug613433-ref.html' ]   ,
    [ 'bug632215-1.html' , 'bug632215-ref.html'   ] ,
    [ 'bug632215-2.html' , 'bug632215-ref.html'   ] ,
    [ 'bug633044-1.html' , 'bug633044-1-ref.html' ] ,
    [ 'bug634406-1.html' , 'bug634406-1-ref.html' ] ,
    [ 'bug644428-1.html' , 'bug644428-1-ref.html' ] ,
    function() {SpecialPowers.setBoolPref("bidi.browser.ui", true);} ,
    [ 'bug646382-1.html' , 'bug646382-1-ref.html' ] ,
    [ 'bug646382-2.html' , 'bug646382-2-ref.html' ] ,
    [ 'bug664087-1.html' , 'bug664087-1-ref.html' ] ,
    [ 'bug664087-2.html' , 'bug664087-2-ref.html' ] ,
    [ 'bug682712-1.html' , 'bug682712-1-ref.html' ] ,
    function() {SpecialPowers.clearUserPref("bidi.browser.ui");} ,
    [ 'bug746993-1.html' , 'bug746993-1-ref.html' ] ,
    [ 'bug1007065-1.html' , 'bug1007065-1-ref.html' ] ,
    [ 'bug1007067-1.html' , 'bug1007067-1-ref.html' ] ,
    [ 'bug1061468.html'  , 'bug1061468-ref.html'  ] ,
    [ 'bug1109968-1.html', 'bug1109968-1-ref.html'] ,
    [ 'bug1109968-2.html', 'bug1109968-2-ref.html'] ,
    function() {SpecialPowers.clearUserPref("touchcaret.enabled");} ,
];

if (navigator.appVersion.indexOf("Android") == -1 &&
  SpecialPowers.Services.appinfo.name != "B2G") {
  tests.push(function() {SpecialPowers.setBoolPref("touchcaret.enabled", false);});
  tests.push([ 'bug512295-1.html' , 'bug512295-1-ref.html' ]);
  tests.push([ 'bug512295-2.html' , 'bug512295-2-ref.html' ]);
  tests.push([ 'bug923376.html'   , 'bug923376-ref.html'   ]);
  tests.push(function() {SpecialPowers.clearUserPref("touchcaret.enabled");});
  tests.push(function() {SpecialPowers.setBoolPref("layout.css.overflow-clip-box.enabled", true);});
  tests.push([ 'bug966992-1.html' , 'bug966992-1-ref.html' ]);
  tests.push([ 'bug966992-2.html' , 'bug966992-2-ref.html' ]);
  tests.push([ 'bug966992-3.html' , 'bug966992-3-ref.html' ]);
  tests.push(function() {SpecialPowers.setBoolPref("layout.css.overflow-clip-box.enabled", false);});
} else {
  is(SpecialPowers.getIntPref("layout.spellcheckDefault"), 0, "Spellcheck should be turned off for this platrom or this if..else check removed");
}

var testIndex = 0;

function nextTest() {
  if (testIndex < tests.length) {
    if (typeof(tests[testIndex]) == 'function') {
      tests[testIndex]();
      SimpleTest.executeSoon(nextTest);
    } else {
      refTest(tests[testIndex][0],tests[testIndex][1]);
    }
    ++testIndex;
  } else {
    endTest();
  }
}
function runTests() {
  try {
    try {
      caretBlinkTime = SpecialPowers.getIntPref("ui.caretBlinkTime");
    } catch (e) {}
    SpecialPowers.setIntPref("ui.caretBlinkTime", -1);

    nextTest();
  } catch(e) {
    endTest();
  }
}

SimpleTest.waitForFocus(runTests);

</script>
</head>
<body>
</body>
</html>