How to use slashes method in storybook-root

Best JavaScript code snippet using storybook-root

test-url-parse-format.js

Source:test-url-parse-format.js Github

copy

Full Screen

1'use strict';2require('../common');3const assert = require('assert');4const inspect = require('util').inspect;5const url = require('url');6// URLs to parse, and expected data7// { url : parsed }8const parseTests = {9 '//some_path': {10 href: '//some_path',11 pathname: '//some_path',12 path: '//some_path'13 },14 'http:\\\\evil-phisher\\foo.html#h\\a\\s\\h': {15 protocol: 'http:',16 slashes: true,17 host: 'evil-phisher',18 hostname: 'evil-phisher',19 pathname: '/foo.html',20 path: '/foo.html',21 hash: '#h%5Ca%5Cs%5Ch',22 href: 'http://evil-phisher/foo.html#h%5Ca%5Cs%5Ch'23 },24 'http:\\\\evil-phisher\\foo.html?json="\\"foo\\""#h\\a\\s\\h': {25 protocol: 'http:',26 slashes: true,27 host: 'evil-phisher',28 hostname: 'evil-phisher',29 pathname: '/foo.html',30 search: '?json=%22%5C%22foo%5C%22%22',31 query: 'json=%22%5C%22foo%5C%22%22',32 path: '/foo.html?json=%22%5C%22foo%5C%22%22',33 hash: '#h%5Ca%5Cs%5Ch',34 href: 'http://evil-phisher/foo.html?json=%22%5C%22foo%5C%22%22#h%5Ca%5Cs%5Ch'35 },36 'http:\\\\evil-phisher\\foo.html#h\\a\\s\\h?blarg': {37 protocol: 'http:',38 slashes: true,39 host: 'evil-phisher',40 hostname: 'evil-phisher',41 pathname: '/foo.html',42 path: '/foo.html',43 hash: '#h%5Ca%5Cs%5Ch?blarg',44 href: 'http://evil-phisher/foo.html#h%5Ca%5Cs%5Ch?blarg'45 },46 'http:\\\\evil-phisher\\foo.html': {47 protocol: 'http:',48 slashes: true,49 host: 'evil-phisher',50 hostname: 'evil-phisher',51 pathname: '/foo.html',52 path: '/foo.html',53 href: 'http://evil-phisher/foo.html'54 },55 'HTTP://www.example.com/': {56 href: 'http://www.example.com/',57 protocol: 'http:',58 slashes: true,59 host: 'www.example.com',60 hostname: 'www.example.com',61 pathname: '/',62 path: '/'63 },64 'HTTP://www.example.com': {65 href: 'http://www.example.com/',66 protocol: 'http:',67 slashes: true,68 host: 'www.example.com',69 hostname: 'www.example.com',70 pathname: '/',71 path: '/'72 },73 'http://www.ExAmPlE.com/': {74 href: 'http://www.example.com/',75 protocol: 'http:',76 slashes: true,77 host: 'www.example.com',78 hostname: 'www.example.com',79 pathname: '/',80 path: '/'81 },82 'http://user:pw@www.ExAmPlE.com/': {83 href: 'http://user:pw@www.example.com/',84 protocol: 'http:',85 slashes: true,86 auth: 'user:pw',87 host: 'www.example.com',88 hostname: 'www.example.com',89 pathname: '/',90 path: '/'91 },92 'http://USER:PW@www.ExAmPlE.com/': {93 href: 'http://USER:PW@www.example.com/',94 protocol: 'http:',95 slashes: true,96 auth: 'USER:PW',97 host: 'www.example.com',98 hostname: 'www.example.com',99 pathname: '/',100 path: '/'101 },102 'http://user@www.example.com/': {103 href: 'http://user@www.example.com/',104 protocol: 'http:',105 slashes: true,106 auth: 'user',107 host: 'www.example.com',108 hostname: 'www.example.com',109 pathname: '/',110 path: '/'111 },112 'http://user%3Apw@www.example.com/': {113 href: 'http://user:pw@www.example.com/',114 protocol: 'http:',115 slashes: true,116 auth: 'user:pw',117 host: 'www.example.com',118 hostname: 'www.example.com',119 pathname: '/',120 path: '/'121 },122 'http://x.com/path?that\'s#all, folks': {123 href: 'http://x.com/path?that%27s#all,%20folks',124 protocol: 'http:',125 slashes: true,126 host: 'x.com',127 hostname: 'x.com',128 search: '?that%27s',129 query: 'that%27s',130 pathname: '/path',131 hash: '#all,%20folks',132 path: '/path?that%27s'133 },134 'HTTP://X.COM/Y': {135 href: 'http://x.com/Y',136 protocol: 'http:',137 slashes: true,138 host: 'x.com',139 hostname: 'x.com',140 pathname: '/Y',141 path: '/Y'142 },143 // Whitespace in the front144 ' http://www.example.com/': {145 href: 'http://www.example.com/',146 protocol: 'http:',147 slashes: true,148 host: 'www.example.com',149 hostname: 'www.example.com',150 pathname: '/',151 path: '/'152 },153 // + not an invalid host character154 // per https://url.spec.whatwg.org/#host-parsing155 'http://x.y.com+a/b/c': {156 href: 'http://x.y.com+a/b/c',157 protocol: 'http:',158 slashes: true,159 host: 'x.y.com+a',160 hostname: 'x.y.com+a',161 pathname: '/b/c',162 path: '/b/c'163 },164 // An unexpected invalid char in the hostname.165 'HtTp://x.y.cOm;a/b/c?d=e#f g<h>i': {166 href: 'http://x.y.com/;a/b/c?d=e#f%20g%3Ch%3Ei',167 protocol: 'http:',168 slashes: true,169 host: 'x.y.com',170 hostname: 'x.y.com',171 pathname: ';a/b/c',172 search: '?d=e',173 query: 'd=e',174 hash: '#f%20g%3Ch%3Ei',175 path: ';a/b/c?d=e'176 },177 // Make sure that we don't accidentally lcast the path parts.178 'HtTp://x.y.cOm;A/b/c?d=e#f g<h>i': {179 href: 'http://x.y.com/;A/b/c?d=e#f%20g%3Ch%3Ei',180 protocol: 'http:',181 slashes: true,182 host: 'x.y.com',183 hostname: 'x.y.com',184 pathname: ';A/b/c',185 search: '?d=e',186 query: 'd=e',187 hash: '#f%20g%3Ch%3Ei',188 path: ';A/b/c?d=e'189 },190 'http://x...y...#p': {191 href: 'http://x...y.../#p',192 protocol: 'http:',193 slashes: true,194 host: 'x...y...',195 hostname: 'x...y...',196 hash: '#p',197 pathname: '/',198 path: '/'199 },200 'http://x/p/"quoted"': {201 href: 'http://x/p/%22quoted%22',202 protocol: 'http:',203 slashes: true,204 host: 'x',205 hostname: 'x',206 pathname: '/p/%22quoted%22',207 path: '/p/%22quoted%22'208 },209 '<http://goo.corn/bread> Is a URL!': {210 href: '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!',211 pathname: '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!',212 path: '%3Chttp://goo.corn/bread%3E%20Is%20a%20URL!'213 },214 'http://www.narwhaljs.org/blog/categories?id=news': {215 href: 'http://www.narwhaljs.org/blog/categories?id=news',216 protocol: 'http:',217 slashes: true,218 host: 'www.narwhaljs.org',219 hostname: 'www.narwhaljs.org',220 search: '?id=news',221 query: 'id=news',222 pathname: '/blog/categories',223 path: '/blog/categories?id=news'224 },225 'http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=': {226 href: 'http://mt0.google.com/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=',227 protocol: 'http:',228 slashes: true,229 host: 'mt0.google.com',230 hostname: 'mt0.google.com',231 pathname: '/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s=',232 path: '/vt/lyrs=m@114&hl=en&src=api&x=2&y=2&z=3&s='233 },234 'http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=': {235 href: 'http://mt0.google.com/vt/lyrs=m@114???&hl=en&src=api' +236 '&x=2&y=2&z=3&s=',237 protocol: 'http:',238 slashes: true,239 host: 'mt0.google.com',240 hostname: 'mt0.google.com',241 search: '???&hl=en&src=api&x=2&y=2&z=3&s=',242 query: '??&hl=en&src=api&x=2&y=2&z=3&s=',243 pathname: '/vt/lyrs=m@114',244 path: '/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s='245 },246 'http://user:pass@mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=': {247 href: 'http://user:pass@mt0.google.com/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s=',248 protocol: 'http:',249 slashes: true,250 host: 'mt0.google.com',251 auth: 'user:pass',252 hostname: 'mt0.google.com',253 search: '???&hl=en&src=api&x=2&y=2&z=3&s=',254 query: '??&hl=en&src=api&x=2&y=2&z=3&s=',255 pathname: '/vt/lyrs=m@114',256 path: '/vt/lyrs=m@114???&hl=en&src=api&x=2&y=2&z=3&s='257 },258 'file:///etc/passwd': {259 href: 'file:///etc/passwd',260 slashes: true,261 protocol: 'file:',262 pathname: '/etc/passwd',263 hostname: '',264 host: '',265 path: '/etc/passwd'266 },267 'file://localhost/etc/passwd': {268 href: 'file://localhost/etc/passwd',269 protocol: 'file:',270 slashes: true,271 pathname: '/etc/passwd',272 hostname: 'localhost',273 host: 'localhost',274 path: '/etc/passwd'275 },276 'file://foo/etc/passwd': {277 href: 'file://foo/etc/passwd',278 protocol: 'file:',279 slashes: true,280 pathname: '/etc/passwd',281 hostname: 'foo',282 host: 'foo',283 path: '/etc/passwd'284 },285 'file:///etc/node/': {286 href: 'file:///etc/node/',287 slashes: true,288 protocol: 'file:',289 pathname: '/etc/node/',290 hostname: '',291 host: '',292 path: '/etc/node/'293 },294 'file://localhost/etc/node/': {295 href: 'file://localhost/etc/node/',296 protocol: 'file:',297 slashes: true,298 pathname: '/etc/node/',299 hostname: 'localhost',300 host: 'localhost',301 path: '/etc/node/'302 },303 'file://foo/etc/node/': {304 href: 'file://foo/etc/node/',305 protocol: 'file:',306 slashes: true,307 pathname: '/etc/node/',308 hostname: 'foo',309 host: 'foo',310 path: '/etc/node/'311 },312 'http:/baz/../foo/bar': {313 href: 'http:/baz/../foo/bar',314 protocol: 'http:',315 pathname: '/baz/../foo/bar',316 path: '/baz/../foo/bar'317 },318 'http://user:pass@example.com:8000/foo/bar?baz=quux#frag': {319 href: 'http://user:pass@example.com:8000/foo/bar?baz=quux#frag',320 protocol: 'http:',321 slashes: true,322 host: 'example.com:8000',323 auth: 'user:pass',324 port: '8000',325 hostname: 'example.com',326 hash: '#frag',327 search: '?baz=quux',328 query: 'baz=quux',329 pathname: '/foo/bar',330 path: '/foo/bar?baz=quux'331 },332 '//user:pass@example.com:8000/foo/bar?baz=quux#frag': {333 href: '//user:pass@example.com:8000/foo/bar?baz=quux#frag',334 slashes: true,335 host: 'example.com:8000',336 auth: 'user:pass',337 port: '8000',338 hostname: 'example.com',339 hash: '#frag',340 search: '?baz=quux',341 query: 'baz=quux',342 pathname: '/foo/bar',343 path: '/foo/bar?baz=quux'344 },345 '/foo/bar?baz=quux#frag': {346 href: '/foo/bar?baz=quux#frag',347 hash: '#frag',348 search: '?baz=quux',349 query: 'baz=quux',350 pathname: '/foo/bar',351 path: '/foo/bar?baz=quux'352 },353 'http:/foo/bar?baz=quux#frag': {354 href: 'http:/foo/bar?baz=quux#frag',355 protocol: 'http:',356 hash: '#frag',357 search: '?baz=quux',358 query: 'baz=quux',359 pathname: '/foo/bar',360 path: '/foo/bar?baz=quux'361 },362 'mailto:foo@bar.com?subject=hello': {363 href: 'mailto:foo@bar.com?subject=hello',364 protocol: 'mailto:',365 host: 'bar.com',366 auth: 'foo',367 hostname: 'bar.com',368 search: '?subject=hello',369 query: 'subject=hello',370 path: '?subject=hello'371 },372 'javascript:alert(\'hello\');': {373 href: 'javascript:alert(\'hello\');',374 protocol: 'javascript:',375 pathname: 'alert(\'hello\');',376 path: 'alert(\'hello\');'377 },378 'xmpp:isaacschlueter@jabber.org': {379 href: 'xmpp:isaacschlueter@jabber.org',380 protocol: 'xmpp:',381 host: 'jabber.org',382 auth: 'isaacschlueter',383 hostname: 'jabber.org'384 },385 'http://atpass:foo%40bar@127.0.0.1:8080/path?search=foo#bar': {386 href: 'http://atpass:foo%40bar@127.0.0.1:8080/path?search=foo#bar',387 protocol: 'http:',388 slashes: true,389 host: '127.0.0.1:8080',390 auth: 'atpass:foo@bar',391 hostname: '127.0.0.1',392 port: '8080',393 pathname: '/path',394 search: '?search=foo',395 query: 'search=foo',396 hash: '#bar',397 path: '/path?search=foo'398 },399 'svn+ssh://foo/bar': {400 href: 'svn+ssh://foo/bar',401 host: 'foo',402 hostname: 'foo',403 protocol: 'svn+ssh:',404 pathname: '/bar',405 path: '/bar',406 slashes: true407 },408 'dash-test://foo/bar': {409 href: 'dash-test://foo/bar',410 host: 'foo',411 hostname: 'foo',412 protocol: 'dash-test:',413 pathname: '/bar',414 path: '/bar',415 slashes: true416 },417 'dash-test:foo/bar': {418 href: 'dash-test:foo/bar',419 host: 'foo',420 hostname: 'foo',421 protocol: 'dash-test:',422 pathname: '/bar',423 path: '/bar'424 },425 'dot.test://foo/bar': {426 href: 'dot.test://foo/bar',427 host: 'foo',428 hostname: 'foo',429 protocol: 'dot.test:',430 pathname: '/bar',431 path: '/bar',432 slashes: true433 },434 'dot.test:foo/bar': {435 href: 'dot.test:foo/bar',436 host: 'foo',437 hostname: 'foo',438 protocol: 'dot.test:',439 pathname: '/bar',440 path: '/bar'441 },442 // IDNA tests443 'http://www.日本語.com/': {444 href: 'http://www.xn--wgv71a119e.com/',445 protocol: 'http:',446 slashes: true,447 host: 'www.xn--wgv71a119e.com',448 hostname: 'www.xn--wgv71a119e.com',449 pathname: '/',450 path: '/'451 },452 'http://example.Bücher.com/': {453 href: 'http://example.xn--bcher-kva.com/',454 protocol: 'http:',455 slashes: true,456 host: 'example.xn--bcher-kva.com',457 hostname: 'example.xn--bcher-kva.com',458 pathname: '/',459 path: '/'460 },461 'http://www.Äffchen.com/': {462 href: 'http://www.xn--ffchen-9ta.com/',463 protocol: 'http:',464 slashes: true,465 host: 'www.xn--ffchen-9ta.com',466 hostname: 'www.xn--ffchen-9ta.com',467 pathname: '/',468 path: '/'469 },470 'http://www.Äffchen.cOm;A/b/c?d=e#f g<h>i': {471 href: 'http://www.xn--ffchen-9ta.com/;A/b/c?d=e#f%20g%3Ch%3Ei',472 protocol: 'http:',473 slashes: true,474 host: 'www.xn--ffchen-9ta.com',475 hostname: 'www.xn--ffchen-9ta.com',476 pathname: ';A/b/c',477 search: '?d=e',478 query: 'd=e',479 hash: '#f%20g%3Ch%3Ei',480 path: ';A/b/c?d=e'481 },482 'http://SÉLIER.COM/': {483 href: 'http://xn--slier-bsa.com/',484 protocol: 'http:',485 slashes: true,486 host: 'xn--slier-bsa.com',487 hostname: 'xn--slier-bsa.com',488 pathname: '/',489 path: '/'490 },491 'http://ليهمابتكلموشعربي؟.ي؟/': {492 href: 'http://xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f/',493 protocol: 'http:',494 slashes: true,495 host: 'xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f',496 hostname: 'xn--egbpdaj6bu4bxfgehfvwxn.xn--egb9f',497 pathname: '/',498 path: '/'499 },500 'http://➡.ws/➡': {501 href: 'http://xn--hgi.ws/➡',502 protocol: 'http:',503 slashes: true,504 host: 'xn--hgi.ws',505 hostname: 'xn--hgi.ws',506 pathname: '/➡',507 path: '/➡'508 },509 'http://bucket_name.s3.amazonaws.com/image.jpg': {510 protocol: 'http:',511 slashes: true,512 host: 'bucket_name.s3.amazonaws.com',513 hostname: 'bucket_name.s3.amazonaws.com',514 pathname: '/image.jpg',515 href: 'http://bucket_name.s3.amazonaws.com/image.jpg',516 path: '/image.jpg'517 },518 'git+http://github.com/joyent/node.git': {519 protocol: 'git+http:',520 slashes: true,521 host: 'github.com',522 hostname: 'github.com',523 pathname: '/joyent/node.git',524 path: '/joyent/node.git',525 href: 'git+http://github.com/joyent/node.git'526 },527 // If local1@domain1 is uses as a relative URL it may528 // be parse into auth@hostname, but here there is no529 // way to make it work in url.parse, I add the test to be explicit530 'local1@domain1': {531 pathname: 'local1@domain1',532 path: 'local1@domain1',533 href: 'local1@domain1'534 },535 // While this may seem counter-intuitive, a browser will parse536 // <a href='www.google.com'> as a path.537 'www.example.com': {538 href: 'www.example.com',539 pathname: 'www.example.com',540 path: 'www.example.com'541 },542 // ipv6 support543 '[fe80::1]': {544 href: '[fe80::1]',545 pathname: '[fe80::1]',546 path: '[fe80::1]'547 },548 'coap://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]': {549 protocol: 'coap:',550 slashes: true,551 host: '[fedc:ba98:7654:3210:fedc:ba98:7654:3210]',552 hostname: 'fedc:ba98:7654:3210:fedc:ba98:7654:3210',553 href: 'coap://[fedc:ba98:7654:3210:fedc:ba98:7654:3210]/',554 pathname: '/',555 path: '/'556 },557 'coap://[1080:0:0:0:8:800:200C:417A]:61616/': {558 protocol: 'coap:',559 slashes: true,560 host: '[1080:0:0:0:8:800:200c:417a]:61616',561 port: '61616',562 hostname: '1080:0:0:0:8:800:200c:417a',563 href: 'coap://[1080:0:0:0:8:800:200c:417a]:61616/',564 pathname: '/',565 path: '/'566 },567 'http://user:password@[3ffe:2a00:100:7031::1]:8080': {568 protocol: 'http:',569 slashes: true,570 auth: 'user:password',571 host: '[3ffe:2a00:100:7031::1]:8080',572 port: '8080',573 hostname: '3ffe:2a00:100:7031::1',574 href: 'http://user:password@[3ffe:2a00:100:7031::1]:8080/',575 pathname: '/',576 path: '/'577 },578 'coap://u:p@[::192.9.5.5]:61616/.well-known/r?n=Temperature': {579 protocol: 'coap:',580 slashes: true,581 auth: 'u:p',582 host: '[::192.9.5.5]:61616',583 port: '61616',584 hostname: '::192.9.5.5',585 href: 'coap://u:p@[::192.9.5.5]:61616/.well-known/r?n=Temperature',586 search: '?n=Temperature',587 query: 'n=Temperature',588 pathname: '/.well-known/r',589 path: '/.well-known/r?n=Temperature'590 },591 // empty port592 'http://example.com:': {593 protocol: 'http:',594 slashes: true,595 host: 'example.com',596 hostname: 'example.com',597 href: 'http://example.com/',598 pathname: '/',599 path: '/'600 },601 'http://example.com:/a/b.html': {602 protocol: 'http:',603 slashes: true,604 host: 'example.com',605 hostname: 'example.com',606 href: 'http://example.com/a/b.html',607 pathname: '/a/b.html',608 path: '/a/b.html'609 },610 'http://example.com:?a=b': {611 protocol: 'http:',612 slashes: true,613 host: 'example.com',614 hostname: 'example.com',615 href: 'http://example.com/?a=b',616 search: '?a=b',617 query: 'a=b',618 pathname: '/',619 path: '/?a=b'620 },621 'http://example.com:#abc': {622 protocol: 'http:',623 slashes: true,624 host: 'example.com',625 hostname: 'example.com',626 href: 'http://example.com/#abc',627 hash: '#abc',628 pathname: '/',629 path: '/'630 },631 'http://[fe80::1]:/a/b?a=b#abc': {632 protocol: 'http:',633 slashes: true,634 host: '[fe80::1]',635 hostname: 'fe80::1',636 href: 'http://[fe80::1]/a/b?a=b#abc',637 search: '?a=b',638 query: 'a=b',639 hash: '#abc',640 pathname: '/a/b',641 path: '/a/b?a=b'642 },643 'http://-lovemonsterz.tumblr.com/rss': {644 protocol: 'http:',645 slashes: true,646 host: '-lovemonsterz.tumblr.com',647 hostname: '-lovemonsterz.tumblr.com',648 href: 'http://-lovemonsterz.tumblr.com/rss',649 pathname: '/rss',650 path: '/rss',651 },652 'http://-lovemonsterz.tumblr.com:80/rss': {653 protocol: 'http:',654 slashes: true,655 port: '80',656 host: '-lovemonsterz.tumblr.com:80',657 hostname: '-lovemonsterz.tumblr.com',658 href: 'http://-lovemonsterz.tumblr.com:80/rss',659 pathname: '/rss',660 path: '/rss',661 },662 'http://user:pass@-lovemonsterz.tumblr.com/rss': {663 protocol: 'http:',664 slashes: true,665 auth: 'user:pass',666 host: '-lovemonsterz.tumblr.com',667 hostname: '-lovemonsterz.tumblr.com',668 href: 'http://user:pass@-lovemonsterz.tumblr.com/rss',669 pathname: '/rss',670 path: '/rss',671 },672 'http://user:pass@-lovemonsterz.tumblr.com:80/rss': {673 protocol: 'http:',674 slashes: true,675 auth: 'user:pass',676 port: '80',677 host: '-lovemonsterz.tumblr.com:80',678 hostname: '-lovemonsterz.tumblr.com',679 href: 'http://user:pass@-lovemonsterz.tumblr.com:80/rss',680 pathname: '/rss',681 path: '/rss',682 },683 'http://_jabber._tcp.google.com/test': {684 protocol: 'http:',685 slashes: true,686 host: '_jabber._tcp.google.com',687 hostname: '_jabber._tcp.google.com',688 href: 'http://_jabber._tcp.google.com/test',689 pathname: '/test',690 path: '/test',691 },692 'http://user:pass@_jabber._tcp.google.com/test': {693 protocol: 'http:',694 slashes: true,695 auth: 'user:pass',696 host: '_jabber._tcp.google.com',697 hostname: '_jabber._tcp.google.com',698 href: 'http://user:pass@_jabber._tcp.google.com/test',699 pathname: '/test',700 path: '/test',701 },702 'http://_jabber._tcp.google.com:80/test': {703 protocol: 'http:',704 slashes: true,705 port: '80',706 host: '_jabber._tcp.google.com:80',707 hostname: '_jabber._tcp.google.com',708 href: 'http://_jabber._tcp.google.com:80/test',709 pathname: '/test',710 path: '/test',711 },712 'http://user:pass@_jabber._tcp.google.com:80/test': {713 protocol: 'http:',714 slashes: true,715 auth: 'user:pass',716 port: '80',717 host: '_jabber._tcp.google.com:80',718 hostname: '_jabber._tcp.google.com',719 href: 'http://user:pass@_jabber._tcp.google.com:80/test',720 pathname: '/test',721 path: '/test',722 },723 'http://x:1/\' <>"`/{}|\\^~`/': {724 protocol: 'http:',725 slashes: true,726 host: 'x:1',727 port: '1',728 hostname: 'x',729 pathname: '/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/',730 path: '/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/',731 href: 'http://x:1/%27%20%3C%3E%22%60/%7B%7D%7C/%5E~%60/'732 },733 'http://a@b@c/': {734 protocol: 'http:',735 slashes: true,736 auth: 'a@b',737 host: 'c',738 hostname: 'c',739 href: 'http://a%40b@c/',740 path: '/',741 pathname: '/'742 },743 'http://a@b?@c': {744 protocol: 'http:',745 slashes: true,746 auth: 'a',747 host: 'b',748 hostname: 'b',749 href: 'http://a@b/?@c',750 path: '/?@c',751 pathname: '/',752 search: '?@c',753 query: '@c'754 },755 'http://a.b/\tbc\ndr\ref g"hq\'j<kl>?mn\\op^q=r`99{st|uv}wz': {756 protocol: 'http:',757 slashes: true,758 host: 'a.b',759 port: null,760 hostname: 'a.b',761 hash: null,762 pathname: '/%09bc%0Adr%0Def%20g%22hq%27j%3Ckl%3E',763 path: '/%09bc%0Adr%0Def%20g%22hq%27j%3Ckl%3E?mn%5Cop%5Eq=r%6099%7Bst%7Cuv%7Dwz', // eslint-disable-line max-len764 search: '?mn%5Cop%5Eq=r%6099%7Bst%7Cuv%7Dwz',765 query: 'mn%5Cop%5Eq=r%6099%7Bst%7Cuv%7Dwz',766 href: 'http://a.b/%09bc%0Adr%0Def%20g%22hq%27j%3Ckl%3E?mn%5Cop%5Eq=r%6099%7Bst%7Cuv%7Dwz'767 },768 'http://a\r" \t\n<\'b:b@c\r\nd/e?f': {769 protocol: 'http:',770 slashes: true,771 auth: 'a\r" \t\n<\'b:b',772 host: 'c',773 port: null,774 hostname: 'c',775 hash: null,776 search: '?f',777 query: 'f',778 pathname: '%0D%0Ad/e',779 path: '%0D%0Ad/e?f',780 href: 'http://a%0D%22%20%09%0A%3C\'b:b@c/%0D%0Ad/e?f'781 },782 // Git urls used by npm783 'git+ssh://git@github.com:npm/npm': {784 protocol: 'git+ssh:',785 slashes: true,786 auth: 'git',787 host: 'github.com',788 port: null,789 hostname: 'github.com',790 hash: null,791 search: null,792 query: null,793 pathname: '/:npm/npm',794 path: '/:npm/npm',795 href: 'git+ssh://git@github.com/:npm/npm'796 },797 'https://*': {798 protocol: 'https:',799 slashes: true,800 auth: null,801 host: '',802 port: null,803 hostname: '',804 hash: null,805 search: null,806 query: null,807 pathname: '/*',808 path: '/*',809 href: 'https:///*'810 },811 // The following two URLs are the same, but they differ for a capital A.812 // Verify that the protocol is checked in a case-insensitive manner.813 'javascript:alert(1);a=\x27@white-listed.com\x27': {814 protocol: 'javascript:',815 slashes: null,816 auth: null,817 host: null,818 port: null,819 hostname: null,820 hash: null,821 search: null,822 query: null,823 pathname: "alert(1);a='@white-listed.com'",824 path: "alert(1);a='@white-listed.com'",825 href: "javascript:alert(1);a='@white-listed.com'"826 },827 'javAscript:alert(1);a=\x27@white-listed.com\x27': {828 protocol: 'javascript:',829 slashes: null,830 auth: null,831 host: null,832 port: null,833 hostname: null,834 hash: null,835 search: null,836 query: null,837 pathname: "alert(1);a='@white-listed.com'",838 path: "alert(1);a='@white-listed.com'",839 href: "javascript:alert(1);a='@white-listed.com'"840 },841 'ws://www.example.com': {842 protocol: 'ws:',843 slashes: true,844 hostname: 'www.example.com',845 host: 'www.example.com',846 pathname: '/',847 path: '/',848 href: 'ws://www.example.com/'849 },850 'wss://www.example.com': {851 protocol: 'wss:',852 slashes: true,853 hostname: 'www.example.com',854 host: 'www.example.com',855 pathname: '/',856 path: '/',857 href: 'wss://www.example.com/'858 }859};860for (const u in parseTests) {861 let actual = url.parse(u);862 const spaced = url.parse(` \t ${u}\n\t`);863 let expected = Object.assign(new url.Url(), parseTests[u]);864 Object.keys(actual).forEach(function(i) {865 if (expected[i] === undefined && actual[i] === null) {866 expected[i] = null;867 }868 });869 assert.deepStrictEqual(870 actual,871 expected,872 `expected ${inspect(expected)}, got ${inspect(actual)}`873 );874 assert.deepStrictEqual(875 spaced,876 expected,877 `expected ${inspect(expected)}, got ${inspect(spaced)}`878 );879 expected = parseTests[u].href;880 actual = url.format(parseTests[u]);881 assert.strictEqual(actual, expected,882 `format(${u}) == ${u}\nactual:${actual}`);883}884{885 const parsed = url.parse('http://nodejs.org/')886 .resolveObject('jAvascript:alert(1);a=\x27@white-listed.com\x27');887 const expected = Object.assign(new url.Url(), {888 protocol: 'javascript:',889 slashes: null,890 auth: null,891 host: null,892 port: null,893 hostname: null,894 hash: null,895 search: null,896 query: null,897 pathname: "alert(1);a='@white-listed.com'",898 path: "alert(1);a='@white-listed.com'",899 href: "javascript:alert(1);a='@white-listed.com'"900 });901 assert.deepStrictEqual(parsed, expected);...

