Best JavaScript code snippet using playwright-internal
datasource.js
Source:datasource.js
...80 it('should be able to retrieve data', function () {81 var ds = datasource.create(scope, scope.loadOptions);82 // load data83 $rootScope.$digest();84 $timeout.flush();85 $httpBackend.flush();86 $rootScope.$digest();87 expect(ds.data).toEqual(sampleData);88 });89 it('should cancel data request if scope is destroyed', function () {90 scope.loadOptions.autoLoad = false;91 var ds = datasource.create(scope, scope.loadOptions);92 // should not do anything until there is a request to cancel93 scope.$broadcast('$destroy');94 $rootScope.$digest();95 expect($httpBackend.flush).toThrow();96 ds.loadData();97 // load data98 $rootScope.$digest();99 $timeout.flush();100 scope.$broadcast('$destroy');101 $rootScope.$digest();102 expect($httpBackend.flush).toThrow();103 expect(ds.data).toEqual([]);104 scope.$broadcast('$destroy');105 $rootScope.$digest();106 });107 it('should be able to retrieve data asyncronously', function () {108 scope.loadOptions = {109 request: { url: '/sampleAsyncData' }110 };111 var ds = datasource.create(scope, scope.loadOptions);112 // load data113 $rootScope.$digest();114 $timeout.flush();115 $httpBackend.flush();116 $rootScope.$digest();117 $timeout.flush();118 $httpBackend.flush();119 ds.pause();120 $rootScope.$digest();121 $timeout.flush();122 $httpBackend.flush();123 // first two records should be in the data at this point124 expect(ds.data).toEqual([sampleData[0], sampleData[1]]);125 // puase will have occured before the first records data is moved to the view126 expect(ds.viewData).toEqual([]);127 ds.resume();128 $rootScope.$digest();129 $timeout.flush();130 $httpBackend.flush();131 // data should be moved to view at this point132 expect(ds.viewData).toEqual([sampleData[0], sampleData[1]]);133 // data should be one step ahead of view this cycle (won't be moved to view till next timeout)134 expect(ds.data).toEqual([sampleData[0], sampleData[1], sampleData[2]]);135 $rootScope.$digest();136 $timeout.flush();137 expect(ds.viewData).toEqual([sampleData[0], sampleData[1], sampleData[2]]);138 $httpBackend.flush();139 $timeout.flush();140 expect(ds.data).toEqual(sampleData);141 expect(ds.viewData).toEqual(sampleData);142 });143 it('should be able to pause and resume async data loading', function () {144 scope.loadOptions = {145 request: { url: '/sampleAsyncData' }146 };147 var ds = datasource.create(scope, scope.loadOptions);148 // load data149 $rootScope.$digest();150 $timeout.flush();151 $httpBackend.flush();152 $rootScope.$digest();153 $timeout.flush();154 $httpBackend.flush();155 $rootScope.$digest();156 $timeout.flush();157 $httpBackend.flush();158 // first two rows should be loaded + 3rd row pending159 $rootScope.$digest();160 $timeout.flush();161 ds.pause();162 expect(ds.viewData).toEqual( [ sampleData[0], sampleData[1] ] );163 $httpBackend.flush();164 $rootScope.$digest();165 $timeout.flush();166 $httpBackend.flush();167 expect(ds.viewData).toEqual( [ sampleData[0], sampleData[1] ] );168 ds.resume();169 $rootScope.$digest();170 $timeout.flush();171 expect(ds.viewData).toEqual(sampleData);172 });173 it('should update the data even if no records are returned (and thus no notify events)', function () {174 var ds = datasource.create(scope, scope.loadOptions);175 // load data176 $rootScope.$digest();177 $timeout.flush();178 $httpBackend.flush();179 expect(ds.data).toEqual(sampleData);180 scope.loadOptions.request.url = '/noData';181 $rootScope.$digest();182 $timeout.flush();183 $httpBackend.flush();184 expect(ds.data).toEqual([]);185 });186 it('should set loading flag correctly', function () {187 var ds = datasource.create(scope, scope.loadOptions);188 expect(ds.bLoading).toBe(false);189 $rootScope.$digest();190 $timeout.flush();191 expect(ds.bLoading).toBe(true);192 // complete loading data193 $httpBackend.flush();194 $timeout.flush();195 expect(ds.bLoading).toBe(false);196 expect(ds.data).toEqual(sampleData);197 });198 it('should be able to filter the data', function(){199 scope.loadOptions.filter = scope.filter;200 var ds = datasource.create(scope, scope.loadOptions);201 scope.filter.values.name = 'bob';202 // load data203 $rootScope.$digest();204 $timeout.flush();205 $httpBackend.flush();206 // process filter207 $timeout.flush();208 expect(ds.viewData).toEqual([209 { name: 'bob smith', someId: 7, otherField: 'x'},210 { name: 'bob jones', someId: 9, otherField: 'a'}211 ]);212 });213 it('should only filter the view data when the datasource is paused', function(){214 scope.loadOptions.filter = scope.filter;215 var ds = datasource.create(scope, scope.loadOptions);216 scope.filter.values.name = 'bob';217 // load data218 $rootScope.$digest();219 $timeout.flush();220 $httpBackend.flush();221 // process filter222 $timeout.flush();223 expect(ds.viewData).toEqual([224 { name: 'bob smith', someId: 7, otherField: 'x'},225 { name: 'bob jones', someId: 9, otherField: 'a'}226 ]);227 ds.pause();228 scope.filter.values.name = 'i';229 $rootScope.$digest();230 $timeout.flush();231 expect(ds.viewData).toEqual([232 { name: 'bob smith', someId: 7, otherField: 'x'}233 ]);234 });235 it('should filter results if the filter data changes', function(){236 scope.loadOptions.filter = scope.filter;237 var ds = datasource.create(scope, scope.loadOptions);238 scope.filter.values.name = 'bob';239 // load data240 $rootScope.$digest();241 $timeout.flush();242 $httpBackend.flush();243 // process filter244 $timeout.flush();245 expect(ds.viewData).toEqual([246 { name: 'bob smith', someId: 7, otherField: 'x'},247 { name: 'bob jones', someId: 9, otherField: 'a'}248 ]);249 scope.filter.values.name = 'mary';250 $rootScope.$digest();251 $timeout.flush();252 expect(ds.viewData).toEqual([253 { name : 'elsbith maryface', someId : 5, otherField : 'b' }254 ]);255 });256 it('should filter results only if the optional filter valid expression evaluates to true', function(){257 scope.loadOptions.filter = scope.filter;258 scope.loadOptions.filterValid = 'isFilterValid';259 var ds = datasource.create(scope, scope.loadOptions);260 scope.filter.values.name = 'bob';261 scope.isFilterValid = true;262 $rootScope.$digest();263 $timeout.flush();264 $httpBackend.flush();265 $timeout.flush();266 // expect initial data to be loaded. this is the only load request...267 expect(ds.viewData).toEqual([268 { name: 'bob smith', someId: 7, otherField: 'x'},269 { name: 'bob jones', someId: 9, otherField: 'a'}270 ]);271 scope.isFilterValid = false;272 scope.filter.values.name = 'mary';273 $rootScope.$digest();274 expect(ds.viewData).toEqual([275 { name: 'bob smith', someId: 7, otherField: 'x'},276 { name: 'bob jones', someId: 9, otherField: 'a'}277 ]);278 scope.isFilterValid = true;279 $rootScope.$digest();280 $timeout.flush();281 expect(ds.viewData).toEqual([282 { name : 'elsbith maryface', someId : 5, otherField : 'b' }283 ]);284 });285 it('should request new data if filter options/params change', function(){286 scope.loadOptions.filter = scope.filter;287 scope.loadOptions.request.url = '/simple/2';288 scope.loadOptions.request.params = { foo: 'bar' };289 var ds = datasource.create(scope, scope.loadOptions);290 expect(ds.data).toEqual([]);291 // load data292 $rootScope.$digest();293 $timeout.flush();294 $httpBackend.flush();295 expect(ds.data).toEqual(data2);296 scope.loadOptions.request.url = '/simple';297 delete scope.loadOptions.request.params;298 $rootScope.$digest();299 $timeout.flush();300 $httpBackend.flush();301 expect(ds.data).toEqual(sampleData);302 });303 it('should not request new data if filter options/params change and update is set to manual request only', function(){304 scope.loadOptions.autoLoad = false;305 // this will trigger param change refresh306 scope.loadOptions.request.params = {id: 37};307 // this will trigger request option change request + filter okay request308 var ds = datasource.create(scope, scope.loadOptions);309 // load data310 $rootScope.$digest();311 // should not be any data loads triggered312 expect($timeout.flush).toThrow();313 expect($httpBackend.flush).toThrow();314 // should not have loaded any data yet...315 expect(ds.data).toEqual([]);316 // remove param as it isn't configured to return data317 delete scope.loadOptions.request.params;318 scope.$digest();319 // param change shouldn't of trigger a load320 expect($timeout.flush).toThrow();321 expect($httpBackend.flush).toThrow();322 // manually load data...323 ds.loadData();324 $rootScope.$digest();325 $timeout.flush();326 $httpBackend.flush();327 // should now have the data328 expect(ds.data).toEqual(sampleData);329 });330 it('should not request data until the optional requestValidExpr is truthy', function(){331 scope.bValid = false;332 scope.loadOptions.request.url = '/simple/2';333 scope.loadOptions.request.params = { foo: 'bar'};334 scope.loadOptions.requestValid = 'bValid';335 var ds = datasource.create(scope, scope.loadOptions);336 // load data337 $rootScope.$digest();338 expect($httpBackend.flush).toThrow();339 scope.loadOptions.request.params.foo = 'bar2';340 $rootScope.$digest();341 scope.loadOptions.request.url = '/simple';342 delete scope.loadOptions.request.params;343 $rootScope.$digest();344 $timeout.flush();345 expect($httpBackend.flush).toThrow();346 ds.loadData();347 $timeout.flush();348 $rootScope.$digest();349 expect($httpBackend.flush).toThrow();350 scope.bValid = true;351 $rootScope.$digest();352 $timeout.flush();353 $httpBackend.flush();354 expect(ds.data).toEqual(sampleData);355 });356 it('should cancel the first request if another request is made before it completes', function(){357 scope.loadOptions.request.url = '/simple/2';358 scope.loadOptions.request.params = {359 foo: 'bar'360 };361 scope.ds = datasource.create(scope, scope.loadOptions);362 var updateCount = 0;363 var data = [];364 scope.$watchCollection('ds.data', function(newData){365 if (!angular.equals(newData,data)) {366 updateCount++;367 }368 });369 // load data370 $rootScope.$digest();371 $timeout.flush();372 scope.loadOptions.request.url = '/simple';373 delete scope.loadOptions.request.params;374 $rootScope.$digest();375 $timeout.flush();376 $httpBackend.flush();377 // check data is correct378 expect(scope.ds.data).toEqual(sampleData);379 // check two requests madce380 expect($http.calls.count()).toBe(2);381 // check data was only updated once382 expect(updateCount).toBe(1);383 // check nothing outstanding happens in afterEach()384 });385 it('should not start the second request if another identical request is made before it completes', function(){386 var updateCount = 0;387 var data = [];388 scope.$watchCollection('ds.data', function(newData){389 if (!angular.equals(newData,data)) {390 updateCount++;391 }392 });393 scope.ds = datasource.create(scope, scope.loadOptions);394 // load data395 $rootScope.$digest();396 $timeout.flush();397 scope.ds.loadData();398 $rootScope.$digest();399 $timeout.flush();400 $httpBackend.flush();401 // check data is correct402 expect(scope.ds.data).toEqual(sampleData);403 // check only one request was made404 expect($http.calls.count()).toBe(1);405 // check data was only updated once406 expect(updateCount).toBe(1);407 // check nothing outstanding happens in afterEach()408 });409 it('should be able to paginate the data', function(){410 scope.loadOptions.pagination = {411 perPage: 2412 };413 var ds = datasource.create(scope, scope.loadOptions);414 // load data415 $rootScope.$digest();416 $timeout.flush();417 $httpBackend.flush();418 $timeout.flush();419 expect(ds.data).toEqual(sampleData);420 // digest here to make sure filter/watcher is setup before data loaded421 ds.setPage(2);422 $rootScope.$digest();423 expect(ds.pageData).toEqual([424 { name: 'bob jones', someId: 9, otherField: 'a'},425 { name: 'elsbith maryface', someId: 5, otherField: 'b'}426 ]);427 expect(ds.pages).toBe(2);428 expect(ds.currentPage).toBe(2);429 // change the page430 ds.setPage(1);431 $rootScope.$digest();432 expect(ds.pageData).toEqual([433 { name: 'bob smith', someId: 7, otherField: 'x'},434 { name: 'dave ham', someId: 8, otherField: 'y'}435 ]);436 });437 it('should keep the current page within the bounds', function(){438 scope.loadOptions.pagination = {439 perPage: 2440 };441 var ds = datasource.create(scope, scope.loadOptions);442 // load data443 $rootScope.$digest();444 // should set current page to 0 initially as no data will be loaded445 expect(ds.currentPage).toBe(0);446 $timeout.flush(); // get data timeout447 $httpBackend.flush();448 $timeout.flush(); // apply filter timeout449 expect(ds.viewData).toEqual(sampleData);450 // set current page too high451 ds.setPage(4);452 $rootScope.$digest();453 expect(ds.currentPage).toBe(2);454 // set current page too low455 ds.setPage(-3);456 $rootScope.$digest();457 expect(ds.currentPage).toBe(1);458 });459 it('should sort the data if a sort function is provided', function(){460 var ds = datasource.create(scope, scope.loadOptions);461 ds.sortFunction = function(a) {462 return (a.name.toLowerCase());463 };464 // load data465 $rootScope.$digest();466 $timeout.flush();467 $httpBackend.flush();468 expect(ds.data).toEqual([469 { name: 'bob jones', someId: 9, otherField: 'a'},470 { name: 'bob smith', someId: 7, otherField: 'x'},471 { name: 'dave ham', someId: 8, otherField: 'y'},472 { name: 'elsbith maryface', someId: 5, otherField: 'b'}473 ]);474 });475 it('should reverse the order of the data if datasource.sortOrder is DESC', function(){476 var ds = datasource.create(scope, scope.loadOptions);477 ds.sortFunction = function(a) {478 return (a.name.toLowerCase());479 };480 // load data481 $rootScope.$digest();482 $timeout.flush();483 $httpBackend.flush();484 expect(ds.data).toEqual([485 { name: 'bob jones', someId: 9, otherField: 'a'},486 { name: 'bob smith', someId: 7, otherField: 'x'},487 { name: 'dave ham', someId: 8, otherField: 'y'},488 { name: 'elsbith maryface', someId: 5, otherField: 'b'}489 ]);490 ds.sortOrder = 'DESC';491 // load data492 $rootScope.$digest();493 expect(ds.data).toEqual([494 { name: 'elsbith maryface', someId: 5, otherField: 'b'},495 { name: 'dave ham', someId: 8, otherField: 'y'},496 { name: 'bob smith', someId: 7, otherField: 'x'},497 { name: 'bob jones', someId: 9, otherField: 'a'}498 ]);499 });500 it('should resort the data if the sort function changes', function(){501 var ds = datasource.create(scope, scope.loadOptions);502 ds.sortFunction = function(a) {503 return (a.name.toLowerCase());504 };505 ds.loadData();506 // load data507 $rootScope.$digest();508 $timeout.flush();509 $httpBackend.flush();510 expect(ds.data).toEqual([511 { name: 'bob jones', someId: 9, otherField: 'a'},512 { name: 'bob smith', someId: 7, otherField: 'x'},513 { name: 'dave ham', someId: 8, otherField: 'y'},514 { name: 'elsbith maryface', someId: 5, otherField: 'b'}515 ]);516 ds.sortFunction = function(a) {517 return (a.someId);518 };519 $rootScope.$digest();520 $timeout.flush();521 // this should not have caused a new request to the backend522 expect($httpBackend.flush).toThrow();523 expect(ds.data).toEqual([524 { name: 'elsbith maryface', someId: 5, otherField: 'b'},525 { name: 'bob smith', someId: 7, otherField: 'x'},526 { name: 'dave ham', someId: 8, otherField: 'y'},527 { name: 'bob jones', someId: 9, otherField: 'a'}528 ]);529 });530 // sampleData = [531 // { name: 'bob smith', someId: 7, otherField: 'x'},532 // { name: 'dave ham', someId: 8, otherField: 'y'},533 // { name: 'bob jones', someId: 9, otherField: 'a'},534 // { name: 'elsbith maryface', someId: 5, otherField: 'b'}535 // ];536 it('should be able to sort the data during async data loading', function () {537 scope.loadOptions = {538 request: { url: '/sampleAsyncData' }539 };540 var ds = datasource.create(scope, scope.loadOptions);541 ds.sortFunction = function(a) {542 return (a.name.toLowerCase());543 };544 // load data545 $rootScope.$digest();546 $timeout.flush();547 $httpBackend.flush();548 $rootScope.$digest();549 $timeout.flush();550 $httpBackend.flush();551 ds.sortOrder = 'DESC';552 $rootScope.$digest();553 $timeout.flush();554 $httpBackend.flush();555 // first two rows should be loaded + 3rd row pending556 $rootScope.$digest();557 $timeout.flush();558 ds.pause();559 expect(ds.viewData).toEqual( [ sampleData[1], sampleData[0] ] );560 ds.sortFunction = function(a) {561 return (a.someId);562 };563 $rootScope.$digest();564 expect(ds.viewData).toEqual( [ sampleData[1], sampleData[0] ] );565 ds.sortOrder = 'ASC';566 ds.sortFunction = function(a) {567 return (a.name.toLowerCase());568 };569 expect(ds.viewData).toEqual( [ sampleData[1], sampleData[0] ] );570 $httpBackend.flush();571 $rootScope.$digest();572 ds.resume();573 $timeout.flush();574 $httpBackend.flush();575 expect(ds.viewData).toEqual( [ sampleData[2], sampleData[0], sampleData[1] ] );576 $rootScope.$digest();577 $timeout.flush();578 expect(ds.viewData).toEqual( [ sampleData[2], sampleData[0], sampleData[1], sampleData[3] ] );579 });580 it('should be able to execute a function after data is loaded', function () {581 var complete = false;582 scope.loadOptions.onLoadComplete = function(){583 complete = true;584 };585 var ds = datasource.create(scope, scope.loadOptions);586 // load data587 $rootScope.$digest();588 $timeout.flush();589 $httpBackend.flush();590 // data isn't filtered/paged until next digest cycle, then function should be executed591 $timeout.flush();592 expect(ds.data).toEqual(sampleData);593 expect(complete).toEqual(true);594 });595 describe('trigger row reload function', function(){596 var ds;597 beforeEach(function(){598 scope.loadOptions.requestRowFunction = jasmine.createSpy('request row function');599 ds = datasource.create(scope, scope.loadOptions);600 // make the names sorted by alpha601 ds.sortFunction = function(a) {602 return (a.name.toLowerCase());603 };604 // load data605 $rootScope.$digest();606 $timeout.flush();607 $httpBackend.flush();608 $timeout.flush();609 });610 it('should be able to reload a single row and reapply sort/pagination', function () {611 scope.loadOptions.requestRowFunction.and.callFake(function(row){612 row.name = 'a ' + row.name + ' the first of his name';613 return row;614 });615 var match = angular.copy(sampleData[1]);616 ds.triggerRowReload(match);617 // digest + flush timeout to allow new sorting618 $rootScope.$digest();619 $timeout.flush();620 expect(scope.loadOptions.requestRowFunction).toHaveBeenCalledWith(match);621 expect(ds.viewData[0].name).toBe('a ' + sampleData[1].name + ' the first of his name');622 expect(ds.viewData[2].name).toBe('bob smith');623 });624 it('should be able to add a new row to the dataset if reload is triggered on an unknown row', function () {625 scope.loadOptions.requestRowFunction.and.callFake(_.identity);626 var match = { name: 'aardvarky albertson', someId: 11, otherField: 'f'};627 ds.triggerRowReload(match);628 // digest + flush timeout to allow new sorting629 $rootScope.$digest();630 $timeout.flush();631 expect(ds.viewData[0]).toBe(match);632 });633 it('should not add a new row to the dataset if reload is triggered on an unknown row but returns no data', function () {634 expect(ds.data.length).toBe(4);635 scope.loadOptions.requestRowFunction.and.callFake(angular.noop);636 var match = { name: 'aardvarky albertson', someId: 11, otherField: 'f'};637 ds.triggerRowReload(match);638 // digest + flush timeout to allow new sorting639 $rootScope.$digest();640 $timeout.flush();641 // should not be any new rowsz642 expect(ds.data.length).toBe(4);643 });644 it('should be able to reload a single row and reapply sort/pagination with new data provided to triggerReload', function () {645 var match = angular.copy(sampleData[1]);646 ds.triggerRowReload(match, {name: 'a ' + sampleData[1].name + ' the first of his name'});647 // digest + flush timeout to allow new sorting648 $rootScope.$digest();649 $timeout.flush();650 expect(ds.viewData[0].name).toBe('a ' + sampleData[1].name + ' the first of his name');651 expect(ds.viewData[2].name).toBe('bob smith');652 });653 it('should delete row if the reloaded data is null/undefined', function () {654 scope.loadOptions.requestRowFunction.and.callFake(function(){655 return null;656 });657 var match = angular.copy(sampleData[1]);658 expect(ds.data.length).toBe(4);659 expect(_.findWhere(ds.data, match)).toEqual(sampleData[1]);660 ds.triggerRowReload(match);661 // digest + flush timeout to allow new sorting662 $rootScope.$digest();663 $timeout.flush();664 expect(ds.data.length).toBe(3);665 expect(_.findWhere(ds.data, match)).toBe(undefined);666 });667 it('should delete row if the reloaded data is null/undefined with data provided to triggerReload', function () {668 var match = angular.copy(sampleData[1]);669 expect(ds.data.length).toBe(4);670 expect(_.findWhere(ds.data, match)).toEqual(sampleData[1]);671 ds.triggerRowReload(match, undefined);672 // digest + flush timeout to allow new sorting673 $rootScope.$digest();674 $timeout.flush();675 expect(ds.data.length).toBe(3);676 expect(_.findWhere(ds.data, match)).toBe(undefined);677 });678});...
parse-chunked.js
Source:parse-chunked.js
...126 }127 }128 return fragment;129 }130 flush(chunk, start, end) {131 let fragment = chunk.slice(start, end);132 // Save position correction an error in JSON.parse() if any133 this.jsonParseOffset = this.chunkOffset + start;134 // Prepend pending chunk if any135 if (this.pendingChunk !== null) {136 fragment = this.pendingChunk + fragment;137 this.jsonParseOffset -= this.pendingChunk.length;138 this.pendingChunk = null;139 }140 if (this.flushDepth === this.lastFlushDepth) {141 // Depth didn't changed, so it's a root value or entry/element set142 if (this.flushDepth > 0) {143 this.parseAndAppend(this.prepareAddition(fragment), true);144 } else {145 // That's an entire value on a top level146 this.value = JSON.parse(fragment);147 this.valueStack = {148 value: this.value,149 prev: null150 };151 }152 } else if (this.flushDepth > this.lastFlushDepth) {153 // Add missed closing brackets/parentheses154 for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {155 fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';156 }157 if (this.lastFlushDepth === 0) {158 // That's a root value159 this.value = JSON.parse(fragment);160 this.valueStack = {161 value: this.value,162 prev: null163 };164 } else {165 this.parseAndAppend(this.prepareAddition(fragment), true);166 }167 // Move down to the depths to the last object/array, which is current now168 for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {169 let value = this.valueStack.value;170 if (this.stack[i - 1] === STACK_OBJECT) {171 // find last entry172 let key;173 // eslint-disable-next-line curly174 for (key in value);175 value = value[key];176 } else {177 // last element178 value = value[value.length - 1];179 }180 this.valueStack = {181 value,182 prev: this.valueStack183 };184 }185 } else /* this.flushDepth < this.lastFlushDepth */ {186 fragment = this.prepareAddition(fragment);187 // Add missed opening brackets/parentheses188 for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {189 this.jsonParseOffset--;190 fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;191 }192 this.parseAndAppend(fragment, false);193 for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {194 this.valueStack = this.valueStack.prev;195 }196 }197 this.lastFlushDepth = this.flushDepth;198 }199 push(chunk) {200 if (typeof chunk !== 'string') {201 // Suppose chunk is Buffer or Uint8Array202 // Prepend uncompleted byte sequence if any203 if (this.pendingByteSeq !== null) {204 const origRawChunk = chunk;205 chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);206 chunk.set(this.pendingByteSeq);207 chunk.set(origRawChunk, this.pendingByteSeq.length);208 this.pendingByteSeq = null;209 }210 // In case Buffer/Uint8Array, an input is encoded in UTF8211 // Seek for parts of uncompleted UTF8 symbol on the ending212 // This makes sense only if we expect more chunks and last char is not multi-bytes213 if (chunk[chunk.length - 1] > 127) {214 for (let seqLength = 0; seqLength < chunk.length; seqLength++) {215 const byte = chunk[chunk.length - 1 - seqLength];216 // 10xxxxxx - 2nd, 3rd or 4th byte217 // 110xxxxx â first byte of 2-byte sequence218 // 1110xxxx - first byte of 3-byte sequence219 // 11110xxx - first byte of 4-byte sequence220 if (byte >> 6 === 3) {221 seqLength++;222 // If the sequence is really incomplete, then preserve it223 // for the future chunk and cut off it from the current chunk224 if ((seqLength !== 4 && byte >> 3 === 0b11110) ||225 (seqLength !== 3 && byte >> 4 === 0b1110) ||226 (seqLength !== 2 && byte >> 5 === 0b110)) {227 this.pendingByteSeq = chunk.slice(chunk.length - seqLength);228 chunk = chunk.slice(0, -seqLength);229 }230 break;231 }232 }233 }234 // Convert chunk to a string, since single decode per chunk235 // is much effective than decode multiple small substrings236 chunk = decoder.decode(chunk);237 }238 const chunkLength = chunk.length;239 let lastFlushPoint = 0;240 let flushPoint = 0;241 // Main scan loop242 scan: for (let i = 0; i < chunkLength; i++) {243 if (this.stateString) {244 for (; i < chunkLength; i++) {245 if (this.stateStringEscape) {246 this.stateStringEscape = false;247 } else {248 switch (chunk.charCodeAt(i)) {249 case 0x22: /* " */250 this.stateString = false;251 continue scan;252 case 0x5C: /* \ */253 this.stateStringEscape = true;254 }255 }256 }257 break;258 }259 switch (chunk.charCodeAt(i)) {260 case 0x22: /* " */261 this.stateString = true;262 this.stateStringEscape = false;263 break;264 case 0x2C: /* , */265 flushPoint = i;266 break;267 case 0x7B: /* { */268 // Open an object269 flushPoint = i + 1;270 this.stack[this.flushDepth++] = STACK_OBJECT;271 break;272 case 0x5B: /* [ */273 // Open an array274 flushPoint = i + 1;275 this.stack[this.flushDepth++] = STACK_ARRAY;276 break;277 case 0x5D: /* ] */278 case 0x7D: /* } */279 // Close an object or array280 flushPoint = i + 1;281 this.flushDepth--;282 if (this.flushDepth < this.lastFlushDepth) {283 this.flush(chunk, lastFlushPoint, flushPoint);284 lastFlushPoint = flushPoint;285 }286 break;287 case 0x09: /* \t */288 case 0x0A: /* \n */289 case 0x0D: /* \r */290 case 0x20: /* space */291 // Move points forward when they points on current position and it's a whitespace292 if (lastFlushPoint === i) {293 lastFlushPoint++;294 }295 if (flushPoint === i) {296 flushPoint++;297 }298 break;299 }300 }301 if (flushPoint > lastFlushPoint) {302 this.flush(chunk, lastFlushPoint, flushPoint);303 }304 // Produce pendingChunk if something left305 if (flushPoint < chunkLength) {306 if (this.pendingChunk !== null) {307 // When there is already a pending chunk then no flush happened,308 // appending entire chunk to pending one309 this.pendingChunk += chunk;310 } else {311 // Create a pending chunk, it will start with non-whitespace since312 // flushPoint was moved forward away from whitespaces on scan313 this.pendingChunk = chunk.slice(flushPoint, chunkLength);314 }315 }316 this.chunkOffset += chunkLength;317 }318 finish() {319 if (this.pendingChunk !== null) {320 this.flush('', 0, 0);321 this.pendingChunk = null;322 }323 return this.value;324 }...
collaboration.service_test.js
Source:collaboration.service_test.js
...22 Bacon.interval(0, [{$id: 'id'}])23 )24 }25 function flushAll(){26 fb.ref.flush();27 try { 28 $timeout.flush() 29 }30 // Catch all digest errors! Throw all others!31 catch (e) {32 if(!/digest/ig.test(e.message) && !/deferred/ig.test(e.message)){33 throw e34 }35 }36 }37 beforeEach(function(){38 module('goodMood', function($provide){39 $provide.value('Auth', Auth)40 $provide.value('Iteration', Iteration)41 $provide.value('Thread', Thread)42 $provide.value('User', User)...
index.js
Source:index.js
...83 }84 end (chunk, encoding, cb) {85 if (chunk)86 this.write(chunk, encoding)87 this.flush(this[_finishFlushFlag])88 this[_ended] = true89 return super.end(null, null, cb)90 }91 get ended () {92 return this[_ended]93 }94 write (chunk, encoding, cb) {95 // process the chunk using the sync process96 // then super.write() all the outputted chunks97 if (typeof encoding === 'function')98 cb = encoding, encoding = 'utf8'99 if (typeof chunk === 'string')100 chunk = Buffer.from(chunk, encoding)101 if (this[_sawError])102 return103 assert(this[_handle], 'zlib binding closed')104 // _processChunk tries to .close() the native handle after it's done, so we105 // intercept that by temporarily making it a no-op.106 const nativeHandle = this[_handle]._handle107 const originalNativeClose = nativeHandle.close108 nativeHandle.close = () => {}109 const originalClose = this[_handle].close110 this[_handle].close = () => {}111 // It also calls `Buffer.concat()` at the end, which may be convenient112 // for some, but which we are not interested in as it slows us down.113 Buffer.concat = (args) => args114 let result115 try {116 const flushFlag = typeof chunk[_flushFlag] === 'number'117 ? chunk[_flushFlag] : this[_flushFlag]118 result = this[_handle]._processChunk(chunk, flushFlag)119 // if we don't throw, reset it back how it was120 Buffer.concat = OriginalBufferConcat121 } catch (err) {122 // or if we do, put Buffer.concat() back before we emit error123 // Error events call into user code, which may call Buffer.concat()124 Buffer.concat = OriginalBufferConcat125 this[_onError](new ZlibError(err))126 } finally {127 if (this[_handle]) {128 // Core zlib resets `_handle` to null after attempting to close the129 // native handle. Our no-op handler prevented actual closure, but we130 // need to restore the `._handle` property.131 this[_handle]._handle = nativeHandle132 nativeHandle.close = originalNativeClose133 this[_handle].close = originalClose134 // `_processChunk()` adds an 'error' listener. If we don't remove it135 // after each call, these handlers start piling up.136 this[_handle].removeAllListeners('error')137 }138 }139 let writeReturn140 if (result) {141 if (Array.isArray(result) && result.length > 0) {142 // The first buffer is always `handle._outBuffer`, which would be143 // re-used for later invocations; so, we always have to copy that one.144 writeReturn = super.write(Buffer.from(result[0]))145 for (let i = 1; i < result.length; i++) {146 writeReturn = super.write(result[i])147 }148 } else {149 writeReturn = super.write(Buffer.from(result))150 }151 }152 if (cb)153 cb()154 return writeReturn155 }156}157class Zlib extends ZlibBase {158 constructor (opts, mode) {159 opts = opts || {}160 opts.flush = opts.flush || constants.Z_NO_FLUSH161 opts.finishFlush = opts.finishFlush || constants.Z_FINISH162 super(opts, mode)163 this[_fullFlushFlag] = constants.Z_FULL_FLUSH164 this[_level] = opts.level165 this[_strategy] = opts.strategy166 }167 params (level, strategy) {168 if (this[_sawError])169 return170 if (!this[_handle])171 throw new Error('cannot switch params when binding is closed')172 // no way to test this without also not supporting params at all173 /* istanbul ignore if */174 if (!this[_handle].params)175 throw new Error('not supported in this implementation')176 if (this[_level] !== level || this[_strategy] !== strategy) {177 this.flush(constants.Z_SYNC_FLUSH)178 assert(this[_handle], 'zlib binding closed')179 // .params() calls .flush(), but the latter is always async in the180 // core zlib. We override .flush() temporarily to intercept that and181 // flush synchronously.182 const origFlush = this[_handle].flush183 this[_handle].flush = (flushFlag, cb) => {184 this.flush(flushFlag)185 cb()186 }187 try {188 this[_handle].params(level, strategy)189 } finally {190 this[_handle].flush = origFlush191 }192 /* istanbul ignore else */193 if (this[_handle]) {194 this[_level] = level195 this[_strategy] = strategy196 }197 }198 }...
FAQs.jsx
Source:FAQs.jsx
1import React from "react";2import styles from "./FAQs.module.css";3import BottomIcon from "../BottomIcon/BottomIcon";4const FAQs = () => {5 return (6 <div className={styles.mainDiv}>7 <div className={styles.content}>8 <div className={styles.heading}>9 <h4></h4>10 </div>11 <div className={styles.accordian}>12 <div className="accordion accordion-flush" id="accordionFlushExample">13 <div className="accordion-item">14 <h2 className="accordion-header" id="flush-headingOne">15 <button16 className="accordion-button collapsed"17 type="button"18 data-bs-toggle="collapse"19 data-bs-target="#flush-collapseOne"20 aria-expanded="false"21 aria-controls="flush-collapseOne"22 >23 Accordion Item #124 </button>25 </h2>26 <div27 id="flush-collapseOne"28 className="accordion-collapse collapse"29 aria-labelledby="flush-headingOne"30 data-bs-parent="#accordionFlushExample"31 >32 <div className="accordion-body">33 Placeholder content for this accordion, which is intended to34 demonstrate the <code>.accordion-flush</code> className. This35 is the first item's accordion body.36 </div>37 </div>38 </div>39 <div className="accordion-item">40 <h2 className="accordion-header" id="flush-headingTwo">41 <button42 className="accordion-button collapsed"43 type="button"44 data-bs-toggle="collapse"45 data-bs-target="#flush-collapseTwo"46 aria-expanded="false"47 aria-controls="flush-collapseTwo"48 >49 Accordion Item #250 </button>51 </h2>52 <div53 id="flush-collapseTwo"54 className="accordion-collapse collapse"55 aria-labelledby="flush-headingTwo"56 data-bs-parent="#accordionFlushExample"57 >58 <div className="accordion-body">59 Placeholder content for this accordion, which is intended to60 demonstrate the <code>.accordion-flush</code> className. This61 is the second item's accordion body. Let's imagine this being62 filled with some actual content.63 </div>64 </div>65 </div>66 <div className="accordion-item">67 <h2 className="accordion-header" id="flush-headingThree">68 <button69 className="accordion-button collapsed"70 type="button"71 data-bs-toggle="collapse"72 data-bs-target="#flush-collapseThree"73 aria-expanded="false"74 aria-controls="flush-collapseThree"75 >76 Accordion Item #377 </button>78 </h2>79 <div80 id="flush-collapseThree"81 className="accordion-collapse collapse"82 aria-labelledby="flush-headingThree"83 data-bs-parent="#accordionFlushExample"84 >85 <div className="accordion-body">86 Placeholder content for this accordion, which is intended to87 demonstrate the <code>.accordion-flush</code> className. This88 is the third item's accordion body. Nothing more exciting89 happening here in terms of content, but just filling up the90 space to make it look, at least at first glance, a bit more91 representative of how this would look in a real-world92 application.93 </div>94 </div>95 </div>96 <div className="accordion-item">97 <h2 className="accordion-header" id="flush-headingfour">98 <button99 className="accordion-button collapsed"100 type="button"101 data-bs-toggle="collapse"102 data-bs-target="#flush-collapsefour"103 aria-expanded="false"104 aria-controls="flush-collapsefour"105 >106 Accordion Item #4107 </button>108 </h2>109 <div110 id="flush-collapsefour"111 className="accordion-collapse collapse"112 aria-labelledby="flush-headingfour"113 data-bs-parent="#accordionFlushExample"114 >115 <div className="accordion-body">116 Placeholder content for this accordion, which is intended to117 demonstrate the <code>.accordion-flush</code> className. This118 is the third item's accordion body. Nothing more exciting119 happening here in terms of content, but just filling up the120 space to make it look, at least at first glance, a bit more121 representative of how this would look in a real-world122 application.123 </div>124 </div>125 </div>126 <div className="accordion-item">127 <h2 className="accordion-header" id="flush-headingfive">128 <button129 className="accordion-button collapsed"130 type="button"131 data-bs-toggle="collapse"132 data-bs-target="#flush-collapsefive"133 aria-expanded="false"134 aria-controls="flush-collapsefive"135 >136 Accordion Item #5137 </button>138 </h2>139 <div140 id="flush-collapsefive"141 className="accordion-collapse collapse"142 aria-labelledby="flush-headingfive"143 data-bs-parent="#accordionFlushExample"144 >145 <div className="accordion-body">146 Placeholder content for this accordion, which is intended to147 demonstrate the <code>.accordion-flush</code> className. This148 is the third item's accordion body. Nothing more exciting149 happening here in terms of content, but just filling up the150 space to make it look, at least at first glance, a bit more151 representative of how this would look in a real-world152 application.153 </div>154 </div>155 </div>156 <div className="accordion-item">157 <h2 className="accordion-header" id="flush-headingsix">158 <button159 className="accordion-button collapsed"160 type="button"161 data-bs-toggle="collapse"162 data-bs-target="#flush-collapsesix"163 aria-expanded="false"164 aria-controls="flush-collapsesix"165 >166 Accordion Item #6167 </button>168 </h2>169 <div170 id="flush-collapsesix"171 className="accordion-collapse collapse"172 aria-labelledby="flush-headingsix"173 data-bs-parent="#accordionFlushExample"174 >175 <div className="accordion-body">176 Placeholder content for this accordion, which is intended to177 demonstrate the <code>.accordion-flush</code> className. This178 is the third item's accordion body. Nothing more exciting179 happening here in terms of content, but just filling up the180 space to make it look, at least at first glance, a bit more181 representative of how this would look in a real-world182 application.183 </div>184 </div>185 </div>186 </div>187 </div>188 </div>189 <BottomIcon />190 </div>191 );192};...
RoadMap.jsx
Source:RoadMap.jsx
1import React from "react";2import BottomIcon from "../BottomIcon/BottomIcon";3import styles from "./RoadMap.module.css";4const RoadMap = () => {5 return (6 <div className={styles.mainDiv}>7 <div className={styles.content}>8 <div className={styles.heading}>9 <h4></h4>10 </div>11 <div className={styles.accordian}>12 <div className="accordion accordion-flush" id="accordionFlushExample">13 <div className="accordion-item">14 <h2 className="accordion-header" id="flush-headingOne">15 <button16 className="accordion-button collapsed"17 type="button"18 data-bs-toggle="collapse"19 data-bs-target="#flush-collapseOne"20 aria-expanded="false"21 aria-controls="flush-collapseOne"22 >23 Accordion Item #124 </button>25 </h2>26 <div27 id="flush-collapseOne"28 className="accordion-collapse collapse"29 aria-labelledby="flush-headingOne"30 data-bs-parent="#accordionFlushExample"31 >32 <div className="accordion-body">33 Placeholder content for this accordion, which is intended to34 demonstrate the <code>.accordion-flush</code> className. This35 is the first item's accordion body.36 </div>37 </div>38 </div>39 <div className="accordion-item">40 <h2 className="accordion-header" id="flush-headingTwo">41 <button42 className="accordion-button collapsed"43 type="button"44 data-bs-toggle="collapse"45 data-bs-target="#flush-collapseTwo"46 aria-expanded="false"47 aria-controls="flush-collapseTwo"48 >49 Accordion Item #250 </button>51 </h2>52 <div53 id="flush-collapseTwo"54 className="accordion-collapse collapse"55 aria-labelledby="flush-headingTwo"56 data-bs-parent="#accordionFlushExample"57 >58 <div className="accordion-body">59 Placeholder content for this accordion, which is intended to60 demonstrate the <code>.accordion-flush</code> className. This61 is the second item's accordion body. Let's imagine this being62 filled with some actual content.63 </div>64 </div>65 </div>66 <div className="accordion-item">67 <h2 className="accordion-header" id="flush-headingThree">68 <button69 className="accordion-button collapsed"70 type="button"71 data-bs-toggle="collapse"72 data-bs-target="#flush-collapseThree"73 aria-expanded="false"74 aria-controls="flush-collapseThree"75 >76 Accordion Item #377 </button>78 </h2>79 <div80 id="flush-collapseThree"81 className="accordion-collapse collapse"82 aria-labelledby="flush-headingThree"83 data-bs-parent="#accordionFlushExample"84 >85 <div className="accordion-body">86 Placeholder content for this accordion, which is intended to87 demonstrate the <code>.accordion-flush</code> className. This88 is the third item's accordion body. Nothing more exciting89 happening here in terms of content, but just filling up the90 space to make it look, at least at first glance, a bit more91 representative of how this would look in a real-world92 application.93 </div>94 </div>95 </div>96 <div className="accordion-item">97 <h2 className="accordion-header" id="flush-headingfour">98 <button99 className="accordion-button collapsed"100 type="button"101 data-bs-toggle="collapse"102 data-bs-target="#flush-collapsefour"103 aria-expanded="false"104 aria-controls="flush-collapsefour"105 >106 Accordion Item #4107 </button>108 </h2>109 <div110 id="flush-collapsefour"111 className="accordion-collapse collapse"112 aria-labelledby="flush-headingfour"113 data-bs-parent="#accordionFlushExample"114 >115 <div className="accordion-body">116 Placeholder content for this accordion, which is intended to117 demonstrate the <code>.accordion-flush</code> className. This118 is the third item's accordion body. Nothing more exciting119 happening here in terms of content, but just filling up the120 space to make it look, at least at first glance, a bit more121 representative of how this would look in a real-world122 application.123 </div>124 </div>125 </div>126 <div className="accordion-item">127 <h2 className="accordion-header" id="flush-headingfive">128 <button129 className="accordion-button collapsed"130 type="button"131 data-bs-toggle="collapse"132 data-bs-target="#flush-collapsefive"133 aria-expanded="false"134 aria-controls="flush-collapsefive"135 >136 Accordion Item #5137 </button>138 </h2>139 <div140 id="flush-collapsefive"141 className="accordion-collapse collapse"142 aria-labelledby="flush-headingfive"143 data-bs-parent="#accordionFlushExample"144 >145 <div className="accordion-body">146 Placeholder content for this accordion, which is intended to147 demonstrate the <code>.accordion-flush</code> className. This148 is the first item's accordion body.149 </div>150 </div>151 </div>152 <div className="accordion-item">153 <h2 className="accordion-header" id="flush-headingsix">154 <button155 className="accordion-button collapsed"156 type="button"157 data-bs-toggle="collapse"158 data-bs-target="#flush-collapsesix"159 aria-expanded="false"160 aria-controls="flush-collapsesix"161 >162 Accordion Item #6163 </button>164 </h2>165 <div166 id="flush-collapsesix"167 className="accordion-collapse collapse"168 aria-labelledby="flush-headingsix"169 data-bs-parent="#accordionFlushExample"170 >171 <div className="accordion-body">172 Placeholder content for this accordion, which is intended to173 demonstrate the <code>.accordion-flush</code> className. This174 is the first item's accordion body.175 </div>176 </div>177 </div>178 </div>179 </div>180 </div>181 <BottomIcon />182 </div>183 );184};...
HomeAdminAccordion.js
Source:HomeAdminAccordion.js
1import React from 'react';2import './HomeAdminAccordion.css';3import { Link } from 'react-router-dom';4export default function Acordion() {5 return (6 <div className="activities-cards">7 <div className="card">8 <div className="card-body">9 <div className="accordion accordion-flush" id="accordionFlushExample">10 <div className="accordion-item">11 <h3 className="accordion-header" id="flush-headingOne">12 <button className="accordion-button collapsed" type="button" data-bs-toggle="collapse"13 data-bs-target="#flush-collapseOne" aria-expanded="false" aria-controls="flush-collapseOne">14 Servicios15 </button>16 </h3>17 <div id="flush-collapseOne" className="accordion-collapse collapse" aria-labelledby="flush-headingOne"18 data-bs-parent="#accordionFlushExample">19 <div className="accordion-body">20 <ul>21 <li><Link to="/home/admin/listaServicios">Lista de servicios</Link></li>22 <li><Link to="/home/admin/crearServicio">Crear nuevo servicio</Link></li>23 </ul>24 </div>25 </div>26 </div>27 <div className="accordion-item">28 <h3 className="accordion-header" id="flush-headingTwo">29 <button className="accordion-button collapsed" type="button" data-bs-toggle="collapse"30 data-bs-target="#flush-collapseTwo" aria-expanded="false" aria-controls="flush-collapseTwo">31 Clientes32 </button>33 </h3>34 <div id="flush-collapseTwo" className="accordion-collapse collapse" aria-labelledby="flush-headingTwo"35 data-bs-parent="#accordionFlushExample">36 <div className="accordion-body">37 <ul>38 <li><Link to="/home/admin/listaClientes">Lista de clientes</Link></li>39 <li><Link to="/home/admin/crearCliente">Crear nuevo cliente</Link></li>40 </ul>41 </div>42 </div>43 </div>44 <div className="accordion-item">45 <h3 className="accordion-header" id="flush-headingTwo">46 <button className="accordion-button collapsed" type="button" data-bs-toggle="collapse"47 data-bs-target="#flush-collapseThree" aria-expanded="false" aria-controls="flush-collapseThree">48 Empleados49 </button>50 </h3>51 <div id="flush-collapseThree" className="accordion-collapse collapse" aria-labelledby="flush-headingThree"52 data-bs-parent="#accordionFlushExample">53 <div className="accordion-body">54 <ul>55 <li><Link to="/home/admin/listaTrabajadores">Lista de empleados</Link></li>56 <li><Link to="/home/admin/crearTrabajador">Crear nuevo empleado</Link></li>57 </ul>58 </div>59 </div>60 </div>61 </div>62 </div>63 </div>64 </div>65 )...
through2.js
Source:through2.js
1var Transform = require('readable-stream').Transform2 , inherits = require('util').inherits3 , xtend = require('xtend')4function DestroyableTransform(opts) {5 Transform.call(this, opts)6 this._destroyed = false7}8inherits(DestroyableTransform, Transform)9DestroyableTransform.prototype.destroy = function(err) {10 if (this._destroyed) return11 this._destroyed = true12 13 var self = this14 process.nextTick(function() {15 if (err)16 self.emit('error', err)17 self.emit('close')18 })19}20// a noop _transform function21function noop (chunk, enc, callback) {22 callback(null, chunk)23}24// create a new export function, used by both the main export and25// the .ctor export, contains common logic for dealing with arguments26function through2 (construct) {27 return function (options, transform, flush) {28 if (typeof options == 'function') {29 flush = transform30 transform = options31 options = {}32 }33 if (typeof transform != 'function')34 transform = noop35 if (typeof flush != 'function')36 flush = null37 return construct(options, transform, flush)38 }39}40// main export, just make me a transform stream!41module.exports = through2(function (options, transform, flush) {42 var t2 = new DestroyableTransform(options)43 t2._transform = transform44 if (flush)45 t2._flush = flush46 return t247})48// make me a reusable prototype that I can `new`, or implicitly `new`49// with a constructor call50module.exports.ctor = through2(function (options, transform, flush) {51 function Through2 (override) {52 if (!(this instanceof Through2))53 return new Through2(override)54 this.options = xtend(options, override)55 DestroyableTransform.call(this, this.options)56 }57 inherits(Through2, DestroyableTransform)58 Through2.prototype._transform = transform59 if (flush)60 Through2.prototype._flush = flush61 return Through262})63module.exports.obj = through2(function (options, transform, flush) {64 var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options))65 t2._transform = transform66 if (flush)67 t2._flush = flush68 return t2...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.fill('input[name="q"]', 'Playwright');7 await page.keyboard.press('Enter');8 await page.waitForNavigation();9 const browserContext = page.context();10 const browser = browserContext.browser();11 await browser.close();12})();13 at Object.throwProtocolError (D:\playwright\node_modules\playwright\lib\protocol\helper.js:123:15)14 at CDPSession._onMessage (D:\playwright\node_modules\playwright\lib\protocol\connection.js:200:20)15 at CDPSession.emit (events.js:315:20)16 at CDPSession.EventEmitter.emit (domain.js:483:12)17 at CDPSession._onMessage (D:\playwright\node_modules\playwright\lib\protocol\connection.js:187:12)18 at Connection._onMessage (D:\playwright\node_modules\playwright\lib\protocol\connection.js:112:17)19 at WebSocketTransport._ws.addEventListener.event (D:\playwright\node_modules\playwright\lib\protocol\connection.js:85:24)20 at WebSocketTransport.emit (events.js:315:20)21 at WebSocketTransport.EventEmitter.emit (domain.js:483:12)22 at WebSocketTransport._ws.onmessage (D:\playwright\node_modules\playwright\lib\protocol\transport.js:82:10)
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await page.context().close();8 await page.close();9 await browser.close();10})();
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.screenshot({ path: 'google.png' });7 await page.flush();8 await browser.close();9})();
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.screenshot({ path: `example.png` });7 await page.flush();8 await browser.close();9})();10const { chromium } = require('playwright');11(async () => {12 const browser = await chromium.launch();13 const context = await browser.newContext();14 const page = await context.newPage();15 await page.screenshot({ path: `example.png` });16 await page.flush();17 await browser.close();18})();19const { chromium } = require('playwright');20(async () => {21 const browser = await chromium.launch();22 const context = await browser.newContext();23 const page = await context.newPage();24 await page.screenshot({ path: `example.png` });25 await page.flush();26 await browser.close();27})();28const { chromium } = require('playwright');29(async () => {30 const browser = await chromium.launch();31 const context = await browser.newContext();32 const page = await context.newPage();33 await page.screenshot({ path: `example.png` });34 await page.flush();35 await browser.close();36})();37const { chromium } = require('playwright');38(async () => {39 const browser = await chromium.launch();40 const context = await browser.newContext();41 const page = await context.newPage();42 await page.screenshot({ path: `example.png` });43 await page.flush();44 await browser.close();45})();46const { chromium } = require('playwright');47(async () => {48 const browser = await chromium.launch();49 const context = await browser.newContext();
Using AI Code Generation
1const playwright = require('playwright');2const browser = await playwright.chromium.launch();3const context = await browser.newContext();4const page = await context.newPage();5await page.type('input[aria-label="Search"]', 'Playwright');6await page.keyboard.press('Enter');7await page.waitForNavigation();8await page.screenshot({ path: 'google.png' });9await context.close();10await browser.close();11await browser._flushProtocolLogs();12await browser.close();13const playwright = require('playwright');14(async () => {15 for (const browserType of ['chromium', 'firefox', 'webkit']) {16 const browser = await playwright[browserType].launch();17 const context = await browser.newContext();18 const page = await context.newPage();19 await page.type('input[aria-label="Search"]', 'Playwright');20 await page.keyboard.press('Enter');21 await page.waitForNavigation();22 await page.screenshot({ path: `google-${browserType}.png` });23 await context.close();24 await browser.close();25 }26})();27const playwright = require('playwright');28(async () => {29 for (const browserType of ['chromium', 'firefox', 'webkit']) {30 const browser = await playwright[browserType].launch();31 const context = await browser.newContext();32 const page = await context.newPage();33 await page.type('input[aria-label="Search"]
Using AI Code Generation
1const { flush } = require('@playwright/test/lib/utils/trace');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.screenshot({ path: 'example.png' });8 await flush();9 await browser.close();10})();11const { flush } = require('@playwright/test/lib/utils/trace');12await flush();
Using AI Code Generation
1await page.context().storageState({ path: 'storage.json' });2await page.context().clearCookies();3await page.context().clearPermissions();4await page.context().clearGeolocation();5await page.context().clearEmulation();6await page.context().clearDeviceDescriptors();7await page.context().clearAndroidPermissions();8await page.context().clearAndroidDeviceLocale();9await page.context().clearAndroidDeviceTimezone();10await page.context().clearAndroidDeviceUser();11await page.context().clearAndroidDeviceNetwork();12await page.context().clearAndroidDeviceBattery();13await page.context().clearAndroidDeviceLocation();14await page.context().clearAndroidDeviceOrientation();15await page.context().clearAndroidDeviceUi();16await page.context().clearAndroidDeviceSensor();17await page.context().clearAndroidDeviceClipboard();18await page.context().clearAndroidDeviceNotifications();19await page.context().clearAndroidDeviceLogcat();20await page.context().clearAndroidDeviceCrash();21await page.context().clearAndroidDeviceMemory();22await page.context().clearAndroidDeviceCpu();23await page.context().clearAndroidDeviceUptime();24await page.context().clearAndroidDeviceProcess();25await page.context().clearAndroidDeviceProcessList();26await page.context().clearAndroidDeviceProcessMemory();27await page.context().clearAndroidDeviceProcessCpu();28await page.context().clearAndroidDeviceProcessThreads();29await page.context().clearAndroidDeviceProcessOpenFiles();30await page.context().clearAndroidDeviceProcessNetwork();31await page.context().clearAndroidDeviceProcessNetworkList();32await page.context().clearAndroidDeviceProcessNetworkConnections();33await page.context().clearAndroidDeviceProcessNetworkTraffic();34await page.context().clearAndroidDeviceProcessNetworkTrafficList();35await page.context().clearAndroidDeviceProcessNetworkTrafficStats();36await page.context().clearAndroidDeviceProcessNetworkTrafficStatsList();37await page.context().clearAndroidDeviceProcessNetworkTrafficStatsHistory();38await page.context().clearAndroidDeviceProcessNetworkTrafficStatsSummary();39await page.context().clearAndroidDeviceProcessNetworkTrafficStatsSummaryList();40await page.context().clearAndroidDeviceProcessNetworkTrafficStatsSummaryHistory();41await page.context().clearAndroidD
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!!