aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/tests/ai/summarizer
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/tests/ai/summarizer')
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js22
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js4
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js2
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js8
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js2
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-from-detached-iframe.tentative.https.window.js57
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js28
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js26
8 files changed, 121 insertions, 28 deletions
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js
index 14c89056dfb..6c98a845fa6 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js
@@ -1,6 +1,7 @@
// META: title=Summarizer Abort
// META: script=/resources/testdriver.js
// META: script=../resources/util.js
+// META: timeout=long
'use strict';
@@ -11,15 +12,24 @@ promise_test(async t => {
}, 'Aborting Summarizer.create().');
promise_test(async t => {
- const session = await createSummarizer();
+ const summarizer = await createSummarizer();
await testAbortPromise(t, signal => {
- return session.summarize(kTestPrompt, { signal: signal });
+ return summarizer.summarize(kTestPrompt, { signal: signal });
});
-}, 'Aborting Summarizer.summarize().');
+}, 'Aborting Summarizer.summarize()');
promise_test(async t => {
- const session = await createSummarizer();
+ const summarizer = await createSummarizer();
await testAbortReadableStream(t, signal => {
- return session.summarizeStreaming(kTestPrompt, { signal: signal });
+ return summarizer.summarizeStreaming(kTestPrompt, { signal: signal });
});
-}, 'Aborting Summarizer.summarizeStreaming().');
+}, 'Aborting Summarizer.summarizeStreaming()');
+
+promise_test(async (t) => {
+ const summarizer = await createSummarizer();
+ const controller = new AbortController();
+ const streamingResponse = summarizer.summarizeStreaming(
+ kTestPrompt, { signal: controller.signal });
+ for await (const chunk of streamingResponse); // Do nothing
+ controller.abort();
+}, 'Aborting Summarizer.summarizeStreaming() after finished reading');
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js
index f569cb43b0f..df4e161d637 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js
@@ -12,7 +12,7 @@ promise_test(async () => {
promise_test(async () => {
const availability = await Summarizer.availability({
- type: 'tl;dr',
+ type: 'tldr',
format: 'plain-text',
length: 'medium',
expectedInputLanguages: ['en-GB'],
@@ -24,7 +24,7 @@ promise_test(async () => {
promise_test(async () => {
const availability = await Summarizer.availability({
- type: 'tl;dr',
+ type: 'tldr',
format: 'plain-text',
length: 'medium',
expectedInputLanguages: ['es'], // not supported
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js
index 85282959f9e..91cb3129557 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js
@@ -18,7 +18,7 @@ promise_test(async () => {
promise_test(async () => {
// An array of plausible test option values.
const kCreateOptionsSpec = [
- {type: [undefined, 'tl;dr', 'teaser', 'key-points', 'headline']},
+ {type: [undefined, 'tldr', 'teaser', 'key-points', 'headline']},
{format: [undefined, 'plain-text', 'markdown']},
{length: [undefined, 'short', 'medium', 'long']},
{expectedInputLanguages: [[], ['en'], ['es'], ['jp', 'fr']]},
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js
index 1f108ddd021..0153ca784ce 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js
@@ -36,7 +36,7 @@ promise_test(async () => {
promise_test(async t => {
await testCreateMonitorWithAbort(t, Summarizer.create);
-}, 'Progress events are not emitted after aborted.');
+}, 'Progress events are not emitted after aborted');
promise_test(async () => {
const sharedContext = 'This is a shared context string';
@@ -74,6 +74,12 @@ promise_test(async () => {
assert_equals(summarizer.outputLanguage, 'en');
}, 'Summarizer.outputLanguage');
+promise_test(async (t) => {
+ promise_rejects_js(
+ t, RangeError,
+ createSummarizer({ expectedInputLanguages: ['en-abc-invalid'] }));
+}, 'Creating Summarizer with malformed language string');
+
promise_test(async () => {
const summarizer = await createSummarizer();
assert_equals(summarizer.expectedInputLanguages, null);
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js
index d9df70cc2e7..ff5d42b100f 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js
@@ -22,4 +22,4 @@ promise_test(async t => {
// Now that it is available, we should no longer need user activation.
await Summarizer.create();
-}, 'Summarizer.create() requires user activation when availability is "downloadable."');
+}, 'Summarizer.create() requires user activation when availability is "downloadable"');
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-from-detached-iframe.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-from-detached-iframe.tentative.https.window.js
new file mode 100644
index 00000000000..8bfdc923196
--- /dev/null
+++ b/tests/wpt/tests/ai/summarizer/summarizer-from-detached-iframe.tentative.https.window.js
@@ -0,0 +1,57 @@
+// META: title=Summarizer Detached Iframe
+// META: script=/resources/testdriver.js
+// META: script=../resources/util.js
+// META: timeout=long
+
+'use strict';
+
+promise_test(async (t) => {
+ const iframe = document.body.appendChild(document.createElement('iframe'));
+ await test_driver.bless('Summarizer create()', null, iframe.contentWindow);
+ iframe.contentWindow.Summarizer.create();
+ iframe.remove();
+}, 'Detaching iframe during Summarizer.create() should not leak memory');
+
+promise_test(async (t) => {
+ const iframe = document.body.appendChild(document.createElement('iframe'));
+ await test_driver.bless('Summarizer create()', null, iframe.contentWindow);
+ const iframeWindow = iframe.contentWindow;
+ const iframeDOMException = iframeWindow.DOMException;
+ const iframeSummarizer = iframeWindow.Summarizer;
+ iframe.remove();
+
+ await promise_rejects_dom(
+ t, 'InvalidStateError', iframeDOMException, iframeSummarizer.create());
+}, 'Summarizer.create() fails on a detached iframe');
+
+promise_test(async (t) => {
+ const iframe = document.body.appendChild(document.createElement('iframe'));
+ await test_driver.bless('Summarizer create()', null, iframe.contentWindow);
+ const iframeDOMException = iframe.contentWindow.DOMException;
+ const summarizer = await iframe.contentWindow.Summarizer.create();
+ iframe.remove();
+
+ await promise_rejects_dom(
+ t, 'InvalidStateError', iframeDOMException, summarizer.summarize(kTestPrompt));
+}, 'Summarizer.summarize() fails on a detached iframe');
+
+promise_test(async (t) => {
+ const iframe = document.body.appendChild(document.createElement('iframe'));
+ await test_driver.bless('Summarizer create()', null, iframe.contentWindow);
+ const iframeWindow = iframe.contentWindow;
+ const iframeDOMException = iframeWindow.DOMException;
+ const summarizer = await iframeWindow.Summarizer.create();
+ iframe.remove();
+
+ assert_throws_dom(
+ 'InvalidStateError',
+ iframeDOMException, () => summarizer.summarizeStreaming(kTestPrompt));
+}, 'Summarizer.summarizeStreaming() fails on a detached iframe');
+
+promise_test(async (t) => {
+ const iframe = document.body.appendChild(document.createElement('iframe'));
+ await test_driver.bless('Summarizer create()', null, iframe.contentWindow);
+ const summarizer = await iframe.contentWindow.Summarizer.create();
+ summarizer.summarize(kTestPrompt);
+ iframe.remove();
+}, 'Detaching iframe during Summarizer.summarize() should not leak memory');
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js
index 59aa01aeb31..8d85dc7b836 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js
@@ -7,34 +7,34 @@
promise_test(async t => {
const summarizer = await createSummarizer();
- const streamingResponse = summarizer.summarizeStreaming(
- "The web-platform-tests Project is a cross-browser test suite for the Web-platform stack. Writing tests in a way that allows them to be run in all browsers gives browser projects confidence that they are shipping software that is compatible with other implementations, and that later implementations will be compatible with their implementations. This in turn gives Web authors/developers confidence that they can actually rely on the Web platform to deliver on the promise of working across browsers and devices without needing extra layers of abstraction to paper over the gaps left by specification editors and implementors.");
+ const streamingResponse = summarizer.summarizeStreaming(kTestPrompt);
assert_equals(
Object.prototype.toString.call(streamingResponse),
"[object ReadableStream]"
);
- const reader = streamingResponse.getReader();
- let result = "";
- while (true) {
- const { value, done } = await reader.read();
- if (done) {
- break;
- }
- result += value;
+ let result = '';
+ for await (const chunk of streamingResponse) {
+ result += chunk;
}
assert_greater_than(result.length, 0);
-}, 'Summarizer.summarizeStreaming() returns ReadableStream with a non-empty text.');
+}, 'Simple Summarizer.summarizeStreaming() call');
+
+promise_test(async (t) => {
+ const summarizer = await createSummarizer();
+ summarizer.destroy();
+ assert_throws_dom('InvalidStateError', () => summarizer.summarizeStreaming(kTestPrompt));
+}, 'Summarizer.summarizeStreaming() fails after destroyed');
promise_test(async t => {
const summarizer = await createSummarizer();
- const streamingResponse = summarizer.summarizeStreaming("");
+ const streamingResponse = summarizer.summarizeStreaming('');
assert_equals(
Object.prototype.toString.call(streamingResponse),
"[object ReadableStream]"
);
const { result, done } = await streamingResponse.getReader().read();
assert_true(done);
-}, 'Summarizer.summarizeStreaming() returns a ReadableStream without any chunk on an empty input.');
+}, 'Summarizer.summarizeStreaming() returns a ReadableStream without any chunk on an empty input');
promise_test(async () => {
const summarizer = await createSummarizer();
@@ -42,4 +42,4 @@ promise_test(async () => {
summarizer.summarizeStreaming(kTestPrompt),
summarizer.summarizeStreaming(kTestPrompt)
]);
-}, 'Multiple Summarizer.summarizeStreaming() calls are resolved successfully.');
+}, 'Multiple Summarizer.summarizeStreaming() calls are resolved successfully');
diff --git a/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js
index c54052f8b36..a9be36dace0 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js
+++ b/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js
@@ -1,16 +1,36 @@
-// META: title=Summarizer Create Available
+// META: title=Summarizer Summarize
// META: script=/resources/testdriver.js
// META: script=../resources/util.js
// META: timeout=long
'use strict';
+promise_test(async (t) => {
+ const summarizer = await createSummarizer();
+ let result = await summarizer.summarize('');
+ assert_equals(result, '');
+ result = await summarizer.summarize(' ');
+ assert_equals(result, '');
+}, 'Summarizer.summarize() with an empty input returns an empty text');
+
+promise_test(async (t) => {
+ const summarizer = await createSummarizer();
+ const result = await summarizer.summarize(kTestPrompt, { context: ' ' });
+ assert_not_equals(result, '');
+}, 'Summarizer.summarize() with a whitespace context returns an empty result');
+
+promise_test(async (t) => {
+ const summarizer = await createSummarizer();
+ summarizer.destroy();
+ await promise_rejects_dom(t, 'InvalidStateError', summarizer.summarize(kTestPrompt));
+}, 'Summarizer.summarize() fails after destroyed');
+
promise_test(async () => {
const summarizer = await createSummarizer();
const result = await summarizer.summarize(kTestPrompt);
assert_equals(typeof result, 'string');
assert_greater_than(result.length, 0);
-}, 'Summarizer.summarize() returns non-empty result.');
+}, 'Simple Summarizer.summarize() call');
promise_test(async () => {
const summarizer = await createSummarizer();
@@ -18,4 +38,4 @@ promise_test(async () => {
summarizer.summarize(kTestPrompt),
summarizer.summarize(kTestPrompt)
]);
-}, 'Multiple Summarizer.summarize() calls are resolved successfully.');
+}, 'Multiple Summarizer.summarize() calls are resolved successfully');