slack-message-parser

JavaScript library for parsing Slack message format (mrkdwn)

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
import { parse } from '../src'

import { bold, code, emoji, italic, url, root, strike, text } from './helpers'

describe('#4', () => {
  it('Should parse correctly', () => {
    const test =
      'This is _the_ *first* ~program~ `code of the rest of this` *file*, err, _file_, and by ~file~, I mean *file*.'

    const expected = root([
      text('This is '),
      italic([text('the')]),
      text(' '),
      bold([text('first')]),
      text(' '),
      strike([text('program')]),
      text(' '),
      code('code of the rest of this'),
      text(' '),
      bold([text('file')]),
      text(', err, '),
      italic([text('file')]),
      text(', and by '),
      strike([text('file')]),
      text(', I mean '),
      bold([text('file')]),
      text('.')
    ])

    expect(parse(test)).toEqual(expected)
  })
})

describe('#6', () => {
  it('Treat only "skin-tone-*" as variations', () => {
    expect(parse(':a::b:')).toEqual(root([emoji('a'), emoji('b')]))
  })
})

// https://github.com/pocka/slack-message-parser/issues/13
describe('#13', () => {
  // According to RFC 2368, spaces in mailto URL should be encoded
  // but Slack accpets unencoded spaces.
  it('Parse mailto link contains spaces', () => {
    expect(
      parse('<mailto:foo@bar.baz?subject=Hello, World&body=https://foo.bar>')
    ).toEqual(
      root([
        url('mailto:foo@bar.baz?subject=Hello, World&body=https://foo.bar')
      ])
    )
  })
})

describe('#22', () => {
  it('doesnt match colons and new lines as emojis', () => {
    expect(parse('Test:\nTest 2:\nTest 3:')).toEqual(
      root([text('Test:\nTest 2:\nTest 3:')])
    )
  })
})