//META: script=/resources/testdriver.js //META: script=/resources/testdriver-vendor.js //META: script=resources/font-asserts.js //META: script=resources/font-data.js //META: script=resources/font-test-utils.js font_access_test(async t => { const testData = getTestData(); assert_greater_than_equal( testData.size, 1, 'Need a least one test font data.'); const testFont = testData.values().next().value; const queryInput = { postscriptNames: [testFont.postscriptName] }; const fonts = await self.queryLocalFonts(queryInput); assert_equals( fonts.length, 1, 'The result length should match the test length.'); assert_font_equals(fonts[0], testFont); }, 'queryLocalFonts(): valid postscript name in QueryOptions'); font_access_test(async t => { const queryInput = { postscriptNames: ['invalid_postscript_name'] }; const fonts = await self.queryLocalFonts(queryInput); assert_equals( fonts.length, 0, 'Fonts should not be selected for an invalid postscript name.'); }, 'queryLocalFonts(): invalid postscript name in QueryOptions'); font_access_test(async t => { const fonts = await self.queryLocalFonts({}); assert_greater_than_equal( fonts.length, 1, 'All available fonts should be returned when an empty object is passed.'); }, 'queryLocalFonts(): empty object for QueryOptions.postscriptNames'); font_access_test(async t => { const queryInput = { invalidFieldName: [] }; const fonts = await self.queryLocalFonts(queryInput); assert_greater_than_equal( fonts.length, 1, 'All available fonts should be returned when an invalid field name for ' + 'QueryOptions is passed.'); }, 'queryLocalFonts(): invalid QueryOptions field'); font_access_test(async t => { const queryInput = { postscriptNames: [] }; const fonts = await self.queryLocalFonts(queryInput); assert_equals( fonts.length, 0, 'Fonts should not be selected when an empty list for ' + 'QueryOptions.postscriptNames is passed.'); }, 'queryLocalFonts(): empty QueryOptions.postscriptNames list'); font_access_test(async t => { const fonts = await self.queryLocalFonts(undefined); assert_greater_than_equal( fonts.length, 1, 'All available fonts should be returned when undefined is passed for ' + 'input.'); }, 'queryLocalFonts(): undefined QueryOptions'); const non_ascii_input = [ {postscriptNames: ['¥']}, {postscriptNames: ['ß']}, {postscriptNames: ['🎵']}, // UTF-16LE, encodes to the same first four bytes as "Ahem" in ASCII. {postscriptNames: ['\u6841\u6d65']}, // U+6C34 CJK UNIFIED IDEOGRAPH (water) {postscriptNames: ['\u6C34']}, // U+1D11E MUSICAL SYMBOL G-CLEF (UTF-16 surrogate pair) {postscriptNames: ['\uD834\uDD1E']}, // U+FFFD REPLACEMENT CHARACTER {postscriptNames: ['\uFFFD']}, // UTF-16 surrogate lead {postscriptNames: ['\uD800']}, // UTF-16 surrogate trail {postscriptNames: ['\uDC00']}, ]; for (const test of non_ascii_input) { font_access_test(async t => { const fonts = await self.queryLocalFonts(test); assert_equals( fonts.length, 0, 'Fonts should not be selected for non-ASCII character input: ' + JSON.stringify(fonts)); }, `queryLocalFonts(): non-ASCII character input: ${JSON.stringify(test)}`); }