Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/layout/generic/test/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 7 kB image not shown  

Quelle  test_selection_underline.html   Sprache: HTML

 
 products/Sources/formale Sprachen/C/Firefox/layout/generic/test/test_selection_underline.html


<html>

<head>
  <title>Test for selection underline</title>
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script>
  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />

<script type="text/javascript">

// Canvas related code stolen from layout/base/tests/bidi_numeral_test.js which
// stole from http://developer.mozilla.org/en/docs/Code_snippets:Canvas

var RemoteCanvas = function(aIFrame, aTest) {
  this.iframe = aIFrame;
  this.test = aTest;
  this.snapshot = null;
};

RemoteCanvas.CANVAS_WIDTH = 200;
RemoteCanvas.CANVAS_HEIGHT = 100;

RemoteCanvas.prototype.isReference = function() {
  return this.iframe && (this.iframe.id == "reference");
}

RemoteCanvas.prototype.load = function(callback) {
  this.iframe.contentWindow.wrappedJSObject.init(this.test);
  var me = this;
  setTimeout(function () { me.remotePagePrepared(callback) }, 100);
}

RemoteCanvas.prototype.remotePagePrepared = function(callback) {
  this.snapshot = snapshotWindow(this.iframe.contentWindow);
  callback(this);
}

var gPrefs = [
  [ "ui.SpellCheckerUnderline""#ff0000" ],
  [ "ui.IMERawInputBackground""transparent" ],
  [ "ui.IMERawInputForeground""#000000" ],
  [ "ui.IMERawInputUnderline""#00ff00" ],
  [ "ui.IMESelectedRawTextBackground""transparent" ],
  [ "ui.IMESelectedRawTextForeground""#000000" ],
  [ "ui.IMESelectedRawTextUnderline""#0000ff" ],
  [ "ui.IMEConvertedTextBackground""transparent" ],
  [ "ui.IMEConvertedTextForeground""#000000" ],
  [ "ui.IMEConvertedTextUnderline""#ffff00" ],
  [ "ui.IMESelectedConvertedTextBackground""transparent" ],
  [ "ui.IMESelectedConvertedTextForeground""#000000" ],
  [ "ui.IMESelectedConvertedTextUnderline""#00ffff" ],
  [ "ui.SpellCheckerUnderlineStyle", 0 ],
  [ "ui.IMERawInputUnderlineStyle", 0 ],
  [ "ui.IMESelectedRawTextUnderlineStyle", 0 ],
  [ "ui.IMEConvertedTextUnderlineStyle", 0 ],
  [ "ui.IMESelectedConvertedTextUnderlineStyle", 0 ],
  [ "ui.SpellCheckerUnderlineRelativeSize", 1.0 ],
  [ "ui.IMEUnderlineRelativeSize", 1.0 ]
];

const nsISelectionController = Ci.nsISelectionController;

var gSelectionIndex = -1;
const kSelections = [
  { type: nsISelectionController.SELECTION_SPELLCHECK,
    typeName: "SpellCheck", isIME: false,
    decorationColor: "#ff0000" },
  { type: nsISelectionController.SELECTION_IME_RAWINPUT,
    typeName: "IME-RawInput", isIME: true,
    decorationColor: "#00ff00" },
  { type: nsISelectionController.SELECTION_IME_SELECTEDRAWTEXT,
    typeName: "IME-SelectedRawText", isIME: true,
    decorationColor: "#0000ff" },
  { type: nsISelectionController.SELECTION_IME_CONVERTEDTEXT,
    typeName: "IME-ConvertedText", isIME: true,
    decorationColor: "#ffff00" },
  { type: nsISelectionController.SELECTION_IME_SELECTEDCONVERTEDTEXT,
    typeName: "IME-SelectedConvertedText", isIME: true,
    decorationColor: "#00ffff" },
];

const kFontName_Ahem = "AhemTest";
const kFontName_MPlus = "mplusTest";

var gFontIndex = 0;
const kFonts = [
  { family: kFontName_Ahem, defaultSize: 16 },
  { family: kFontName_Ahem, defaultSize: 20 },
  { family: kFontName_Ahem, defaultSize: 32 },
  { family: kFontName_Ahem, defaultSize: 52 },

  { family: kFontName_MPlus, defaultSize: 16 },
  { family: kFontName_MPlus, defaultSize: 20 },
  { family: kFontName_MPlus, defaultSize: 32 },
  { family: kFontName_MPlus, defaultSize: 52 },
];

const kDecorationStyleNone   = 0;
const kDecorationStyleDotted = 1;
const kDecorationStyleDashed = 2;
const kDecorationStyleSolid  = 3;
const kDecorationStyleDouble = 4;
const kDecorationStyleWavy   = 5;

