DocumentHelperTests.coffee 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. sinon = require('sinon')
  2. chai = require('chai')
  3. should = chai.should()
  4. expect = chai.expect
  5. modulePath = "../../../../app/js/Features/Documents/DocumentHelper.js"
  6. SandboxedModule = require('sandboxed-module')
  7. describe "DocumentHelper", ->
  8. beforeEach ->
  9. @DocumentHelper = SandboxedModule.require modulePath
  10. describe "getTitleFromTexContent", ->
  11. it "should return the title", ->
  12. document = "\\begin{document}\n\\title{foo}\n\\end{document}"
  13. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "foo"
  14. it "should return the title if surrounded by space", ->
  15. document = "\\begin{document}\n \\title{foo} \n\\end{document}"
  16. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "foo"
  17. it "should return null if there is no title", ->
  18. document = "\\begin{document}\n\\end{document}"
  19. expect(@DocumentHelper.getTitleFromTexContent(document)).to.eql null
  20. it "should accept an array", ->
  21. document = ["\\begin{document}","\\title{foo}","\\end{document}"]
  22. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "foo"
  23. it "should parse out formatting elements from the title", ->
  24. document = "\\title{\\textbf{\\large{Second Year LaTeX Exercise}}}"
  25. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "Second Year LaTeX Exercise"
  26. it "should ignore junk after the title", ->
  27. document = "\\title{wombat} potato"
  28. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "wombat"
  29. it "should ignore junk before the title", ->
  30. document = "% this is something that v1 relied on, even though it seems odd \\title{wombat}"
  31. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "wombat"
  32. # NICETOHAVE: Current implementation doesn't do this
  33. #it "should keep content that surrounds formatting elements", ->
  34. # document = "\\title{Second Year \\large{LaTeX} Exercise}"
  35. # expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "Second Year LaTeX Exercise"
  36. it "should collapse whitespace", ->
  37. document = "\\title{Second Year LaTeX Exercise}"
  38. expect(@DocumentHelper.getTitleFromTexContent(document)).to.equal "Second Year LaTeX Exercise"
  39. describe "detex", ->
  40. # note, there are a number of tests for getTitleFromTexContent that also test cases here
  41. it 'leaves a non-TeX string unchanged', ->
  42. expect(@DocumentHelper.detex('')).to.equal ''
  43. expect(@DocumentHelper.detex('a')).to.equal 'a'
  44. expect(@DocumentHelper.detex('a a')).to.equal 'a a'
  45. it 'collapses spaces', ->
  46. expect(@DocumentHelper.detex('a a')).to.equal 'a a'
  47. expect(@DocumentHelper.detex('a \n a')).to.equal 'a \n a'
  48. it 'replaces named commands', ->
  49. expect(@DocumentHelper.detex('\\LaTeX')).to.equal 'LaTeX'
  50. expect(@DocumentHelper.detex('\\TikZ')).to.equal 'TikZ'
  51. expect(@DocumentHelper.detex('\\TeX')).to.equal 'TeX'
  52. expect(@DocumentHelper.detex('\\BibTeX')).to.equal 'BibTeX'
  53. it 'removes general commands', ->
  54. expect(@DocumentHelper.detex('\\foo')).to.equal ''
  55. expect(@DocumentHelper.detex('\\foo{}')).to.equal ''
  56. expect(@DocumentHelper.detex('\\foo~Test')).to.equal 'Test'
  57. expect(@DocumentHelper.detex('\\"e')).to.equal 'e'
  58. expect(@DocumentHelper.detex('\\textit{e}')).to.equal 'e'
  59. it 'leaves basic math', ->
  60. expect(@DocumentHelper.detex('$\\cal{O}(n^2)$')).to.equal 'O(n^2)'
  61. it 'removes line spacing commands', ->
  62. expect(@DocumentHelper.detex('a \\\\[1.50cm] b')).to.equal 'a b'
  63. describe "contentHasDocumentclass", ->
  64. it "should return true if the content has a documentclass", ->
  65. document = ["% line", "% line", "% line", "\\documentclass"]
  66. expect(@DocumentHelper.contentHasDocumentclass(document)).to.equal true
  67. it "should allow whitespace before the documentclass", ->
  68. document = ["% line", "% line", "% line", " \\documentclass"]
  69. expect(@DocumentHelper.contentHasDocumentclass(document)).to.equal true
  70. it "should not allow non-whitespace before the documentclass", ->
  71. document = ["% line", "% line", "% line", " asdf \\documentclass"]
  72. expect(@DocumentHelper.contentHasDocumentclass(document)).to.equal false
  73. it "should return false when there is no documentclass", ->
  74. document = ["% line", "% line", "% line"]
  75. expect(@DocumentHelper.contentHasDocumentclass(document)).to.equal false