serialize.test.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. 'use strict'
  2. const tap = require('tap')
  3. const test = tap.test
  4. const URI = require('../')
  5. test('URI Serialize', (t) => {
  6. let components = {
  7. scheme: undefined,
  8. userinfo: undefined,
  9. host: undefined,
  10. port: undefined,
  11. path: undefined,
  12. query: undefined,
  13. fragment: undefined
  14. }
  15. t.equal(URI.serialize(components), '', 'Undefined Components')
  16. components = {
  17. scheme: '',
  18. userinfo: '',
  19. host: '',
  20. port: 0,
  21. path: '',
  22. query: '',
  23. fragment: ''
  24. }
  25. t.equal(URI.serialize(components), '//@:0?#', 'Empty Components')
  26. components = {
  27. scheme: 'uri',
  28. userinfo: 'foo:bar',
  29. host: 'example.com',
  30. port: 1,
  31. path: 'path',
  32. query: 'query',
  33. fragment: 'fragment'
  34. }
  35. t.equal(URI.serialize(components), 'uri://foo:bar@example.com:1/path?query#fragment', 'All Components')
  36. components = {
  37. scheme: 'uri',
  38. host: 'example.com',
  39. port: '9000'
  40. }
  41. t.equal(URI.serialize(components), 'uri://example.com:9000', 'String port')
  42. t.equal(URI.serialize({ path: '//path' }), '/%2Fpath', 'Double slash path')
  43. t.equal(URI.serialize({ path: 'foo:bar' }), 'foo%3Abar', 'Colon path')
  44. t.equal(URI.serialize({ path: '?query' }), '%3Fquery', 'Query path')
  45. t.equal(URI.serialize({ host: '10.10.10.10' }), '//10.10.10.10', 'IPv4address')
  46. // mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4)
  47. t.equal(URI.serialize({ host: '10.10.10.10.example.com' }), '//10.10.10.10.example.com', 'Mixed IPv4address & reg-name')
  48. // IPv6address
  49. t.equal(URI.serialize({ host: '2001:db8::7' }), '//[2001:db8::7]', 'IPv6 Host')
  50. t.equal(URI.serialize({ host: '::ffff:129.144.52.38' }), '//[::ffff:129.144.52.38]', 'IPv6 Mixed Host')
  51. t.equal(URI.serialize({ host: '2606:2800:220:1:248:1893:25c8:1946' }), '//[2606:2800:220:1:248:1893:25c8:1946]', 'IPv6 Full Host')
  52. // IPv6address with zone identifier, RFC 6874
  53. t.equal(URI.serialize({ host: 'fe80::a%en1' }), '//[fe80::a%25en1]', 'IPv6 Zone Unescaped Host')
  54. t.equal(URI.serialize({ host: 'fe80::a%25en1' }), '//[fe80::a%25en1]', 'IPv6 Zone Escaped Host')
  55. t.end()
  56. })
  57. test('WS serialize', (t) => {
  58. t.equal(URI.serialize({ scheme: 'ws' }), 'ws:')
  59. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com' }), 'ws://example.com')
  60. t.equal(URI.serialize({ scheme: 'ws', resourceName: '/' }), 'ws:')
  61. t.equal(URI.serialize({ scheme: 'ws', resourceName: '/foo' }), 'ws:/foo')
  62. t.equal(URI.serialize({ scheme: 'ws', resourceName: '/foo?bar' }), 'ws:/foo?bar')
  63. t.equal(URI.serialize({ scheme: 'ws', secure: false }), 'ws:')
  64. t.equal(URI.serialize({ scheme: 'ws', secure: true }), 'wss:')
  65. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo' }), 'ws://example.com/foo')
  66. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar' }), 'ws://example.com/foo?bar')
  67. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', secure: false }), 'ws://example.com')
  68. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', secure: true }), 'wss://example.com')
  69. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: false }), 'ws://example.com/foo?bar')
  70. t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: true }), 'wss://example.com/foo?bar')
  71. t.end()
  72. })
  73. test('WSS serialize', (t) => {
  74. t.equal(URI.serialize({ scheme: 'wss' }), 'wss:')
  75. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com' }), 'wss://example.com')
  76. t.equal(URI.serialize({ scheme: 'wss', resourceName: '/' }), 'wss:')
  77. t.equal(URI.serialize({ scheme: 'wss', resourceName: '/foo' }), 'wss:/foo')
  78. t.equal(URI.serialize({ scheme: 'wss', resourceName: '/foo?bar' }), 'wss:/foo?bar')
  79. t.equal(URI.serialize({ scheme: 'wss', secure: false }), 'ws:')
  80. t.equal(URI.serialize({ scheme: 'wss', secure: true }), 'wss:')
  81. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo' }), 'wss://example.com/foo')
  82. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar' }), 'wss://example.com/foo?bar')
  83. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', secure: false }), 'ws://example.com')
  84. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', secure: true }), 'wss://example.com')
  85. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar', secure: false }), 'ws://example.com/foo?bar')
  86. t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar', secure: true }), 'wss://example.com/foo?bar')
  87. t.end()
  88. })
  89. test('URN serialize', (t) => {
  90. // example from RFC 2141
  91. const components = {
  92. scheme: 'urn',
  93. nid: 'foo',
  94. nss: 'a123,456'
  95. }
  96. t.equal(URI.serialize(components), 'urn:foo:a123,456')
  97. // example from RFC 4122
  98. let uuidcomponents = {
  99. scheme: 'urn',
  100. nid: 'uuid',
  101. uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
  102. }
  103. t.equal(URI.serialize(uuidcomponents), 'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
  104. uuidcomponents = {
  105. scheme: 'urn',
  106. nid: 'uuid',
  107. uuid: 'notauuid-7dec-11d0-a765-00a0c91e6bf6'
  108. }
  109. t.equal(URI.serialize(uuidcomponents), 'urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6')
  110. t.end()
  111. })
  112. test('URN NID Override', (t) => {
  113. let components = URI.parse('urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6', { nid: 'uuid' })
  114. t.equal(components.error, undefined, 'errors')
  115. t.equal(components.scheme, 'urn', 'scheme')
  116. t.equal(components.path, undefined, 'path')
  117. t.equal(components.nid, 'foo', 'nid')
  118. t.equal(components.nss, undefined, 'nss')
  119. t.equal(components.uuid, 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6', 'uuid')
  120. components = {
  121. scheme: 'urn',
  122. nid: 'foo',
  123. uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
  124. }
  125. t.equal(URI.serialize(components, { nid: 'uuid' }), 'urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
  126. t.end()
  127. })