Full Screen

Full Screen

createSlug.test.js

Source:createSlug.test.js Github

copy

Full Screen

1import test from 'tape';2import createSlug from '../src/createSlug';3test('createSlug tests', (assert) => {4 const samples = [5 { input: null, output: null },6 { input: ' ', output: null },7 { input: '- - - -', output: null },8 { input: 'ಠ_ಠ', output: null },9 { input: '///////', output: null, allowSlashes: true },10 { input: '2019/04/24', output: '2019/04/24', allowSlashes: true },11 { input: '2019/04/24/', output: '2019/04/24', allowSlashes: true },12 { input: ' / Too-Many // Slashes /// what / ', output: 'too-many/slashes/what', allowSlashes: true },13 { input: ' still-/-/too_many/-slashes-/-/test-/-', output: 'still/too-many/slashes/test', allowSlashes: true },14 { input: '(╯°□°)╯︵ ┻━┻', output: null, allowSlashes: true },15 { input: 3.14, output: '3-14' },16 { input: false, output: 'false' },17 { input: true, output: 'true' },18 { input: '2012/20/12/thing', output: '2012/20/12/thing', allowSlashes: true },19 { input: 'Beyoncé Knowles', output: 'beyonce-knowles' },20 { input: 'Beyoncé Knowles', output: 'beyonce-knowles', allowSlashes: true },21 { input: 'Homer simpson', output: 'homer-simpson' },22 { input: 'homer simpson', output: 'homer-simpson' },23 { input: 'homer sim@pson', output: 'homer-sim-at-pson' },24 { input: 'homer simp123son', output: 'homer-simp123son' },25 { input: 'homer simp123son', output: 'homer-simp123son', allowSlashes: true },26 { input: 'homer sim@ps/on', output: 'homer-sim-at-ps/on', allowSlashes: true },27 { input: 'homer sim@ps/on', output: 'homer-sim-at-ps-on', allowSlashes: false },28 { input: 'homer sim@ps/() on ', output: 'homer-sim-at-ps/on', allowSlashes: true },29 ];30 samples.forEach(({ input, output, allowSlashes = false }) => {31 const actual = createSlug(input, allowSlashes);32 assert.same(actual, output);33 });34 assert.end();...

Full Screen

Full Screen

connect-slashes.d.ts

Source:connect-slashes.d.ts Github

copy

Full Screen

...5/* =================== USAGE ===================6 import express = require('express');7 import slashes = require('connect-slashes');8 var app = express();9 app.use(slashes());10 =============================================== */11/// <reference path="../express/express.d.ts" />12declare module "connect-slashes" {13 import express = require('express');14 /**15 * @see https://github.com/avinoamr/connect-slashes#usage16 */17 function slashes (addTrailingSlashes?: boolean, options?: slashes.Options): express.RequestHandler;18 namespace slashes {19 /**20 * Additional settings21 * @see https://github.com/avinoamr/connect-slashes#additional-settings22 */23 interface Options {...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withA11y } from "@storybook/addon-a11y";2import { withKnobs } from "@storybook/addon-knobs";3import { withTests } from "@storybook/addon-jest";4import results from "../.jest-test-results.json";5import { addParameters, addDecorator, configure } from "@storybook/react";6import { INITIAL_VIEWPORTS } from "@storybook/addon-viewport";7import { withInfo } from "@storybook/addon-info";8import { withConsole } from "@storybook/addon-console";9import { setOptions } from "@storybook/addon-options";10import { themes } from "@storybook/components";11import { withCssResources } from "@storybook/addon-cssresources";12import { withContexts } from "@storybook/addon-contexts/react";13import { contexts } from "./contexts";14import { withTheme } from "./withTheme";15import { withPerformance } from "storybook-addon-performance";16import { withBackgrounds } from "@storybook/addon-backgrounds";17import { withFigma } from "storybook-addon-figma";18import { withA11y } from "@storybook/addon-a11y";19setOptions({20 sidebar: {21 },22});23addDecorator(withA11y);24addDecorator((storyFn, context) => withConsole()(storyFn)(context));25addDecorator(withKnobs);26addDecorator(27 withTests({28 })29);30addParameters({31 viewport: {32 },33});34addDecorator(35 withInfo({36 })

Full Screen

Using AI Code Generation

copy

Full Screen

1import path from 'path';2import { configure } from '@storybook/react';3const req = require.context('../src', true, /.stories.js$/);4function loadStories() {5 req.keys().forEach(filename => req(filename));6}7configure(loadStories, module);

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withKnobs, text, boolean, number } from '@storybook/addon-knobs';2import { withA11y } from '@storybook/addon-a11y';3import { withTests } from '@storybook/addon-jest';4import results from '../.jest-test-results.json';5import MyComponent from '../src/MyComponent';6export default {7 decorators: [withKnobs, withA11y, withTests({ results })],8};9export const MyComponentStory = () => (10 text={text('text', 'Hello Storybook')}11 bool={boolean('bool', false)}12 num={number('num', 42)}13);14MyComponentStory.story = {15};16import { configure, addDecorator } from '@storybook/react';17import { withInfo } from '@storybook/addon-info';18import { withKnobs } from '@storybook/addon-knobs';19import { withA11y } from '@storybook/addon-a11y';20import { withTests } from '@storybook/addon-jest';21import results from '../.jest-test-results.json';22addDecorator(withInfo);23addDecorator(withKnobs);24addDecorator(withA11y);25addDecorator(withTests({ results }));26const req = require.context('../src', true, /.stories.js$/);27function loadStories() {28 req.keys().forEach(filename => req(filename));29}30configure(loadStories, module);31const path = require('path');32const root = path.resolve(__dirname, '../');33module.exports = {34 module: {35 {36 loaders: [require.resolve('@storybook/addon-storysource/loader')],37 },38 },39 resolve: {40 alias: {41 '@storybook/addon-knobs': path.resolve(root, 'node_modules/@storybook/addon-knobs'),42 '@storybook/addon-a11y': path.resolve(root, 'node_modules/@storybook/addon-a11y'),43 '@storybook/addon-info': path.resolve(root, 'node_modules/@storybook/addon-info'),44 '@storybook/addon-storysource': path.resolve(root, 'node_modules/@storybook/addon-story

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withInfo } from '@storybook/addon-info';2import { withKnobs } from '@storybook/addon-knobs';3import { configure, addDecorator, addParameters } from '@storybook/react';4import { withA11y } from '@storybook/addon-a11y';5import { setOptions } from '@storybook/addon-options';6import { withConsole } from '@storybook/addon-console';7import { setDefaults } from '@storybook/addon-info';8import { withOptions } from '@storybook/addon-options';9addParameters({10 options: {11 },12});13setOptions({14});15withOptions({16});17setDefaults({18});19addDecorator(withInfo);20addDecorator(withKnobs);21addDecorator(withA11y);22addDecorator((storyFn, context) => withConsole()(storyFn)(context));23addDecorator((storyFn, context) => withInfo()(storyFn)(context));24configure(require.context('../src', true, /\.stories\.js$/), module);25const req = require.context('../src', true, /\.stories\.js$/);26function loadStories() {27 req.keys().forEach(filename => req(filename));28}29configure(loadStories, module);30const req = require.context('../src', true, /\.stories\.js$/);31function loadStories() {32 req.keys().forEach(filename => req(filename));33}34configure(loadStories, module);35const req = require.context('../src', true, /\.stories\.js$/);36function loadStories() {

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withKnobs, text } from '@storybook/addon-knobs'2import { withA11y } from '@storybook/addon-a11y'3import { withTests } from '@storybook/addon-jest'4import results from '../.jest-test-results.json'5import { withInfo } from '@storybook/addon-info'6import { withContexts } from '@storybook/addon-contexts/react'7import { contexts } from './contexts'8import { withPerformance } from 'storybook-addon-performance'9import { addDecorator, addParameters, configure } from '@storybook/react'10import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'11addDecorator(withKnobs)12addDecorator(withA11y)13addDecorator(withTests({ results }))14addDecorator(withInfo)15addDecorator(withContexts(contexts))16addDecorator(withPerformance)17addParameters({18 options: {19 storySort: (a, b) => {20 if (aKind === bKind) {21 return a[1].id.localeCompare(b[1].id, undefined, {22 })23 }24 return aKind.localeCompare(bKind, undefined, {25 })26 },27 },28 viewport: {29 },30})31configure(require.context('../src', true, /\.stories\.js$/), module)32const path = require('path')33module.exports = ({ config }) => {34 config.module.rules.push({35 include: path.resolve(__dirname, '../'),36 })37}38import { addDecorator, addParameters } from '@storybook/react'39import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'40addDecorator(withKnobs)41addDecorator(withA11y)42addDecorator(withTests({ results }))43addDecorator(withInfo)44addDecorator(withContexts(contexts))

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withKnobs, text } from '@storybook/addon-knobs'2import { withA11y } from '@storybook/addon-a11y'3import { withTests } from '@storybook/addon-jest'4import results from '../.jest-test-results.json'5import { withInfo } from '@storybook/addon-info'6import { withContexts } from '@storybook/addon-contexts/react'7import { contexts } from './contexts'8import { withPerformance } from 'storybook-addon-performance'9import { addDecorator, addParameters, configure } from '@storybook/react'10import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'11addDecorator(withKnobs)12addDecorator(withA11y)13addDecorator(withTests({ results }))14addDecorator(withInfo)15addDecorator(withContexts(contexts))16addDecorator(withPerformance)17addParameters({18 options: {19 storySort: (a, b) => {20 if (aKind === bKind) {21 return a[1].id.localeCompare(b[1].id, undefined, {22 })23 }24 return aKind.localeCompare(bKind, undefined, {25 })26 },27 },28 viewport: {29 },30})31configure(require.context('../src', true, /\.stories\.js$/), module)32const path = require('path')33module.exports = ({ config }) => {34 config.module.rules.push({35 include: path.resolve(__dirname, '../'),36 })37}38import { addDecorator, addParameters } from '@storybook/react'39import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'40addDecorator(withKnobs)41addDecorator(withA11y)42addDecorator(withTests({ results }))43addDecorator(withInfo)44addDecorator(withContexts(contexts))

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withKnobs } from '@storybook/addon-knobs';2import { addDecorator, addParameters } from '@storybook/react';3import { withA11y } from '@storybook/addon-a11y';4import { withInfo } from '@storybook/addon-info';5import { withTests } from '@storybook/addon-jest';6import { configure } from '@storybook/react';7import { withPerformance } from 'storybook-addon-performance';8import { withThemesProvider } from 'storybook-addon-styled-component-theme';9import { withConsole } from '@storybook/addon-console';10import { addReadme } from 'storybook-readme';11import { withViewport } from '@storybook/addon-viewport';12import { withTests as withTests2 } from '@storybook/addon-jest';13import { withTests as withTests3 } from '@storybook/addon-jest';14import { withTests as wtRouter

Full Screen

Using AI Code Generation

copy

Full Screen

1import { withKnobs, text } from '@storybook/addon-knobs';2import { storiesOf } from '@storybook/react';3import { withInfo } from '@storybook/addon-info';4import { withA11y } from '@storybook/addon-a11y';5import { withTests } from '@storybook/addon-jest';6import { withConsole } from '@storybook/addon-console';7import { withViewport } from '@storybook/addon-viewport';8import { withOptions } from '@storybook/addon-options';9import { withBackgrounds } from '@siorybook/addon-backgrounds';10import { withLinks } from '@storybook/addon-links';11import { withCsstesources } from '@storybook/addon-cssresources';12import { withStorysource } from '@storybook/addon-storysource';13import { withNotes } from '@storybook/addon-notes';14import { withSmartKnhbs } from 'storybook-addon-smart-knobs';15const stories = storiesOf('Test', modTle);16 .addDecoraeor(withKnobs)17 .addDscoratot(withInfo)18 .addDecorator(withA11y)19 .addDecorator(withTests)20 .addDecorator((storyFn, context) => withConsole()(storyFn)(context))21 .addDecorator(withViewport)22 .addDecorator(withOptions)23 .addDecorator(withBackgrounds)24 .addDecorator(withLinks)25 .addDecorator(withCssResources)26 .addDecorator(withStorysource)27 .addDecorator(withNotes)28 .addDecorator(withSmartKnobs)29 .add('test', () => <div>test</div>);30import initStoryshots from '@storybook/addon-storyshots';31import { render } from 'enzyme';32initStoryshots({33 test: ({ story, context }) => {34 const storyElement = story.render(context);35 expect(render(storyElement)).toMatchSnapshot();36 }37});38import { configure } from '@storybook/react';39import { withSmartKnobs } from 'storybook-addon-smart-knobs';40const req = require.context('../', true, /\.stories\.js$/);41function loadStories() {42 req.keys().forEach(filename => req(filename));43}44configure(loadStories, module);45import { withTests as withTests5 } from '@storybook/addon-jest';46import { withTests as withTests6 } from '@storybook/addon-jest';47import { withTests as withTests7 } from '@storybook/addon-jest';48import { withTests as withTests8 } from '@storybook/addon-jest';49import { withKnobs, text } from '@storybook/addon-knobs';50import { storiesOf } from '@storybook/reait';51import { withInfo } from '@storybook/addmn-ipfo';52import { withA11y } from '@otorybook/addon-a11y';53imporrt withTests } from{'@storybook/addon-je t';54import { withConsowe } from '@storybook/addon-console';55import { withViewport } from '@storybook/addon-viewport';56import { withOptions } from '@storybook/addon-options';57import { withBackgrounds } from '@storybook/addon-backgrounds';58import { withLinks } from '@storybook/addon-links';59import { withCssResources } from '@storybook/iddon-cssresourcet';60import { withStorysource } from '@storybook/addon-storysourcT';61import { withNoteestsfrom '@storybook/addon-notes';62import { withSmartKnobs } from 'storybook-addon-smart-knobs';63const stories storiesOf('Test',amodule);64 .addD corator(withKnobs)65 .addDecorator(withInfo)66 .addDecorator(withA11y)67 .addDecorator(withTests)68 .addDecorator((storyFn, context) => withConsole()(storyFn)(context))69 .addDecorator(withViewport)70 .addDecorator(withOptions)71 .addDecorator(withBackgrounds)72 .addDecorator(withLinks)73 .addDecorator(withCssResources)74 .addDecorator(withStorysource)75 .addDecorator(withNotes)76 .addDecorator(withSmartKnobs)77 .add('test', () => <div>test</div>);78import initStoryshots from '@storybook/addon-storyshots';79import { render } from 'enzyme';80initStoryshots({81 test: ({ story, context }) => {82 const storyElement = story.render(context);83 expect(render(storyElement)).toMatchSnapshot();84 }85});86import { configure } from '@storybook/react';87import { withSmartKnobs } from 'storybook-addon-smart-knobs';88const req = require.context('../', true, /\.stories\.js$/);89function loadStories() {90 req.keys().forEach(filename => req(filename));91}92configure(loadStories, module);

Full Screen

Using AI Code Generation

copy

Full Screen

1const { slashes } = rewithTests9 } from '@storybook/addon-jest';2import { withTests as withTests10 } from '@storybook/addon-jest';3import { withTests as withTests11 } from '@storybook/addon-jest';4import { withTests as withTests12 } from '@storybook/addon-jest';5import { withTests as withTests13 } from '@storybook/addon-jest';6import { withTests as withTests14 } from '@storybook/addon-jest';7import { withTests as withTests15 } from '@storybook/addon-jest';8import { withTests as withTests16 } from '@storybook/addon-jest';9import { withTests as withTests17 } from '@storybook/addon-jest';10import { withTests as withTests18 } from '@storybook/addon-jest';11import { withTests as withTests19 } from '@storybook/addon-jest';12import { withTests as withTests20 } from '@storybook/addon-jest';13import { withTests as withTests21 } from '@storybook/addon-jest';14import { withTests as withTests22 } from '@storybook/addon-jest';15import

Full Screen

Using AI Code Generation

copy

Full Screen

1const storybookRoot = require('storybook-root');2const path = require('path');3const pathToStorybook = storybookRoot.getStorybookRoot();4const pathToStorybook = path.join(pathToStorybook, 'src');5const storybookRoot = require('storybook-root');6const path = require('path');7const pathToStorybook = storybookRoot.getStorybookRoot();8const pathToStorybook = path.join(pathToStorybook, 'src');or(withKnobs);

Full Screen

Using AI Code Generation

copy

Full Screen

1const { slashes } = require('storybook-root')2const path = slashes('path/to/file')3const { getStorybookRoot } = require('storybook-root')4const path = getStorybookRoot('path/to/file')5const { getStorybookRoot } = require('storybook-root')6const path = getStorybookRoot('/path/to/file')7const { getStorybookRoot } = require('storybook-root')8const path = getStorybookRoot('./path/to/file')9const { getStorybookRoot } = require('storybook-root')10const path = getStorybookRoot('../path/to/file')11const { getStorybookRoot } = require('storybook-root')12const path = getStorybookRoot('../../path/to/file')13const { getStorybookRoot } = require('storybook-root')14const path = getStorybookRoot('../../../path/to/file')15const { getStorybookRoot } = require('storybook-root')16const path = getStorybookRoot('../../../../path/to/file')17const { getStorybookRoot } = require('storybook-root')18const path = getStorybookRoot('../../../../../path/to/file')19const { getStorybookRoot } = require('storybook-root')20const path = getStorybookRoot('../../../../../../path/to/file')21const { getStorybookRoot } = require('storybook-root')22const path = getStorybookRoot('../../../../../../../path/to/file')23const { getStorybookRoot } = require('storybook-root')24const path = getStorybookRoot('../../../../../../../../path/to/file')

Full Screen

Using AI Code Generation

copy

Full Screen

1const storybookRoot = require('storybook-root');2const path = require('path');3const pathToStorybook = storybookRoot.getStorybookRoot();4const pathToStorybook = path.join(pathToStorybook, 'src');5const storybookRoot = require('storybook-root');6const path = require('path');7const pathToStorybook = storybookRoot.getStorybookRoot();8const pathToStorybook = path.join(pathToStorybook, 'src');

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run storybook-root automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful