blob: 0f6d70da9c6b77576d9ef511f0ec594c2af1c1c2 [file] [log] [blame]
//META: script=/resources/testdriver.js
//META: script=/resources/testdriver-vendor.js
//META: script=resources/test-expectations.js
'use strict';
font_access_test(async t => {
const fonts = await navigator.fonts.query({persistentAccess: true});
assert_true(Array.isArray(fonts), 'Result of query() should be an Array');
assert_greater_than_equal(fonts.length, 1, 'Need a least one font');
fonts.forEach(font => {
assert_true(font instanceof FontMetadata,
'Results should be FontMetadata instances');
// Verify properties and types. This is partially redundant with an IDL
// test but more domain-specific tests are be done.
assert_equals(typeof font.postscriptName, 'string');
assert_true(
font.postscriptName.split('').every(c => ' ' <= c && c < '\x7f'),
`postscriptName should be printable ASCII: "${font.postscriptName}"`
);
assert_equals(typeof font.fullName, 'string', 'fullName attribute type');
assert_equals(typeof font.family, 'string', 'family attribute type');
assert_equals(typeof font.style, 'string', 'style attribute type');
assert_equals(typeof font.italic, 'boolean', 'italic attribute type');
assert_equals(typeof font.weight, 'number', 'weight attribute type');
assert_between_inclusive(
font.weight, 1, 1000, `${font.postscriptName}: weight attribute range`);
assert_equals(typeof font.stretch, 'number');
assert_between_inclusive(
font.stretch, 0.5, 2, `${font.postscriptName}: stretch attribute range`);
});
}, 'FontMetadata property types and value ranges');
font_access_test(async t => {
// Fonts we know about.
const testSet = getEnumerationTestSet();
// Get the system fonts.
let fonts = await navigator.fonts.query({persistentAccess: true});
assert_true(Array.isArray(fonts), 'Result of query() should be an Array');
// Filter to the ones we care about.
fonts = await filterEnumeration(fonts, testSet);
assert_greater_than_equal(fonts.length, 1, 'Need a least one font');
const expectations = new Map();
for (const expectation of testSet) {
expectations.set(expectation.postscriptName, expectation);
}
const results = [];
fonts.forEach(font => {
const expectation = expectations.get(font.postscriptName);
assert_not_equals(expectation, undefined);
assert_equals(font.fullName, expectation.fullName,
`${font.postscriptName}: fullName should match`);
assert_equals(font.family, expectation.family,
`${font.postscriptName}: family should match`);
assert_equals(font.style, expectation.style,
`${font.postscriptName}: style should match`);
assert_equals(font.italic, expectation.italic,
`${font.postscriptName}: italic should match`);
assert_equals(font.stretch, expectation.stretch,
`${font.postscriptName}: stretch should match`);
assert_equals(font.weight, expectation.weight,
`${font.postscriptName}: weight should match`);
});
}, 'Expected FontMetadata values for for well-known system fonts');