test.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var select = require('../xpath.js')
  2. , dom = require('xmldom').DOMParser
  3. , assert = require('assert')
  4. , fs = require('fs')
  5. module.exports = {
  6. "get simple xpath": function (test) {
  7. var xml = "<book><title>Harry Potter</title></book>"
  8. var doc = new dom().parseFromString(xml)
  9. var nodes = select(doc, "//title")
  10. assert.equal("title", nodes[0].localName)
  11. assert.equal("Harry Potter", nodes[0].firstChild.data) //first child is the text() node
  12. assert.equal("<title>Harry Potter</title>", nodes[0].toString())
  13. test.done()
  14. },
  15. "get text node": function (test) {
  16. var xml = "<book><title>Harry Potter</title></book>"
  17. var doc = new dom().parseFromString(xml)
  18. var title = select(doc, "//title/text()")[0].data
  19. assert.equal("Harry Potter", title)
  20. test.done()
  21. },
  22. "get xpath with namespaces": function (test) {
  23. var xml = "<book><title xmlns='myns'>Harry Potter</title></book>"
  24. var doc = new dom().parseFromString(xml)
  25. var nodes = select(doc, "//*[local-name(.)='title' and namespace-uri(.)='myns']")
  26. assert.equal("title", nodes[0].localName)
  27. assert.equal("myns", nodes[0].namespaceURI)
  28. test.done()
  29. },
  30. "get attribute": function (test) {
  31. var xml = "<book author='J. K. Rowling'><title>Harry Potter</title></book>"
  32. var doc = new dom().parseFromString(xml)
  33. var author = select(doc, "/book/@author")[0].value
  34. assert.equal("J. K. Rowling", author)
  35. test.done()
  36. },
  37. "last() function": function (test) {
  38. var xml = "<root><x><y id='1' /><p /><y id='2' /><z /></x><y id='3'/></root>"
  39. var doc = new dom().parseFromString(xml)
  40. var res = select(doc, "//y[last()]")
  41. assert.equal(2, res.length)
  42. assert.equal("2", res[0].getAttribute("id"))
  43. assert.equal("3", res[1].getAttribute("id"))
  44. test.done()
  45. },
  46. "last() function with parentheses": function (test) {
  47. var xml = "<root><x><y id='1' /><y id='2' /><z /></x><y id='3'/></root>"
  48. var doc = new dom().parseFromString(xml)
  49. var res = select(doc, "(//y)[last()]")
  50. assert.equal(1, res.length)
  51. assert.equal("3", res[0].getAttribute("id"))
  52. test.done()
  53. },
  54. "following axis": function (test) {
  55. var xml = fs.readFileSync('./tests/following.xml').toString()
  56. var doc = new dom().parseFromString(xml)
  57. var res = select(doc, "//h4[text()='Alabama']/following::ul[1]/li/a/text()")
  58. assert.equal(2, res.length)
  59. assert.equal("alabama-city111", res[0].data)
  60. assert.equal("alabama-city222", res[1].data)
  61. test.done()
  62. },
  63. }