read-escape-sequence.test.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. 'use strict'
  2. const tap = require('tap')
  3. const readEscapeSequence = require('./read-escape-sequence')
  4. tap.test('throws for bad sequence', async t => {
  5. const input = Buffer.from('foo\\ø')
  6. t.throws(
  7. () => readEscapeSequence({ searchBuffer: input, startPos: 3 }),
  8. Error('invalid hex code in escape sequence')
  9. )
  10. })
  11. tap.test('reads a single ascii sequence', async t => {
  12. const input = Buffer.from('foo\\#bar', 'utf8')
  13. const { parsed, endPos } = readEscapeSequence({
  14. searchBuffer: input,
  15. startPos: 3
  16. })
  17. t.equal(parsed.toString(), '#')
  18. t.equal(endPos, 5)
  19. })
  20. tap.test('reads a sequence of ascii sequences', async t => {
  21. const input = Buffer.from('foo\\#\\!bar', 'utf8')
  22. const { parsed, endPos } = readEscapeSequence({
  23. searchBuffer: input,
  24. startPos: 3
  25. })
  26. t.equal(parsed.toString(), '#!')
  27. t.equal(endPos, 7)
  28. })
  29. tap.test('reads a single hex sequence', async t => {
  30. const input = Buffer.from('foo\\2abar', 'utf8')
  31. const { parsed, endPos } = readEscapeSequence({
  32. searchBuffer: input,
  33. startPos: 3
  34. })
  35. t.equal(parsed.toString(), '*')
  36. t.equal(endPos, 6)
  37. })
  38. tap.test('reads 2-byte utf-8 sequence', async t => {
  39. const input = Buffer.from('fo\\c5\\8f bar')
  40. const { parsed, endPos } = readEscapeSequence({
  41. searchBuffer: input,
  42. startPos: 2
  43. })
  44. t.equal(parsed.toString(), 'ŏ')
  45. t.equal(endPos, 8)
  46. })
  47. tap.test('reads 3-byte utf-8 sequence', async t => {
  48. const input = Buffer.from('fo\\e0\\b0\\b0 bar')
  49. const { parsed, endPos } = readEscapeSequence({
  50. searchBuffer: input,
  51. startPos: 2
  52. })
  53. t.equal(parsed.toString(), 'ర')
  54. t.equal(endPos, 11)
  55. })
  56. tap.test('reads 4-byte utf-8 sequence', async t => {
  57. const input = Buffer.from('fo\\f0\\92\\84\\ad bar')
  58. const { parsed, endPos } = readEscapeSequence({
  59. searchBuffer: input,
  60. startPos: 2
  61. })
  62. t.equal(parsed.toString(), '𒄭')
  63. t.equal(endPos, 14)
  64. })