CMNodeSpec.m 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. @import Quick;
  2. @import Nimble;
  3. #import <CocoaMarkdown/CocoaMarkdown.h>
  4. #import "CMNode_Private.h"
  5. QuickSpecBegin(CMNodeSpec)
  6. describe(@"tree traversal", ^{
  7. it(@"should traverse the tree", ^{
  8. CMNode *parent = [[CMNode alloc] initWithNode:cmark_node_new(CMARK_NODE_DOCUMENT) freeWhenDone:YES];
  9. CMNode *node = [[CMNode alloc] initWithNode:cmark_node_new(CMARK_NODE_PARAGRAPH) freeWhenDone:NO];
  10. CMNode *previous = [[CMNode alloc] initWithNode:cmark_node_new(CMARK_NODE_PARAGRAPH) freeWhenDone:NO];
  11. CMNode *next = [[CMNode alloc] initWithNode:cmark_node_new(CMARK_NODE_PARAGRAPH) freeWhenDone:NO];
  12. cmark_node_append_child(parent.node, node.node);
  13. cmark_node_insert_before(node.node, previous.node);
  14. cmark_node_insert_after(node.node, next.node);
  15. expect(node.parent).to(equal(parent));
  16. expect(node.next).to(equal(next));
  17. expect(node.previous).to(equal(previous));
  18. expect(parent.firstChild).to(equal(previous));
  19. expect(parent.lastChild).to(equal(next));
  20. });
  21. });
  22. describe(@"attributes", ^{
  23. it(@"should get general attributes", ^{
  24. cmark_node *para = cmark_node_new(CMARK_NODE_PARAGRAPH);
  25. CMNode *node = [[CMNode alloc] initWithNode:para freeWhenDone:YES];
  26. expect(@(node.type)).to(equal(@(CMARK_NODE_PARAGRAPH)));
  27. expect(node.humanReadableType).toNot(beNil());
  28. });
  29. it(@"should get text attributes", ^{
  30. cmark_node *text = cmark_node_new(CMARK_NODE_TEXT);
  31. cmark_node_set_literal(text, "hello world");
  32. CMNode *node = [[CMNode alloc] initWithNode:text freeWhenDone:YES];
  33. expect(node.stringValue).to(equal(@"hello world"));
  34. });
  35. it(@"should get header attributes", ^{
  36. cmark_node *header = cmark_node_new(CMARK_NODE_HEADER);
  37. cmark_node_set_header_level(header, 2);
  38. CMNode *node = [[CMNode alloc] initWithNode:header freeWhenDone:YES];
  39. expect(@(node.headerLevel)).to(equal(@2));
  40. });
  41. it(@"should get fenced code attributes", ^{
  42. cmark_node *code = cmark_node_new(CMARK_NODE_CODE_BLOCK);
  43. cmark_node_set_fence_info(code, "objective-c");
  44. CMNode *node = [[CMNode alloc] initWithNode:code freeWhenDone:YES];
  45. expect(node.fencedCodeInfo).to(equal(@"objective-c"));
  46. });
  47. it(@"should get list attributes", ^{
  48. cmark_node *list = cmark_node_new(CMARK_NODE_LIST);
  49. cmark_node_set_list_type(list, CMARK_ORDERED_LIST);
  50. cmark_node_set_list_delim(list, CMARK_PERIOD_DELIM);
  51. cmark_node_set_list_tight(list, 1);
  52. cmark_node_set_list_start(list, 2);
  53. CMNode *node = [[CMNode alloc] initWithNode:list freeWhenDone:YES];
  54. expect(@(node.listType)).to(equal(@(CMARK_ORDERED_LIST)));
  55. expect(@(node.listDelimeterType)).to(equal(@(CMARK_PERIOD_DELIM)));
  56. expect(@(node.listTight)).to(beTruthy());
  57. expect(@(node.listStartingNumber)).to(equal(@2));
  58. });
  59. it(@"should get URL attributes", ^{
  60. cmark_node *link = cmark_node_new(CMARK_NODE_LINK);
  61. cmark_node_set_url(link, "http://indragie.com");
  62. cmark_node_set_title(link, "indragie");
  63. CMNode *node = [[CMNode alloc] initWithNode:link freeWhenDone:YES];
  64. expect(node.URL).to(equal([NSURL URLWithString:@"http://indragie.com"]));
  65. expect(node.title).to(equal(@"indragie"));
  66. });
  67. });
  68. QuickSpecEnd