var gDecorationIndex = 0;
const kDecorations = [
  { relativeSize: 1.0, style: kDecorationStyleNone,   styleName: "-moz-none" },
  { relativeSize: 1.0, style: kDecorationStyleSolid,  styleName: "solid"     },
  { relativeSize: 1.0, style: kDecorationStyleDotted, styleName: "dotted"    },
  { relativeSize: 1.0, style: kDecorationStyleDashed, styleName: "dashed"    },
  { relativeSize: 1.0, style: kDecorationStyleDouble, styleName: "double"    },
  { relativeSize: 1.0, style: kDecorationStyleWavy,   styleName: "wavy"      },

// XXX relativeSize 2.0 cannot be tested by CSS3 text-decoration

];

function IsD2DEnabled() {
  var enabled = false;

  try {
    enabled = Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo).D2DEnabled;
  } catch(e) {}

  return enabled;
}

function getFuzz(test) {
  // Only failing on Windows with Direct2D enabled, and only for 16 permutations.
  if (IsD2DEnabled() &&
      test.decoration.styleName == "solid" &&
      test.decoration.relativeSize == "1" &&
      test.font.family == "mplusTest" &&
      test.selection.typeName != "SpellCheck") {
    return { numDifferentPixels: 194, maxDifference: 1 };
  }
  return null;
}

async function run()
{
  let prefs = [];
  if (++gSelectionIndex == kSelections.length) {
    if (++gFontIndex == kFonts.length) {
      if (++gDecorationIndex == kDecorations.length) {
        SimpleTest.finish();
        return;
      }
      gFontIndex = 0;
    }
    gSelectionIndex = 0;
    prefs.push([ "font.size.variable.x-western", kFonts[gFontIndex].defaultSize ]);
  }

  var test = {
    font: kFonts[gFontIndex],
    decoration: kDecorations[gDecorationIndex],
    selection: kSelections[gSelectionIndex],
  };

  prefs.push(
    ["ui.SpellCheckerUnderlineRelativeSize", test.decoration.relativeSize * 100],
    ["ui.IMEUnderlineRelativeSize", test.decoration.relativeSize * 100],
    ["ui.SpellCheckerUnderlineStyle", test.decoration.style],
    ["ui.IMERawInputUnderlineStyle", test.decoration.style],
    ["ui.IMESelectedRawTextUnderlineStyle", test.decoration.style],
    ["ui.IMEConvertedTextUnderlineStyle", test.decoration.style],
    ["ui.IMESelectedConvertedTextUnderlineStyle", test.decoration.style],
  );

  await SpecialPowers.pushPrefEnv({ set: prefs });
  doTest(test);
}

function doTest(aTest)
{

  var canvases = [];
  function callbackTestCanvas(canvas)
  {
    canvases.push(canvas);

    if (canvases.length != 2)
      return;

    var result = !canvases[0].isReference() ? canvases[0] : canvases[1];
    var reference = canvases[0].isReference() ? canvases[0] : canvases[1];

    var description = "(selection: " + aTest.selection.typeName +
                      ", style: " + aTest.decoration.styleName +
                      ", relativeSize: " + aTest.decoration.relativeSize +
                      ", font: " + aTest.font.family +
                      ", default font size: " + aTest.font.defaultSize + ")";

    // If the decoration line is thick and the descender of the text isn't
    // enough for containing it, selection underline may be painted lower
    // if it's possible. Then, we cannot test it with CSS3 text-decoration.
    if (aTest.decoration.style == kDecorationStyleDouble ||
        aTest.decoration.style == kDecorationStyleWavy) {
      todo(false, "Rendering of" + description);
    } else {
      assertSnapshots(result.snapshot, reference.snapshot, true,
                      getFuzz(aTest), description, "");
    }

    canvases = [];

    run();
  }

  var testCanvas = new RemoteCanvas(document.getElementById("result"), aTest);
  testCanvas.load(callbackTestCanvas);

  var refCanvas = new RemoteCanvas(document.getElementById("reference"), aTest);
  refCanvas.load(callbackTestCanvas);
}

async function onLoad()
{
  await SpecialPowers.pushPrefEnv({ set: gPrefs });

  var iframe = document.getElementById("result");
  iframe.width = RemoteCanvas.CANVAS_WIDTH + "px";
  iframe.height = RemoteCanvas.CANVAS_HEIGHT + "px";
  iframe = document.getElementById("reference");
  iframe.width = RemoteCanvas.CANVAS_WIDTH + "px";
  iframe.height = RemoteCanvas.CANVAS_HEIGHT + "px";

  run();
}

SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(onLoad, window);

</script>

</head>
<body>

<iframe src="frame_selection_underline.xhtml" id="result"></iframe>
<iframe src="frame_selection_underline-ref.xhtml" id="reference"></iframe>
<pre id="test">
</pre>

</body>
</html>

Messung V0.5
C=100 H=100 G=100

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.