blob: 932523987f438b9493c4b7cfef8ac83be1d11a06 [file] [log] [blame]
/*
* Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
* for details. All rights reserved. Use of this source code is governed by a
* BSD-style license that can be found in the LICENSE file.
*/
/**
* @description Test for Bug 41509 - Ranges for @font-face unicode-range must
* be separated by commas
* unicode-range can have comma-separated multiple ranges. For each of the
* following pairs, the upper and the lower lines should have the same length
* on screen.
*/
import "dart:html";
import "../../testcommon.dart";
import "../../../Utils/async_utils.dart";
import "pwd.dart";
main() {
var style = new Element.html('''
<style>
.test {
border: solid 1px;
}
/* Test 0: Comma-separated list, which is valid. */
@font-face {
font-family:myfont_0;
src: local('Times');
}
@font-face {
font-family:myfont_0;
src: local('Courier');
unicode-range: u+69, u+6a; /* 'i' and 'j' */
}
/* Test 1: Comma-separated list with three elements, which is valid. */
@font-face {
font-family:myfont_1;
src: local('Times');
}
@font-face {
font-family:myfont_1;
src: local('Courier');
unicode-range: u+69 , u+6a ,u+6c; /* 'i', 'j', and 'l' */
}
/* Test 2: Comma-separated list with two consecutive commas, which is invalid. */
@font-face {
font-family:myfont_2;
src: local('Times');
}
@font-face {
font-family:myfont_2;
src: local('Courier');
unicode-range: u+69, , u+6a; /* 'i' and 'j' */
}
/* Test 3: Comma-separated list with a trailing comma, which is invalid. */
@font-face {
font-family:myfont_3;
src: local('Times');
}
@font-face {
font-family:myfont_3;
src: local('Courier');
unicode-range: u+69, u+6a,; /* 'i' and 'j' */
}
/* Test 4: Comma-separated list with a leading comma, which is invalid. */
@font-face {
font-family:myfont_4;
src: local('Times');
}
@font-face {
font-family:myfont_4;
src: local('Courier');
unicode-range: , u+69, u+6a; /* 'i' and 'j' */
}
/* Test 5: Space-separated list, which is invalid. */
@font-face {
font-family:myfont_5;
src: local('Times');
}
@font-face {
font-family:myfont_5;
src: local('Courier');
unicode-range: u+69 u+6a ; /* 'i' and 'j' */
}
/* Test 6: Slash-separated list, which is invalid. */
@font-face {
font-family:myfont_6;
src: local('Times');
}
@font-face {
font-family:myfont_6;
src: local('Courier');
unicode-range: u+69/u+6a; /* 'i' and 'j' */
}
</style>
''', treeSanitizer: new NullTreeSanitizer());
document.head.append(style);
document.body.setInnerHtml('''
<div id="description"></div>
<div id="tests"></div>
<div id="console"></div>
''', treeSanitizer: new NullTreeSanitizer());
var testsElement = document.getElementById("tests");
var testStrings = [
"iiiiiiiiii",
"jjjjjjjjjj",
"kkkkkkkkkk",
"llllllllll"
];
var expectedResults = [
// Effective font family for "i", "j", "k", and "l"
["Courier", "Courier", "Times", "Times"],
["Courier", "Courier", "Times", "Courier"],
["Courier", "Courier", "Courier", "Courier"],
["Courier", "Courier", "Courier", "Courier"],
["Courier", "Courier", "Courier", "Courier"],
["Courier", "Courier", "Courier", "Courier"],
["Courier", "Courier", "Courier", "Courier"]
];
createAndAppendSpan(id, subId, fontFamily)
{
var span = document.createElement("span");
span.id = id;
span.className = "test";
span.style.fontFamily = fontFamily;
span.innerHtml = testStrings[subId];
testsElement.append(span);
testsElement.append(new Text(" " + id));
testsElement.append(document.createElement("br"));
}
for (var mainTestId = 0; mainTestId < expectedResults.length; mainTestId++) {
for (var subTestId = 0; subTestId < testStrings.length; subTestId++) {
var testId = "test_${mainTestId}_${subTestId}";
var testFontFamily = "myfont_$mainTestId";
createAndAppendSpan(testId, subTestId, testFontFamily);
var refId = "ref_${mainTestId}_${subTestId}";
var refFontFamily = expectedResults[mainTestId][subTestId];
createAndAppendSpan(refId, subTestId, refFontFamily);
shouldBe(document.getElementById(testId).offsetWidth,
document.getElementById(refId).offsetWidth);
}
testsElement.append(document.createElement("br"));
}
}