Skip to content

Commit

Permalink
Add IDL test for the CSS Font Loading spec (#10049)
Browse files Browse the repository at this point in the history
  • Loading branch information
fred-wang committed Mar 15, 2018
1 parent df9060d commit 212f85d
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 0 deletions.
30 changes: 30 additions & 0 deletions css/css-font-loading/idlharness.https.html
@@ -0,0 +1,30 @@
<!DOCTYPE html>
<title>Font Loading API IDL tests</title>
<link rel="help" href="https://drafts.csswg.org/css-font-loading/#fontfacesetloadevent">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script>
"use strict";

function doTest([dom, cssfontloading]) {
const idl_array = new IdlArray();
idl_array.add_untested_idls(dom);
idl_array.add_untested_idls("[Exposed=Worker] interface WorkerGlobalScope : EventTarget { };");
idl_array.add_objects({Document: ["document"]});
idl_array.add_idls(cssfontloading);
idl_array.test();
}

function fetchText(url) {
return fetch(url).then((response) => response.text());
}

promise_test(() => {
return Promise.all([
"/interfaces/dom.idl",
"/interfaces/css-font-loading.idl",
].map(fetchText)).then(doTest);
}, "Test IDL implementation of CSS Font Loading");
</script>
86 changes: 86 additions & 0 deletions interfaces/css-font-loading.idl
@@ -0,0 +1,86 @@
typedef (ArrayBuffer or ArrayBufferView) BinaryData;

dictionary FontFaceDescriptors {
CSSOMString style = "normal";
CSSOMString weight = "normal";
CSSOMString stretch = "normal";
CSSOMString unicodeRange = "U+0-10FFFF";
CSSOMString variant = "normal";
CSSOMString featureSettings = "normal";
CSSOMString variationSettings = "normal";
CSSOMString display = "auto";
};

enum FontFaceLoadStatus { "unloaded", "loading", "loaded", "error" };

[Constructor(CSSOMString family, (CSSOMString or BinaryData) source,
optional FontFaceDescriptors descriptors),
Exposed=(Window,Worker)]
interface FontFace {
attribute CSSOMString family;
attribute CSSOMString style;
attribute CSSOMString weight;
attribute CSSOMString stretch;
attribute CSSOMString unicodeRange;
attribute CSSOMString variant;
attribute CSSOMString featureSettings;
attribute CSSOMString variationSettings;
attribute CSSOMString display;

readonly attribute FontFaceLoadStatus status;

Promise<FontFace> load();
readonly attribute Promise<FontFace> loaded;
};

dictionary FontFaceSetLoadEventInit : EventInit {
sequence<FontFace> fontfaces = [];
};

[Constructor(CSSOMString type, optional FontFaceSetLoadEventInit eventInitDict),
Exposed=(Window,Worker)]
interface FontFaceSetLoadEvent : Event {
[SameObject] readonly attribute FrozenArray<FontFace> fontfaces;
};

enum FontFaceSetLoadStatus { "loading", "loaded" };

callback ForEachCallback = void (FontFace font, long index, FontFaceSet self);

[Exposed=(Window,Worker),
Constructor(sequence<FontFace> initialFaces)]
interface FontFaceSet : EventTarget {
// FontFaceSet is Set-like!
setlike<FontFace>;
FontFaceSet add(FontFace font);
boolean delete(FontFace font);
void clear();

// events for when loading state changes
attribute EventHandler onloading;
attribute EventHandler onloadingdone;
attribute EventHandler onloadingerror;

// check and start loads if appropriate
// and fulfill promise when all loads complete
Promise<sequence<FontFace>> load(CSSOMString font, optional CSSOMString text = " ");

// return whether all fonts in the fontlist are loaded
// (does not initiate load if not available)
boolean check(CSSOMString font, optional CSSOMString text = " ");

// async notification that font loading and layout operations are done
readonly attribute Promise<FontFaceSet> ready;

// loading state, "loading" while one or more fonts loading, "loaded" otherwise
readonly attribute FontFaceSetLoadStatus status;
};

[Exposed=(Window,Worker),
NoInterfaceObject]
interface FontFaceSource {
readonly attribute FontFaceSet fonts;
};

Document implements FontFaceSource;
WorkerGlobalScope implements FontFaceSource;

0 comments on commit 212f85d

Please sign in to comment.