1
+ // META: title=Rewriter
2
+ // META: script=../resources/util.js
3
+ // META: timeout=long
4
+
5
+ 'use strict' ;
6
+
7
+ promise_test ( async ( ) => {
8
+ assert_true ( ! ! Rewriter ) ;
9
+ } , 'Rewriter must be defined.' ) ;
10
+
11
+ promise_test ( async ( ) => {
12
+ // TODO(crbug.com/382615217): Test availability with various options.
13
+ assert_equals ( await Rewriter . availability ( ) , 'available' ) ;
14
+ assert_equals ( await Rewriter . availability ( { outputLanguage : 'en' } ) , 'available' ) ;
15
+ } , 'Rewriter.availability' ) ;
16
+
17
+ promise_test ( async ( ) => {
18
+ const rewriter = await Rewriter . create ( ) ;
19
+ assert_equals ( Object . prototype . toString . call ( rewriter ) , '[object Rewriter]' ) ;
20
+ } , 'Rewriter.create() must be return a Rewriter.' ) ;
21
+
22
+ promise_test ( async ( ) => {
23
+ await testMonitor ( Rewriter . create ) ;
24
+ } , 'Rewriter.create() notifies its monitor on downloadprogress' ) ;
25
+
26
+ promise_test ( async ( ) => {
27
+ const rewriter = await Rewriter . create ( ) ;
28
+ assert_equals ( rewriter . sharedContext , '' ) ;
29
+ assert_equals ( rewriter . tone , 'as-is' ) ;
30
+ assert_equals ( rewriter . format , 'as-is' ) ;
31
+ assert_equals ( rewriter . length , 'as-is' ) ;
32
+ } , 'Rewriter.create() default values.' ) ;
33
+
34
+ promise_test ( async ( ) => {
35
+ const sharedContext = 'This is a shared context string' ;
36
+ const rewriter = await Rewriter . create ( { sharedContext : sharedContext } ) ;
37
+ assert_equals ( rewriter . sharedContext , sharedContext ) ;
38
+ } , 'Rewriter.sharedContext' ) ;
39
+
40
+ promise_test ( async ( ) => {
41
+ const rewriter = await Rewriter . create ( { tone : 'more-formal' } ) ;
42
+ assert_equals ( rewriter . tone , 'more-formal' ) ;
43
+ } , 'Creating a Rewriter with "more-formal" tone' ) ;
44
+
45
+ promise_test ( async ( ) => {
46
+ const rewriter = await Rewriter . create ( { tone : 'more-casual' } ) ;
47
+ assert_equals ( rewriter . tone , 'more-casual' ) ;
48
+ } , 'Creating a Rewriter with "more-casual" tone' ) ;
49
+
50
+ promise_test ( async ( ) => {
51
+ const rewriter = await Rewriter . create ( { format : 'plain-text' } ) ;
52
+ assert_equals ( rewriter . format , 'plain-text' ) ;
53
+ } , 'Creating a Rewriter with "plain-text" format' ) ;
54
+
55
+ promise_test ( async ( ) => {
56
+ const rewriter = await Rewriter . create ( { format : 'markdown' } ) ;
57
+ assert_equals ( rewriter . format , 'markdown' ) ;
58
+ } , 'Creating a Rewriter with "markdown" format' ) ;
59
+
60
+ promise_test ( async ( ) => {
61
+ const rewriter = await Rewriter . create ( { length : 'shorter' } ) ;
62
+ assert_equals ( rewriter . length , 'shorter' ) ;
63
+ } , 'Creating a Rewriter with "shorter" length' ) ;
64
+
65
+ promise_test ( async ( ) => {
66
+ const rewriter = await Rewriter . create ( { length : 'longer' } ) ;
67
+ assert_equals ( rewriter . length , 'longer' ) ;
68
+ } , 'Creating a Rewriter with "longer" length' ) ;
69
+
70
+ promise_test ( async ( ) => {
71
+ const rewriter = await Rewriter . create ( {
72
+ expectedInputLanguages : [ 'en' ]
73
+ } ) ;
74
+ assert_array_equals ( rewriter . expectedInputLanguages , [ 'en' ] ) ;
75
+ } , 'Creating a Rewriter with expectedInputLanguages' ) ;
76
+
77
+ promise_test ( async ( ) => {
78
+ const rewriter = await Rewriter . create ( {
79
+ expectedContextLanguages : [ 'en' ]
80
+ } ) ;
81
+ assert_array_equals ( rewriter . expectedContextLanguages , [ 'en' ] ) ;
82
+ } , 'Creating a Rewriter with expectedContextLanguages' ) ;
83
+
84
+ promise_test ( async ( ) => {
85
+ const rewriter = await Rewriter . create ( {
86
+ outputLanguage : 'en'
87
+ } ) ;
88
+ assert_equals ( rewriter . outputLanguage , 'en' ) ;
89
+ } , 'Creating a Rewriter with outputLanguage' ) ;
90
+
91
+ promise_test ( async ( ) => {
92
+ const rewriter = await Rewriter . create ( { } ) ;
93
+ assert_equals ( rewriter . expectedInputLanguages , null ) ;
94
+ assert_equals ( rewriter . expectedContextLanguages , null ) ;
95
+ assert_equals ( rewriter . outputLanguage , null ) ;
96
+ } , 'Creating a Rewriter without optional attributes' ) ;
97
+
98
+ promise_test ( async ( t ) => {
99
+ const rewriter = await Rewriter . create ( ) ;
100
+ let result = await rewriter . rewrite ( '' ) ;
101
+ assert_equals ( result , '' ) ;
102
+ result = await rewriter . rewrite ( ' ' ) ;
103
+ assert_equals ( result , ' ' ) ;
104
+ } , 'Rewriter.rewrite() with an empty input or whitespace returns the ' +
105
+ 'original input' ) ;
106
+
107
+ promise_test ( async ( t ) => {
108
+ const rewriter = await Rewriter . create ( ) ;
109
+ const result = await rewriter . rewrite ( 'hello' , { context : ' ' } ) ;
110
+ assert_not_equals ( result , '' ) ;
111
+ } , 'Rewriter.rewrite() with a whitespace context returns a non-empty result' ) ;
112
+
113
+ promise_test ( async ( t ) => {
114
+ const rewriter = await Rewriter . create ( ) ;
115
+ rewriter . destroy ( ) ;
116
+ await promise_rejects_dom ( t , 'InvalidStateError' , rewriter . rewrite ( 'hello' ) ) ;
117
+ } , 'Rewriter.rewrite() fails after destroyed' ) ;
118
+
119
+ promise_test ( async ( t ) => {
120
+ const rewriter = await Rewriter . create ( ) ;
121
+ rewriter . destroy ( ) ;
122
+ assert_throws_dom ( 'InvalidStateError' , ( ) => rewriter . rewriteStreaming ( 'hello' ) ) ;
123
+ } , 'Rewriter.rewriteStreaming() fails after destroyed' ) ;
124
+
125
+ promise_test ( async ( ) => {
126
+ const rewriter = await Rewriter . create ( ) ;
127
+ const result = await rewriter . measureInputUsage ( kTestPrompt ) ;
128
+ assert_greater_than ( result , 0 ) ;
129
+ } , 'Rewriter.measureInputUsage() returns non-empty result' ) ;
130
+
131
+ promise_test ( async ( ) => {
132
+ const rewriter = await Rewriter . create ( ) ;
133
+ const result =
134
+ await rewriter . rewrite ( kTestPrompt , { context : kTestContext } ) ;
135
+ assert_equals ( typeof result , 'string' ) ;
136
+ } , 'Simple Rewriter.rewrite() call' ) ;
137
+
138
+ promise_test ( async ( ) => {
139
+ const rewriter = await Rewriter . create ( ) ;
140
+ const streamingResponse = rewriter . rewriteStreaming (
141
+ kTestPrompt , { context : kTestContext } ) ;
142
+ assert_equals (
143
+ Object . prototype . toString . call ( streamingResponse ) ,
144
+ '[object ReadableStream]' ) ;
145
+ let result = '' ;
146
+ for await ( const chunk of streamingResponse ) {
147
+ result += chunk ;
148
+ }
149
+ assert_greater_than ( result . length , 0 ) ;
150
+ } , 'Simple Rewriter.rewriteStreaming() call' ) ;
151
+
152
+ promise_test ( async ( ) => {
153
+ const rewriter = await Rewriter . create ( ) ;
154
+ await Promise . all ( [
155
+ rewriter . rewrite ( kTestPrompt ) ,
156
+ rewriter . rewrite ( kTestPrompt )
157
+ ] ) ;
158
+ } , 'Multiple Rewriter.rewrite() calls are resolved successfully.' ) ;
159
+
160
+ promise_test ( async ( ) => {
161
+ const rewriter = await Rewriter . create ( ) ;
162
+ await Promise . all ( [
163
+ rewriter . rewriteStreaming ( kTestPrompt ) ,
164
+ rewriter . rewriteStreaming ( kTestPrompt )
165
+ ] ) ;
166
+ } , 'Multiple Rewriter.rewriteStreaming() calls are resolved successfully.' ) ;
0 commit comments