@@ -8,16 +8,22 @@ import type * as Protocol from '../../generated/protocol.js';
88import * as Freestyler from './ai_assistance.js' ;
99
1010describe ( 'ChangeManager' , ( ) => {
11- const styleSheetId = '1' as Protocol . CSS . StyleSheetId ;
11+ let styleSheetId = 0 ;
1212 const frameId = '1' as Protocol . Page . FrameId ;
13+ const anotherFrameId = '2' as Protocol . Page . FrameId ;
1314 const agentId = '1' ;
1415
16+ beforeEach ( ( ) => {
17+ styleSheetId = 0 ;
18+ } ) ;
19+
1520 function createModel ( ) {
1621 const cssModel = sinon . createStubInstance ( SDK . CSSModel . CSSModel , {
1722 // @ts -expect-error stub types
18- createInspectorStylesheet : sinon . stub ( ) . callsFake ( ( ) => {
23+ createInspectorStylesheet : sinon . stub ( ) . callsFake ( frameId => {
24+ styleSheetId ++ ;
1925 return new SDK . CSSStyleSheetHeader . CSSStyleSheetHeader ( cssModel , {
20- styleSheetId,
26+ styleSheetId : String ( styleSheetId ) as Protocol . CSS . StyleSheetId ,
2127 frameId,
2228 sourceURL : '' ,
2329 origin : 'inspector' as Protocol . CSS . StyleSheetOrigin ,
@@ -50,9 +56,10 @@ describe('ChangeManager', () => {
5056 } ,
5157 } ) ;
5258 assert ( cssModel . setStyleSheetText . calledOnce ) ;
53- assert . deepEqual ( cssModel . setStyleSheetText . args , [
54- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ,
55- ] ) ;
59+ assert . deepEqual (
60+ cssModel . setStyleSheetText . lastCall . args ,
61+ [ '1' , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ,
62+ ) ;
5663 } ) ;
5764
5865 it ( 'can merge multiple changes with same className' , async ( ) => {
@@ -66,6 +73,10 @@ describe('ChangeManager', () => {
6673 color : 'blue' ,
6774 } ,
6875 } ) ;
76+ assert ( cssModel . setStyleSheetText . calledOnce ) ;
77+ assert . deepEqual (
78+ cssModel . setStyleSheetText . lastCall . args ,
79+ [ '1' , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ) ;
6980 await changeManager . addChange ( cssModel , frameId , {
7081 groupId : agentId ,
7182 selector : 'span' ,
@@ -75,10 +86,9 @@ describe('ChangeManager', () => {
7586 } ,
7687 } ) ;
7788 assert ( cssModel . setStyleSheetText . calledTwice ) ;
78- assert . deepEqual ( cssModel . setStyleSheetText . args , [
79- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ,
80- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: green;\n }\n}' , true ] ,
81- ] ) ;
89+ assert . deepEqual (
90+ cssModel . setStyleSheetText . lastCall . args ,
91+ [ '1' , '.ai-style-change-1 {\n div& {\n color: green;\n }\n}' , true ] ) ;
8292 } ) ;
8393
8494 it ( 'can register multiple changes with the same selector' , async ( ) => {
@@ -95,19 +105,21 @@ describe('ChangeManager', () => {
95105 await changeManager . addChange ( cssModel , frameId , {
96106 groupId : agentId ,
97107 selector : 'div' ,
98- className : 'ai-style-change-1 ' ,
108+ className : 'ai-style-change-2 ' ,
99109 styles : {
100110 color : 'green' ,
101111 } ,
102112 } ) ;
113+
103114 assert ( cssModel . setStyleSheetText . calledTwice ) ;
104- assert . deepEqual ( cssModel . setStyleSheetText . args , [
105- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ,
106- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: green;\n }\n}' , true ] ,
115+ assert . deepEqual ( cssModel . setStyleSheetText . lastCall . args , [
116+ '1' ,
117+ '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}\n.ai-style-change-2 {\n div& {\n color: green;\n }\n}' ,
118+ true
107119 ] ) ;
108120 } ) ;
109121
110- it ( 'can clear changes ' , async ( ) => {
122+ it ( 'creates a stylesheet per frame ' , async ( ) => {
111123 const changeManager = new Freestyler . ChangeManager ( ) ;
112124 const cssModel = createModel ( ) ;
113125 await changeManager . addChange ( cssModel , frameId , {
@@ -119,10 +131,43 @@ describe('ChangeManager', () => {
119131 } ,
120132 } ) ;
121133 assert ( cssModel . setStyleSheetText . calledOnce ) ;
122- assert . deepEqual ( cssModel . setStyleSheetText . args , [
123- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ,
124- ] ) ;
134+ assert . deepEqual (
135+ cssModel . setStyleSheetText . lastCall . args ,
136+ [ '1' , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ) ;
137+
138+ await changeManager . addChange ( cssModel , anotherFrameId , {
139+ groupId : agentId ,
140+ selector : 'div' ,
141+ className : 'ai-style-change-2' ,
142+ styles : {
143+ color : 'green' ,
144+ } ,
145+ } ) ;
146+
147+ assert ( cssModel . setStyleSheetText . calledTwice ) ;
148+ assert . deepEqual (
149+ cssModel . setStyleSheetText . lastCall . args ,
150+ [ '2' , '.ai-style-change-2 {\n div& {\n color: green;\n }\n}' , true ] ) ;
151+ } ) ;
152+
153+ it ( 'can clear changes' , async ( ) => {
154+ const changeManager = new Freestyler . ChangeManager ( ) ;
155+ let cssModel = createModel ( ) ;
156+ await changeManager . addChange ( cssModel , frameId , {
157+ groupId : agentId ,
158+ selector : 'div' ,
159+ className : 'ai-style-change-1' ,
160+ styles : {
161+ color : 'blue' ,
162+ } ,
163+ } ) ;
164+ assert ( cssModel . setStyleSheetText . calledOnce ) ;
165+ assert . deepEqual (
166+ cssModel . setStyleSheetText . lastCall . args ,
167+ [ '1' , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] ,
168+ ) ;
125169 await changeManager . clear ( ) ;
170+ cssModel = createModel ( ) ;
126171 await changeManager . addChange ( cssModel , frameId , {
127172 groupId : agentId ,
128173 selector : 'body' ,
@@ -131,11 +176,11 @@ describe('ChangeManager', () => {
131176 color : 'green' ,
132177 } ,
133178 } ) ;
134- assert ( cssModel . setStyleSheetText . calledTwice ) ;
135- assert . deepEqual ( cssModel . setStyleSheetText . args , [
136- [ styleSheetId , '.ai-style-change-1 {\n div& {\n color: blue;\n }\n}' , true ] , // before clear().
137- [ styleSheetId , '.ai-style-change-1 {\n body& {\n color: green;\n }\n}' , true ] ,
138- ] ) ;
179+ assert ( cssModel . setStyleSheetText . calledOnce ) ;
180+ assert . deepEqual (
181+ cssModel . setStyleSheetText . lastCall . args ,
182+ [ '2' , '.ai-style-change-1 {\n body& {\n color: green;\n }\n}' , true ] ,
183+ ) ;
139184 } ) ;
140185
141186 describe ( 'format changes' , ( ) => {
@@ -153,13 +198,12 @@ describe('ChangeManager', () => {
153198 groupId : agentId ,
154199 selector : 'div' ,
155200 className : 'ai-style-change-1' ,
156- styles : {
157- color : 'blue' ,
158- } ,
201+ styles : { color : 'blue' , 'background-color' : 'green' } ,
159202 } ) ;
160203
161204 assert . strictEqual ( changeManager . formatChanges ( agentId ) , `div {
162205 color: blue;
206+ background-color: green;
163207}` ) ;
164208 } ) ;
165209 } ) ;
0 commit comments