Best JavaScript code snippet using playwright-internal
index.js
Source:index.js
1'use strict'2const { suite } = require('uvu')3const assert = require('uvu/assert')4const jsonDeepMergePatch = require('../index.js')5const testSuite = suite('jsonDeepMergePatch')6const target = {7 firstLevelString: 'string',8 firstLevelNumber: 1,9 firstLevelBoolean: true,10 firstLevelDate: new Date(),11 firstLevelNull: null,12 firstLevelObject: {},13 firstLevelArray: [1],14 firstLevelNestedObject: {15 secondLevelObject: {},16 secondLevelNumber: 2,17 secondLevelNull: null,18 secondLevelNestedObject: {19 thirdLevelObject: {},20 thirdLevelNumber: 3,21 thirdLevelArray: [1, 2, 3],22 thirdLevelNestedObject: {23 fourthLevelObject: {},24 fourthLevelNumber: 425 }26 }27 },28 firstLevelAnotherNestedObject: {29 secondLevelObject: {},30 secondLevelNumber: 2,31 secondLevelNestedObject: {32 thirdLevelObject: {},33 thirdLevelNumber: 3,34 thirdLevelArray: [1, 2, 3],35 thirdLevelNestedObject: {36 fourthLevelObject: {},37 fourthLevelNumber: 4,38 fourthLevelDate: new Date()39 }40 }41 }42}43testSuite('should be a function', () => {44 assert.type(jsonDeepMergePatch, 'function')45})46testSuite('should be RFC 7396 compliant without mutating target', () => {47 const compliantTarget = {48 title: 'Goodbye!',49 author: {50 givenName: 'John',51 familyName: 'Doe'52 },53 tags: ['example', 'sample'],54 content: 'This will be unchanged'55 }56 const compliantPatch = {57 title: 'Hello!',58 phoneNumber: '+01-123-456-7890',59 author: {60 familyName: null61 },62 tags: ['example']63 }64 const expectedResult = {65 title: 'Hello!',66 author: {67 givenName: 'John'68 },69 tags: ['example'],70 content: 'This will be unchanged',71 phoneNumber: '+01-123-456-7890'72 }73 const result = jsonDeepMergePatch(compliantTarget, compliantPatch)74 assert.equal(result, expectedResult)75 assert.equal(compliantTarget, {76 title: 'Goodbye!',77 author: {78 givenName: 'John',79 familyName: 'Doe'80 },81 tags: ['example', 'sample'],82 content: 'This will be unchanged'83 })84})85testSuite('should patch the target without mutating it', () => {86 const date = new Date()87 date.setDate(date.getDate() - 1)88 const patch = {89 firstLevelArray: null,90 firstLevelDate: date,91 firstLevelNumber: 2,92 firstLevelNewString: 'new string',93 firstLevelNestedObject: {94 secondLevelString: 'string',95 secondLevelNestedObject: null96 }97 }98 const result = jsonDeepMergePatch(target, patch)99 assert.type(result.firstLevelArray, 'undefined')100 assert.equal(target.firstLevelArray, [1])101 assert.is(result.firstLevelNumber, 2)102 assert.is(target.firstLevelNumber, 1)103 assert.is(result.firstLevelNewString, patch.firstLevelNewString)104 assert.type(target.firstLevelNewString, 'undefined')105 assert.is(106 result.firstLevelNestedObject.secondLevelString,107 patch.firstLevelNestedObject.secondLevelString108 )109 assert.type(target.firstLevelNestedObject.secondLevelString, 'undefined')110 assert.type(111 result.firstLevelNestedObject.secondLevelNestedObject,112 'undefined'113 )114 assert.type(target.firstLevelNestedObject.secondLevelNestedObject, 'object')115 assert.is(result.firstLevelDate < target.firstLevelDate, true)116 assert.is.not(result.firstLevelDate, patch.firstLevelDate)117 assert.equal(result.firstLevelDate, patch.firstLevelDate)118 patch.firstLevelDate.setDate(date.getDate() + 2)119 assert.is(result.firstLevelDate < target.firstLevelDate, true)120 assert.not.equal(result.firstLevelDate, patch.firstLevelDate)121})122testSuite(123 'should patch a third level property in target without mutating it',124 () => {125 const patch = {126 firstLevelNestedObject: {127 secondLevelNestedObject: {128 thirdLevelNumber: 33129 }130 }131 }132 const result = jsonDeepMergePatch(target, patch)133 assert.is(134 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,135 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber136 )137 assert.is(138 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,139 3140 )141 }142)143testSuite('should go deep to depth = 1 without mutating target', () => {144 const patch = {145 firstLevelNestedObject: {146 secondLevelNestedObject: {147 thirdLevelNumber: 33,148 thirdLevelDate: new Date()149 }150 },151 firstLevelAnotherNestedObject: {152 secondLevelNestedObject: null153 }154 }155 const result = jsonDeepMergePatch(target, patch, { depth: 1 })156 assert.is(157 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,158 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber159 )160 assert.is(161 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,162 3163 )164 assert.type(result.firstLevelNestedObject.secondLevelNumber, 'undefined')165 assert.type(result.firstLevelNestedObject.secondLevelObject, 'undefined')166 assert.is(result.firstLevelNumber, 1)167 assert.is(168 result.firstLevelAnotherNestedObject.secondLevelNestedObject,169 patch.firstLevelAnotherNestedObject.secondLevelNestedObject170 )171})172testSuite('should go deep to depth = 2 without mutating target', () => {173 const patch = {174 firstLevelNestedObject: {175 secondLevelNestedObject: {176 thirdLevelNestedObject: {177 fourthLevelNumber: 44178 }179 }180 },181 firstLevelAnotherNestedObject: {182 secondLevelNestedObject: null183 }184 }185 const result = jsonDeepMergePatch(target, patch, { depth: 2 })186 assert.is(187 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNestedObject188 .fourthLevelNumber,189 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNestedObject190 .fourthLevelNumber191 )192 assert.is(result.firstLevelNestedObject.secondLevelNumber, 2)193 assert.type(194 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,195 'undefined'196 )197 assert.type(198 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelObject,199 'undefined'200 )201 assert.type(202 result.firstLevelAnotherNestedObject.secondLevelNestedObject,203 'undefined'204 )205})206testSuite(207 'should go deep to last level (depth = null, default) without mutating target',208 () => {209 const patch = {210 firstLevelNestedObject: {211 secondLevelNestedObject: {212 thirdLevelNestedObject: {213 fourthLevelNumber: 44,214 fourthLevelDate: new Date()215 }216 }217 },218 firstLevelAnotherNestedObject: {219 secondLevelNestedObject: null220 }221 }222 const result = jsonDeepMergePatch(target, patch)223 assert.is(224 result.firstLevelNestedObject.secondLevelNestedObject225 .thirdLevelNestedObject.fourthLevelNumber,226 patch.firstLevelNestedObject.secondLevelNestedObject227 .thirdLevelNestedObject.fourthLevelNumber228 )229 assert.is(230 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,231 3232 )233 assert.not.type(234 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelObject,235 'undefined'236 )237 assert.type(238 result.firstLevelAnotherNestedObject.secondLevelNestedObject,239 'undefined'240 )241 }242)243testSuite('should keep nulls without mutating target', () => {244 const patch = {245 firstLevelNumber: null,246 firstLevelAnotherNestedObject: {247 secondLevelNestedObject: null248 }249 }250 const result = jsonDeepMergePatch(target, patch, { keepNulls: true })251 assert.is(target.firstLevelNumber, 1)252 assert.is(result.firstLevelNumber, null)253 assert.type(254 target.firstLevelAnotherNestedObject.secondLevelNestedObject,255 'object'256 )257 assert.is(result.firstLevelAnotherNestedObject.secondLevelNestedObject, null)258})259testSuite('should avoid merging invalid props', () => {260 const invalidProp = '__proto__'261 const patch = {262 firstLevelAnotherNestedObject: {263 [invalidProp]: {264 injectProp: 'data'265 }266 }267 }268 const result = jsonDeepMergePatch(target, patch)269 assert.type(270 result.firstLevelAnotherNestedObject[invalidProp].injectProp,271 'undefined'272 )273 assert.type(274 target.firstLevelAnotherNestedObject[invalidProp].injectProp,275 'undefined'276 )277})278testSuite('should replace array with object without mutating target', () => {279 const patch = {280 firstLevelArray: { 2: true }281 }282 const result = jsonDeepMergePatch(target, patch)283 assert.equal(result.firstLevelArray, patch.firstLevelArray)284 assert.equal(target.firstLevelArray, [1])285})286testSuite('should not mutate result and target after mutating patch', () => {287 const patch = {288 firstLevelNestedObject: {289 secondLevelNestedObject: {290 thirdLevelNumber: 33291 }292 }293 }294 const result = jsonDeepMergePatch(target, patch)295 assert.equal(296 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,297 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber298 )299 assert.equal(300 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,301 3302 )303 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber = 333304 assert.is(305 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,306 333307 )308 assert.is(309 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,310 33311 )312 assert.is(313 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,314 3315 )316})317testSuite('should throw if depth is not a whole number or null', () => {318 const patch = {319 firstLevelNestedObject: {320 secondLevelNestedObject: {321 thirdLevelNumber: 33322 }323 }324 }325 assert.throws(326 () => jsonDeepMergePatch(target, patch, { depth: -1 }),327 'Merge level must be a whole number or null.'328 )329 assert.throws(330 () => jsonDeepMergePatch(target, patch, { depth: 'one' }),331 'Merge level must be a whole number or null.'332 )333})334testSuite(335 'should not mutate result and target after mutating patch (array items)',336 () => {337 const patch = {338 firstLevelNestedObject: {339 secondLevelArray: [{ isMutable: false }]340 }341 }342 const result = jsonDeepMergePatch(target, patch)343 assert.is(344 result.firstLevelNestedObject.secondLevelArray[0].isMutable,345 false346 )347 assert.type(target.firstLevelNestedObject.secondLevelArray, 'undefined')348 patch.firstLevelNestedObject.secondLevelArray[0].isMutable = true349 assert.is(350 result.firstLevelNestedObject.secondLevelArray[0].isMutable,351 false352 )353 assert.type(target.firstLevelNestedObject.secondLevelArray, 'undefined')354 }355)356testSuite(357 'should avoid merging invalid props that are deeper than the specified depth without mutating target',358 () => {359 const invalidProp = '__proto__'360 const patch = {361 firstLevelNestedObject: {362 secondLevelNestedObject: {363 [invalidProp]: {364 injectProp: 'data'365 }366 }367 }368 }369 const result = jsonDeepMergePatch(target, patch, { depth: 1 })370 assert.type(371 result.firstLevelNestedObject.secondLevelNestedObject[invalidProp]372 .injectProp,373 'undefined'374 )375 assert.type(376 target.firstLevelNestedObject.secondLevelNestedObject[invalidProp]377 .injectProp,378 'undefined'379 )380 }381)382testSuite(383 'should avoid merging invalid props that are deeper than the specified depth without mutating target',384 () => {385 const invalidProp = '__proto__'386 const patch = {387 firstLevelNestedObject: {388 secondLevelNestedObject: {389 [invalidProp]: {390 injectProp: 'data'391 },392 thirdLevelArray: [3],393 thirdLevelNumber: 3394 },395 secondLevelArray: [2],396 secondLevelNumber: 22397 },398 firstLevelArray: [1],399 firstLevelNumber: 1400 }401 const result = jsonDeepMergePatch(target, patch, { depth: 1 })402 assert.type(403 result.firstLevelNestedObject.secondLevelNestedObject[invalidProp]404 .injectProp,405 'undefined'406 )407 assert.type(408 target.firstLevelNestedObject.secondLevelNestedObject[invalidProp]409 .injectProp,410 'undefined'411 )412 }413)414testSuite('should not mutate result and patch after mutating target', () => {415 const patch = {416 firstLevelNestedObject: {417 secondLevelNestedObject: {418 thirdLevelNumber: 33419 }420 }421 }422 const result = jsonDeepMergePatch(target, patch)423 assert.is(424 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,425 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber426 )427 assert.is(428 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,429 3430 )431 assert.is(432 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,433 3434 )435 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber = 333436 assert.is(437 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,438 33439 )440 assert.is(441 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,442 33443 )444 assert.is(445 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,446 333447 )448 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber = 3449})450testSuite(451 `should not mutate result and patch after mutating target's unpatched props`,452 () => {453 const patch = {454 firstLevelNestedObject: {455 secondLevelNestedObject: {456 thirdLevelNumber: 33457 }458 }459 }460 const result = jsonDeepMergePatch(target, patch, {461 cloneUnpatchedProps: true462 })463 assert.is(464 result.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,465 patch.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber466 )467 assert.is(468 target.firstLevelNestedObject.secondLevelNestedObject.thirdLevelNumber,469 3470 )471 assert.is(472 target.firstLevelAnotherNestedObject.secondLevelNestedObject473 .thirdLevelNumber,474 3475 )476 target.firstLevelAnotherNestedObject.secondLevelNestedObject.thirdLevelNumber = 333477 assert.type(patch.firstLevelAnotherNestedObject, 'undefined')478 assert.is(479 result.firstLevelAnotherNestedObject.secondLevelNestedObject480 .thirdLevelNumber,481 3482 )483 assert.is(484 target.firstLevelAnotherNestedObject.secondLevelNestedObject485 .thirdLevelNumber,486 333487 )488 target.firstLevelAnotherNestedObject.secondLevelNestedObject.thirdLevelNumber = 3489 }490)491testSuite(492 `should not deep merge target's props if patch prop is an empty object`,493 () => {494 const patch = {495 firstLevelAnotherNestedObject: {496 secondLevelNestedObject: {}497 }498 }499 const result = jsonDeepMergePatch(target, patch, {500 cloneUnpatchedProps: false,501 keepNulls: true502 })503 const resultClone = jsonDeepMergePatch(target, patch, {504 cloneUnpatchedProps: true505 })506 assert.equal(507 result.firstLevelAnotherNestedObject.secondLevelNestedObject,508 {}509 )510 assert.equal(511 resultClone.firstLevelAnotherNestedObject.secondLevelNestedObject,512 {}513 )514 assert.not.equal(515 target.firstLevelAnotherNestedObject.secondLevelNestedObject,516 {}517 )518 assert.type(519 result.firstLevelAnotherNestedObject.secondLevelNestedObject520 .thirdLevelNumber,521 'undefined'522 )523 assert.type(524 resultClone.firstLevelAnotherNestedObject.secondLevelNestedObject525 .thirdLevelNumber,526 'undefined'527 )528 assert.is(529 target.firstLevelAnotherNestedObject.secondLevelNestedObject530 .thirdLevelNumber,531 3532 )533 }534)535testSuite(`should return target if patch is an empty object`, () => {536 const result = jsonDeepMergePatch(target, {})537 const resultClone = jsonDeepMergePatch(538 target,539 {},540 { cloneUnpatchedProps: true }541 )542 assert.equal(result, target)543 assert.equal(resultClone, target)544 assert.is(result.firstLevelNestedObject, target.firstLevelNestedObject)545 assert.is.not(546 resultClone.firstLevelNestedObject,547 target.firstLevelNestedObject548 )549})...
diffMerge.test.js
Source:diffMerge.test.js
1'use strict'2const { suite } = require('uvu')3const assert = require('uvu/assert')4const { diffMerge } = require('../../src/utils')5const sinon = require('sinon')6process.env.TEST_ENV = 'test'7const oldConfig = {8 version: 1,9 versionDate: new Date(),10 pattern: /^[0-9]$/,11 server: {12 port: 300013 },14 env: process.env.TEST_ENV,15 db: {16 host: '127.0.0.1',17 port: 5432,18 username: 'postgres'19 },20 modules: {21 auth: {22 token: {23 secret: 'T0p s3cr3T',24 expiresInSeconds: 60 * 60 * 2425 }26 },27 swagger: {28 schemes: ['https']29 }30 }31}32const testSuite = suite('diffMerge')33testSuite('should be a function', () => {34 assert.type(diffMerge, 'function')35})36testSuite(37 'should merge 2 objects and notify about diffs with previous merge',38 () => {39 const newBaseConfig = {40 version: 1,41 // changed42 versionDate: new Date(),43 server: {44 port: 300045 },46 env: process.env.TEST_ENV,47 db: {48 host: '127.0.0.1',49 // changed50 port: 5433,51 // changed52 username: 'postgres_change'53 },54 modules: {55 auth: {56 token: {57 secret: 'T0p s3cr3T',58 expiresInSeconds: 60 * 60 * 2459 }60 },61 swagger: {62 schemes: ['https']63 }64 }65 }66 const newEnvConfig = {67 modules: {68 auth: {69 token: {70 // changed71 expiresInSeconds: 60 * 60 * 1272 }73 },74 swagger: {75 // changed76 schemes: ['http']77 }78 }79 }80 const expectedNewConfig = {81 version: 1,82 versionDate: newBaseConfig.versionDate,83 server: {84 port: 300085 },86 env: process.env.TEST_ENV,87 db: {88 host: '127.0.0.1',89 port: 5433,90 username: 'postgres_change'91 },92 modules: {93 auth: {94 token: {95 secret: 'T0p s3cr3T',96 expiresInSeconds: 60 * 60 * 1297 }98 },99 swagger: {100 schemes: ['http']101 }102 }103 }104 const changesMade = 5105 const changeHandler = sinon.fake()106 const newConfig = diffMerge(107 newBaseConfig,108 newEnvConfig,109 oldConfig,110 changeHandler111 )112 assert.equal(expectedNewConfig, newConfig)113 assert.is(changeHandler.callCount, changesMade)114 assert.is(115 changeHandler.calledWith(116 'versionDate',117 expectedNewConfig.versionDate,118 oldConfig.versionDate119 ),120 true121 )122 assert.is(123 changeHandler.calledWith(124 'db.port',125 expectedNewConfig.db.port,126 oldConfig.db.port127 ),128 true129 )130 assert.is(131 changeHandler.calledWith(132 'db.username',133 expectedNewConfig.db.username,134 oldConfig.db.username135 ),136 true137 )138 assert.is(139 changeHandler.calledWith(140 'db.username',141 expectedNewConfig.db.username,142 oldConfig.db.username143 ),144 true145 )146 assert.is(147 changeHandler.calledWith(148 'modules.auth.token.expiresInSeconds',149 expectedNewConfig.modules.auth.token.expiresInSeconds,150 oldConfig.modules.auth.token.expiresInSeconds151 ),152 true153 )154 assert.is(155 changeHandler.calledWith(156 'modules.swagger.schemes',157 expectedNewConfig.modules.swagger.schemes,158 oldConfig.modules.swagger.schemes159 ),160 true161 )162 }163)164testSuite('should clone object', () => {165 const newEnvConfig = {166 testArrObj: [167 {168 k: 'v',169 d: new Date(),170 p: /^[0-9]$/,171 a: [1, 2],172 o: { k1: 'v1' },173 n: null174 },175 new Date(),176 /^[0-9]$/,177 [1]178 ],179 modules: {180 auth: {181 token: {182 // changed183 expiresInSeconds: 60 * 60 * 12184 }185 },186 swagger: {187 // changed188 schemes: ['http']189 }190 }191 }192 const clonedEnvConfig = diffMerge(newEnvConfig)193 assert.equal(clonedEnvConfig, newEnvConfig)194 assert.is.not(clonedEnvConfig, newEnvConfig)195 assert.is.not(clonedEnvConfig.testArrObj, newEnvConfig.testArrObj)196 assert.is.not(clonedEnvConfig.testArrObj[0], newEnvConfig.testArrObj[0])197 assert.is.not(clonedEnvConfig.modules, newEnvConfig.modules)198 assert.is.not(clonedEnvConfig.modules.auth, newEnvConfig.modules.auth)199 assert.is.not(200 clonedEnvConfig.modules.auth.token,201 newEnvConfig.modules.auth.token202 )203 assert.is.not(clonedEnvConfig.modules.swagger, newEnvConfig.modules.swagger)204 assert.is.not(205 clonedEnvConfig.modules.swagger.schemes,206 newEnvConfig.modules.swagger.schemes207 )208})209testSuite('should clone array', () => {210 const newEnvConfigs = [{ k: 'v' }, { k1: 'v1' }]211 const clonedEnvConfigs = diffMerge(newEnvConfigs)212 assert.equal(clonedEnvConfigs, newEnvConfigs)213 assert.is.not(clonedEnvConfigs, newEnvConfigs)214 assert.is.not(clonedEnvConfigs[0], newEnvConfigs[0])215 assert.is.not(clonedEnvConfigs[1], newEnvConfigs[1])216})217testSuite('should return patch if target is null', () => {218 const target = null219 const patch = { k: 'v' }220 const result = diffMerge(target, patch)221 assert.equal(result, patch)222 assert.is(target, null)223})224testSuite('should not run change handler', () => {225 const changeHandler = sinon.fake()226 diffMerge([1], [2], {}, changeHandler)227 assert.is(changeHandler.callCount, 0)228})229testSuite('should avoid merging invalid props', () => {230 const invalidProp = '__proto__'231 const patch = {232 arr: [233 {234 k: 'v',235 [invalidProp]: {236 injectProp: 'data'237 }238 }239 ],240 [invalidProp]: {241 injectProp: 'data'242 }243 }244 const target = {}245 const result = diffMerge(target, patch)246 assert.type(result[invalidProp].injectProp, 'undefined')247 assert.type(target[invalidProp].injectProp, 'undefined')248 assert.not.type(result.arr, 'undefined')249 assert.type(result.arr[0][invalidProp].injectProp, 'undefined')250 assert.type(target.arr, 'undefined')251 assert.is(result.arr[0].k, 'v')252})253testSuite(254 `should not merge target's props if patch prop is an empty object`,255 () => {256 const patch = {257 modules: {258 auth: {}259 }260 }261 const result = diffMerge(oldConfig, patch)262 assert.equal(result.modules.auth, {})263 assert.type(result.modules.auth.token, 'undefined')264 assert.type(oldConfig.modules.auth.token, 'object')265 }266)...
test_connectHOC.js
Source:test_connectHOC.js
...28 ) {29 return <Component {...props} foo={42} />;30 };31 }32 const Decorated = injectProp(Connected);33 // OK without `foo`34 <Decorated bar="str" />;35 // OK with a not needed `foo`36 <Decorated foo={42} bar="str" />;37 //$FlowExpectedError[prop-missing] property `bar` is missing in props [3] but exists in `Props` [4]38 <Decorated />;39 e.push(Decorated);40}41function composeWithOtherHOC_OK() {42 type OwnProps = {43 own1: number,44 injected1: string,45 ...46 };...
PartyPlayerPage.js
Source:PartyPlayerPage.js
...138 </IfElse>139 );140 }141}...
inject.js
Source:inject.js
...8 Object.defineProperty(target, key, {[`${propName}`]: value} )9 }10 }11}12function injectProp(ctx, name) {13 let prop = makeProp(ctx, 'value')14 prop.getter = makeProp(ctx, 'get')15 prop.setter = makeProp(ctx, 'set')16 prop(name || 'ctx', ctx)17 prop('prop', prop)18}19function injectPromise ({prop}) {20 prop({21 resolve: Promise.resolve.bind(Promise),22 reject: Promise.reject.bind(Promise),23 all: Promise.all.bind(Promise),24 then: (fn, fail) => {25 return new Promise(fn, fail)26 },27 })28}29function injectState({prop, resolve}) {30 let state = {}31 prop.getter('state', ()=>state)32 prop('setState', (...args)=>{33 switch (args.length) {34 case 0:35 return resolve(state)36 case 1:37 if (Array.isArray(args[0])) {38 args = args[0]39 } else {40 return resolve(state = {...state, ...args[0]})41 }42 }43 args.push(state)44 return resolve(state = Object.assign.apply(state, args))45 })46 prop('replaceState', (newState)=>{47 return resolve(state = newState || {})48 })49}50export default (target)=> {51 injectProp(target)52 injectPromise(target)53 injectState(target)...
config.js
Source:config.js
...12class Config {13 constructor(opts = {}) {14 this._opts = opts;15 this._init_();16 this.injectProp();17 this._opts.session = { ...session,18 ...this.get('session') || {}19 };20 }21 _init_() {}22 injectProp() {23 const self = this;24 const cfgs = this._opts;25 if (!cfgs) return;26 Object.keys(cfgs).forEach(field => {27 const cfg = cfgs[field];28 Object.defineProperty(self, field, {29 value: cfg,30 enumerable: true31 });32 });33 }34 get options() {35 return this._opts;36 }...
MyEnhancedComponent.js
Source:MyEnhancedComponent.js
...15 console.log('MyComponent: props', this.props)16 return <p>MyComponent</p>17 }18}19const MyEnhancedComponent = injectProp(MyComponent);...
injectProp.js
Source:injectProp.js
1import React from 'react';2const injectProp = injectedProps => Component => {3 class InjectProp extends React.Component {4 render() {5 const newProps = { ...injectedProps, ...this.props };6 return <Component {...newProps} />;7 }8 }9 return InjectProp;10};...
Using AI Code Generation
1const { injectProp } = require('playwright/lib/internal/injected/injectedScript');2const { injectProp } = require('playwright/lib/internal/injected/injectedScript');3const { injectProp } = require('playwright/lib/internal/injected/injectedScript');4const { injectProp } = require('playwright/lib/internal/injected/injectedScript');5const { injectProp } = require('playwright/lib/internal/injected/injectedScript');6const { injectProp } = require('playwright/lib/internal/injected/injectedScript');7const { injectProp } = require('playwright/lib/internal/injected/injectedScript');8const { injectProp } = require('playwright/lib/internal/injected/injectedScript');9const { injectProp } = require('playwright/lib/internal/injected/injectedScript');10const { injectProp } = require('playwright/lib/internal/injected/injectedScript');11const { injectProp } = require('playwright/lib/internal/injected/injectedScript');
Using AI Code Generation
1const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');2const { contextBridge } = require('electron');3contextBridge.exposeInMainWorld('playwright', {4});5const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');6const { contextBridge } = require('electron');7contextBridge.exposeInMainWorld('playwright', {8});9const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');10const { contextBridge } = require('electron');11contextBridge.exposeInMainWorld('playwright', {12});13const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');14const { contextBridge } = require('electron');15contextBridge.exposeInMainWorld('playwright', {16});17const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');18const { contextBridge } = require('electron');19contextBridge.exposeInMainWorld('playwright', {20});21const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');22const { contextBridge } = require('electron');23contextBridge.exposeInMainWorld('playwright', {24});25const { injectProp } = require('@playwright/test/lib/server/injected/injectedScript');26const { contextBridge } = require('electron');27contextBridge.exposeInMainWorld('playwright', {28});29const { injectProp } = require
Using AI Code Generation
1const { injectProp } = require('playwright/lib/server/injected/injectedScript');2const { contextBridge } = require('electron');3contextBridge.exposeInMainWorld('playwright', {4});5const { contextBridge } = require('electron');6contextBridge.exposeInMainWorld('playwright', {7 injectProp: (win, prop, value) => win.webContents.executeJavaScript(`window.playwright.injectProp(${JSON.stringify(prop)}, ${JSON.stringify(value)})`)8});9const { app, BrowserWindow } = require('electron');10const path = require('path');11function createWindow () {12 const win = new BrowserWindow({13 webPreferences: {14 preload: path.join(__dirname, 'preload.js'),15 }16 })17 win.loadFile('test.html');18}19app.whenReady().then(() => {20 createWindow()21})22 window.playwright.injectProp('window.electron', 'Hello Electron');23const { app, BrowserWindow } = require('electron');24const path = require('path');25const { Electron } = require('playwright-electron');26function createWindow () {27 const win = new BrowserWindow({28 webPreferences: {29 preload: path.join(__dirname, 'preload.js'),30 }31 })32 win.loadFile('test.html');33}34app.whenReady().then(() => {35 createWindow()36})37 window.playwright.injectProp('window.electron', 'Hello Electron');38const {
Using AI Code Generation
1const { injectProp } = require('@playwright/test/lib/server/injectedScript');2const { createPageInNewContext } = require('@playwright/test/lib/server/browserContext');3const { createPage } = require('@playwright/test/lib/server/page');4const { createFrame } = require('@playwright/test/lib/server/frame');5const { injectProp } = require('@playwright/test/lib/server/injectedScript');6const { createPageInNewContext } = require('@playwright/test/lib/server/browserContext');7const { createPage } = require('@playwright/test/lib/server/page');8const { createFrame } = require('@playwright/test/lib/server/frame');9const { injectProp } = require('@playwright/test/lib/server/injectedScript');10const { createPageInNewContext } = require('@playwright/test/lib/server/browserContext');11const { createPage } = require('@playwright/test/lib/server/page');12const { createFrame } = require('@playwright/test/lib/server/frame');13const { injectProp } = require('@playwright/test/lib/server/injectedScript');14const { createPageInNewContext } = require('@playwright/test/lib/server/browserContext');15const { createPage } = require('@playwright/test/lib/server/page');16const { createFrame } = require('@playwright/test/lib/server/frame');17const { injectProp } = require('@playwright/test/lib/server/injectedScript');18const { createPageInNewContext } = require('@playwright/test/lib/server/browserContext');19const { createPage } = require('@playwright/test/lib/server/page');20const { createFrame } = require('@playwright/test/lib/server/frame');21const { injectProp } = require('@playwright/test/lib/server/injectedScript');22const { createPageInNewContext } = require('@playwright/test/lib/server/browserContext');23const { createPage } = require('@playwright/test/lib/server/page');24const { createFrame } = require('@playwright/test/lib/server/frame');25const { injectProp } = require('@playwright/test/lib/server/injectedScript');26const { createPageInNew
Using AI Code Generation
1const { injectProp } = require('playwright/lib/client/injectedScript');2injectProp('test', 'test');3const { injectMethod } = require('playwright/lib/client/injectedScript');4injectMethod('test', function() {5 return 'test';6});7const { injectFunction } = require('playwright/lib/client/injectedScript');8injectFunction('test', function() {9 return 'test';10});11const { injectScript } = require('playwright/lib/client/injectedScript');12injectScript('test', 'test');13const { injectStylesheet } = require('playwright/lib/client/injectedScript');14injectStylesheet('test', 'test');15const { injectModule } = require('playwright/lib/client/injectedScript');16injectModule('test', 'test');17const { injectScriptToMain } = require('playwright/lib/client/injectedScript');18injectScriptToMain('test', 'test');
Using AI Code Generation
1const { injectProp } = require('playwright/lib/server/injected/injectedScript');2injectProp('window', 'myProp', 'myValue');3injectProp(target, name, value)4const { injectProp } = require('playwright/lib/server/injected/injectedScript');5injectProp('window', 'myProp', 'myValue');6[MIT](LICENSE)
Using AI Code Generation
1const {chromium} = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.exposeBinding('test', (source, ...args) => {7 console.log('test', args);8 });9 await page.evaluate(() => {10 window.test('hello', 'world');11 });12 await browser.close();13})();14import {chromium} from 'playwright';15(async () => {16 const browser = await chromium.launch();17 const context = await browser.newContext();18 const page = await context.newPage();19 await page.exposeBinding('test', (source, ...args) => {20 console.log('test', args);21 });22 await page.evaluate(() => {23 window.test('hello', 'world');24 });25 await browser.close();26})();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false, slowMo: 50 });4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.injectProp('myProp', {7 click: async () => await page.click('text="Gmail"'),8 getText: async () => await page.textContent('text="Gmail"'),9 });10 await page.evaluate(() => myProp.click());11 console.log(await page.evaluate(() => myProp.getText()));12 await browser.close();13})();
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!