| 
									
										
										
										
											2021-04-29 11:11:32 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Copyright (c) Microsoft Corporation. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-11 13:56:27 -07:00
										 |  |  | import { mergeTests } from '@playwright/test'; | 
					
						
							| 
									
										
										
										
											2022-04-06 13:57:14 -08:00
										 |  |  | import { test } from '@playwright/test'; | 
					
						
							| 
									
										
										
										
											2022-11-03 13:47:51 -07:00
										 |  |  | import type { CommonFixtures, CommonWorkerFixtures } from './commonFixtures'; | 
					
						
							| 
									
										
										
										
											2022-04-06 13:57:14 -08:00
										 |  |  | import { commonFixtures } from './commonFixtures'; | 
					
						
							|  |  |  | import type { ServerFixtures, ServerWorkerOptions } from './serverFixtures'; | 
					
						
							|  |  |  | import { serverFixtures } from './serverFixtures'; | 
					
						
							| 
									
										
											  
											
												feat(test runner): replace declare/define with "options" (#10293)
1. Fixtures defined in test.extend() can now have `{ option: true }` configuration that makes them overridable in the config. Options support all other properties of fixtures - value/function, scope, auto.
```
const test = base.extend<MyOptions>({
  foo: ['default', { option: true }],
});
```
2. test.declare() and project.define are removed.
3. project.use applies overrides to default option values and nothing else. Any test.extend() and test.use() calls take priority over config options.
Required user changes: if someone used to define fixture options with test.extend(), overriding them in config will stop working. The solution is to add `{ option: true }`.
```
// Old code
export const test = base.extend<{ myOption: number, myFixture: number }>({
  myOption: 123,
  myFixture: ({ myOption }, use) => use(2 * myOption),
});
// New code
export const test = base.extend<{ myOption: number, myFixture: number }>({
  myOption: [123, { option: true }],
  myFixture: ({ myOption }, use) => use(2 * myOption),
});
```
											
										 
											2021-11-18 15:45:52 -08:00
										 |  |  | import { platformTest } from './platformFixtures'; | 
					
						
							|  |  |  | import { testModeTest } from './testModeFixtures'; | 
					
						
							| 
									
										
										
										
											2021-10-28 07:31:30 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-03 13:26:30 -07:00
										 |  |  | export const base = test; | 
					
						
							| 
									
										
										
										
											2022-01-05 15:54:00 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-25 14:00:14 -07:00
										 |  |  | export const baseTest = mergeTests(base, platformTest, testModeTest) | 
					
						
							| 
									
										
										
										
											2022-11-03 13:47:51 -07:00
										 |  |  |     .extend<CommonFixtures, CommonWorkerFixtures>(commonFixtures) | 
					
						
							| 
									
										
										
										
											2022-11-10 17:23:57 -08:00
										 |  |  |     .extend<ServerFixtures, ServerWorkerOptions>(serverFixtures); | 
					
						
							| 
									
										
										
										
											2023-03-29 20:43:08 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-23 09:31:30 -07:00
										 |  |  | export function step<This extends Object, Args extends any[], Return>( | 
					
						
							| 
									
										
										
										
											2023-03-29 20:43:08 -07:00
										 |  |  |   target: (this: This, ...args: Args) => Promise<Return>, | 
					
						
							|  |  |  |   context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Promise<Return>> | 
					
						
							|  |  |  | ) { | 
					
						
							|  |  |  |   function replacementMethod(this: This, ...args: Args): Promise<Return> { | 
					
						
							|  |  |  |     const name = this.constructor.name + '.' + (context.name as string) + '(' + args.map(a => JSON.stringify(a)).join(',') + ')'; | 
					
						
							|  |  |  |     return test.step(name, async () => { | 
					
						
							|  |  |  |       return await target.call(this, ...args); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return replacementMethod; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2024-05-31 14:44:26 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | declare global { | 
					
						
							|  |  |  |   interface Window { | 
					
						
							|  |  |  |     builtinSetTimeout: WindowOrWorkerGlobalScope['setTimeout'], | 
					
						
							|  |  |  |     builtinClearTimeout: WindowOrWorkerGlobalScope['setTimeout'], | 
					
						
							|  |  |  |     builtinSetInterval: WindowOrWorkerGlobalScope['setInterval'], | 
					
						
							|  |  |  |     builtinClearInterval: WindowOrWorkerGlobalScope['clearInterval'], | 
					
						
							|  |  |  |     builtinRequestAnimationFrame: AnimationFrameProvider['requestAnimationFrame'], | 
					
						
							|  |  |  |     builtinCancelAnimationFrame: AnimationFrameProvider['cancelAnimationFrame'], | 
					
						
							|  |  |  |     builtinPerformance: WindowOrWorkerGlobalScope['performance'], | 
					
						
							|  |  |  |     builtinDate: typeof Date, | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |