node_test.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  1. package yaml_test
  2. import (
  3. "os"
  4. . "gopkg.in/check.v1"
  5. "gopkg.in/niemeyer/ynext.v3"
  6. )
  7. var nodeTests = []struct {
  8. yaml string
  9. tag string
  10. node yaml.Node
  11. }{
  12. {
  13. "null\n",
  14. "!!null",
  15. yaml.Node{
  16. Kind: yaml.DocumentNode,
  17. Line: 1,
  18. Column: 1,
  19. Anchors: map[string]*yaml.Node{},
  20. Children: []*yaml.Node{{
  21. Kind: yaml.ScalarNode,
  22. Value: "null",
  23. Line: 1,
  24. Column: 1,
  25. Tag: "",
  26. }},
  27. },
  28. }, {
  29. "foo\n",
  30. "!!str",
  31. yaml.Node{
  32. Kind: yaml.DocumentNode,
  33. Line: 1,
  34. Column: 1,
  35. Anchors: map[string]*yaml.Node{},
  36. Children: []*yaml.Node{{
  37. Kind: yaml.ScalarNode,
  38. Value: "foo",
  39. Line: 1,
  40. Column: 1,
  41. }},
  42. },
  43. }, {
  44. "\"foo\"\n",
  45. "!!str",
  46. yaml.Node{
  47. Kind: yaml.DocumentNode,
  48. Line: 1,
  49. Column: 1,
  50. Anchors: map[string]*yaml.Node{},
  51. Children: []*yaml.Node{{
  52. Kind: yaml.ScalarNode,
  53. Style: yaml.DoubleQuotedStyle,
  54. Value: "foo",
  55. Line: 1,
  56. Column: 1,
  57. }},
  58. },
  59. }, {
  60. "'foo'\n",
  61. "!!str",
  62. yaml.Node{
  63. Kind: yaml.DocumentNode,
  64. Line: 1,
  65. Column: 1,
  66. Anchors: map[string]*yaml.Node{},
  67. Children: []*yaml.Node{{
  68. Kind: yaml.ScalarNode,
  69. Style: yaml.SingleQuotedStyle,
  70. Value: "foo",
  71. Line: 1,
  72. Column: 1,
  73. }},
  74. },
  75. }, {
  76. "''\n",
  77. "!!str",
  78. yaml.Node{
  79. Kind: yaml.DocumentNode,
  80. Line: 1,
  81. Column: 1,
  82. Anchors: map[string]*yaml.Node{},
  83. Children: []*yaml.Node{{
  84. Kind: yaml.ScalarNode,
  85. Style: yaml.SingleQuotedStyle,
  86. Value: "",
  87. Line: 1,
  88. Column: 1,
  89. }},
  90. },
  91. }, {
  92. "|\n foo\n bar\n",
  93. "!!str",
  94. yaml.Node{
  95. Kind: yaml.DocumentNode,
  96. Line: 1,
  97. Column: 1,
  98. Anchors: map[string]*yaml.Node{},
  99. Children: []*yaml.Node{{
  100. Kind: yaml.ScalarNode,
  101. Style: yaml.LiteralStyle,
  102. Value: "foo\nbar\n",
  103. Line: 1,
  104. Column: 1,
  105. }},
  106. },
  107. }, {
  108. "true\n",
  109. "!!bool",
  110. yaml.Node{
  111. Kind: yaml.DocumentNode,
  112. Line: 1,
  113. Column: 1,
  114. Anchors: map[string]*yaml.Node{},
  115. Children: []*yaml.Node{{
  116. Kind: yaml.ScalarNode,
  117. Value: "true",
  118. Line: 1,
  119. Column: 1,
  120. }},
  121. },
  122. }, {
  123. "-10\n",
  124. "!!int",
  125. yaml.Node{
  126. Kind: yaml.DocumentNode,
  127. Line: 1,
  128. Column: 1,
  129. Anchors: map[string]*yaml.Node{},
  130. Children: []*yaml.Node{{
  131. Kind: yaml.ScalarNode,
  132. Value: "-10",
  133. Line: 1,
  134. Column: 1,
  135. }},
  136. },
  137. }, {
  138. "4294967296\n",
  139. "!!int",
  140. yaml.Node{
  141. Kind: yaml.DocumentNode,
  142. Line: 1,
  143. Column: 1,
  144. Anchors: map[string]*yaml.Node{},
  145. Children: []*yaml.Node{{
  146. Kind: yaml.ScalarNode,
  147. Value: "4294967296",
  148. Line: 1,
  149. Column: 1,
  150. }},
  151. },
  152. }, {
  153. "0.1000\n",
  154. "!!float",
  155. yaml.Node{
  156. Kind: yaml.DocumentNode,
  157. Line: 1,
  158. Column: 1,
  159. Anchors: map[string]*yaml.Node{},
  160. Children: []*yaml.Node{{
  161. Kind: yaml.ScalarNode,
  162. Value: "0.1000",
  163. Line: 1,
  164. Column: 1,
  165. }},
  166. },
  167. }, {
  168. "-.inf\n",
  169. "!!float",
  170. yaml.Node{
  171. Kind: yaml.DocumentNode,
  172. Line: 1,
  173. Column: 1,
  174. Anchors: map[string]*yaml.Node{},
  175. Children: []*yaml.Node{{
  176. Kind: yaml.ScalarNode,
  177. Value: "-.inf",
  178. Line: 1,
  179. Column: 1,
  180. }},
  181. },
  182. }, {
  183. ".nan\n",
  184. "!!float",
  185. yaml.Node{
  186. Kind: yaml.DocumentNode,
  187. Line: 1,
  188. Column: 1,
  189. Anchors: map[string]*yaml.Node{},
  190. Children: []*yaml.Node{{
  191. Kind: yaml.ScalarNode,
  192. Value: ".nan",
  193. Line: 1,
  194. Column: 1,
  195. }},
  196. },
  197. }, {
  198. "{}\n",
  199. "!!map",
  200. yaml.Node{
  201. Kind: yaml.DocumentNode,
  202. Line: 1,
  203. Column: 1,
  204. Anchors: map[string]*yaml.Node{},
  205. Children: []*yaml.Node{{
  206. Kind: yaml.MappingNode,
  207. Style: yaml.FlowStyle,
  208. Value: "",
  209. Line: 1,
  210. Column: 1,
  211. Tag: "",
  212. }},
  213. },
  214. }, {
  215. "a: b c\n",
  216. "!!map",
  217. yaml.Node{
  218. Kind: yaml.DocumentNode,
  219. Line: 1,
  220. Column: 1,
  221. Anchors: map[string]*yaml.Node{},
  222. Children: []*yaml.Node{{
  223. Kind: yaml.MappingNode,
  224. Value: "",
  225. Line: 1,
  226. Column: 1,
  227. Tag: "",
  228. Children: []*yaml.Node{{
  229. Kind: yaml.ScalarNode,
  230. Value: "a",
  231. Line: 1,
  232. Column: 1,
  233. }, {
  234. Kind: yaml.ScalarNode,
  235. Value: "b c",
  236. Line: 1,
  237. Column: 4,
  238. }},
  239. }},
  240. },
  241. }, {
  242. "a:\n b: c\n d: e\n",
  243. "!!map",
  244. yaml.Node{
  245. Kind: yaml.DocumentNode,
  246. Line: 1,
  247. Column: 1,
  248. Anchors: map[string]*yaml.Node{},
  249. Children: []*yaml.Node{{
  250. Kind: yaml.MappingNode,
  251. Line: 1,
  252. Column: 1,
  253. Children: []*yaml.Node{{
  254. Kind: yaml.ScalarNode,
  255. Value: "a",
  256. Line: 1,
  257. Column: 1,
  258. }, {
  259. Kind: yaml.MappingNode,
  260. Line: 2,
  261. Column: 3,
  262. Children: []*yaml.Node{{
  263. Kind: yaml.ScalarNode,
  264. Value: "b",
  265. Line: 2,
  266. Column: 3,
  267. }, {
  268. Kind: yaml.ScalarNode,
  269. Value: "c",
  270. Line: 2,
  271. Column: 6,
  272. }, {
  273. Kind: yaml.ScalarNode,
  274. Value: "d",
  275. Line: 3,
  276. Column: 3,
  277. }, {
  278. Kind: yaml.ScalarNode,
  279. Value: "e",
  280. Line: 3,
  281. Column: 6,
  282. }},
  283. }},
  284. }},
  285. },
  286. }, {
  287. "- a\n- b\n",
  288. "!!seq",
  289. yaml.Node{
  290. Kind: yaml.DocumentNode,
  291. Line: 1,
  292. Column: 1,
  293. Anchors: map[string]*yaml.Node{},
  294. Children: []*yaml.Node{{
  295. Kind: yaml.SequenceNode,
  296. Value: "",
  297. Line: 1,
  298. Column: 1,
  299. Tag: "",
  300. Children: []*yaml.Node{{
  301. Kind: yaml.ScalarNode,
  302. Value: "a",
  303. Line: 1,
  304. Column: 3,
  305. }, {
  306. Kind: yaml.ScalarNode,
  307. Value: "b",
  308. Line: 2,
  309. Column: 3,
  310. }},
  311. }},
  312. },
  313. }, {
  314. "- a\n- - b\n - c\n",
  315. "!!seq",
  316. yaml.Node{
  317. Kind: yaml.DocumentNode,
  318. Line: 1,
  319. Column: 1,
  320. Anchors: map[string]*yaml.Node{},
  321. Children: []*yaml.Node{{
  322. Kind: yaml.SequenceNode,
  323. Line: 1,
  324. Column: 1,
  325. Children: []*yaml.Node{{
  326. Kind: yaml.ScalarNode,
  327. Value: "a",
  328. Line: 1,
  329. Column: 3,
  330. }, {
  331. Kind: yaml.SequenceNode,
  332. Line: 2,
  333. Column: 3,
  334. Children: []*yaml.Node{{
  335. Kind: yaml.ScalarNode,
  336. Value: "b",
  337. Line: 2,
  338. Column: 5,
  339. }, {
  340. Kind: yaml.ScalarNode,
  341. Value: "c",
  342. Line: 3,
  343. Column: 5,
  344. }},
  345. }},
  346. }},
  347. },
  348. }, {
  349. "[a, b]\n",
  350. "!!seq",
  351. yaml.Node{
  352. Kind: yaml.DocumentNode,
  353. Line: 1,
  354. Column: 1,
  355. Anchors: map[string]*yaml.Node{},
  356. Children: []*yaml.Node{{
  357. Kind: yaml.SequenceNode,
  358. Style: yaml.FlowStyle,
  359. Value: "",
  360. Line: 1,
  361. Column: 1,
  362. Tag: "",
  363. Children: []*yaml.Node{{
  364. Kind: yaml.ScalarNode,
  365. Value: "a",
  366. Line: 1,
  367. Column: 2,
  368. }, {
  369. Kind: yaml.ScalarNode,
  370. Value: "b",
  371. Line: 1,
  372. Column: 5,
  373. }},
  374. }},
  375. },
  376. }, {
  377. "- a\n- [b, c]\n",
  378. "!!seq",
  379. yaml.Node{
  380. Kind: yaml.DocumentNode,
  381. Line: 1,
  382. Column: 1,
  383. Anchors: map[string]*yaml.Node{},
  384. Children: []*yaml.Node{{
  385. Kind: yaml.SequenceNode,
  386. Line: 1,
  387. Column: 1,
  388. Children: []*yaml.Node{{
  389. Kind: yaml.ScalarNode,
  390. Value: "a",
  391. Line: 1,
  392. Column: 3,
  393. }, {
  394. Kind: yaml.SequenceNode,
  395. Style: yaml.FlowStyle,
  396. Line: 2,
  397. Column: 3,
  398. Children: []*yaml.Node{{
  399. Kind: yaml.ScalarNode,
  400. Value: "b",
  401. Line: 2,
  402. Column: 4,
  403. }, {
  404. Kind: yaml.ScalarNode,
  405. Value: "c",
  406. Line: 2,
  407. Column: 7,
  408. }},
  409. }},
  410. }},
  411. },
  412. }, {
  413. "# One\n# Two\ntrue # Three\n# Four\n# Five\n",
  414. "!!bool",
  415. yaml.Node{
  416. Kind: yaml.DocumentNode,
  417. Line: 3,
  418. Column: 1,
  419. Anchors: map[string]*yaml.Node{},
  420. Children: []*yaml.Node{{
  421. Kind: yaml.ScalarNode,
  422. Value: "true",
  423. Line: 3,
  424. Column: 1,
  425. Header: "# One\n# Two",
  426. Inline: "# Three",
  427. Footer: "# Four\n# Five",
  428. }},
  429. },
  430. }, {
  431. "# DH1\n\n# DH2\n\n# H1\n# H2\ntrue # I\n# F1\n# F2\n\n# DF1\n\n# DF2\n",
  432. "!!bool",
  433. yaml.Node{
  434. Kind: yaml.DocumentNode,
  435. Line: 7,
  436. Column: 1,
  437. Anchors: map[string]*yaml.Node{},
  438. Header: "# DH1\n\n# DH2",
  439. Footer: "# DF1\n\n# DF2",
  440. Children: []*yaml.Node{{
  441. Kind: yaml.ScalarNode,
  442. Value: "true",
  443. Line: 7,
  444. Column: 1,
  445. Header: "# H1\n# H2",
  446. Inline: "# I",
  447. Footer: "# F1\n# F2",
  448. }},
  449. },
  450. }, {
  451. "# DH1\n\n# DH2\n\n# HA1\n# HA2\nka: va # IA\n# FA1\n# FA2\n\n# HB1\n# HB2\nkb: vb # IB\n# FB1\n# FB2\n\n# DF1\n\n# DF2\n",
  452. "!!map",
  453. yaml.Node{
  454. Kind: yaml.DocumentNode,
  455. Line: 7,
  456. Column: 1,
  457. Anchors: map[string]*yaml.Node{},
  458. Header: "# DH1\n\n# DH2",
  459. Footer: "# DF1\n\n# DF2",
  460. Children: []*yaml.Node{{
  461. Kind: yaml.MappingNode,
  462. Line: 7,
  463. Column: 1,
  464. Children: []*yaml.Node{{
  465. Kind: yaml.ScalarNode,
  466. Line: 7,
  467. Column: 1,
  468. Value: "ka",
  469. Header: "# HA1\n# HA2",
  470. Footer: "# FA1\n# FA2",
  471. }, {
  472. Kind: yaml.ScalarNode,
  473. Line: 7,
  474. Column: 5,
  475. Value: "va",
  476. Inline: "# IA",
  477. }, {
  478. Kind: yaml.ScalarNode,
  479. Line: 13,
  480. Column: 1,
  481. Value: "kb",
  482. Header: "# HB1\n# HB2",
  483. Footer: "# FB1\n# FB2",
  484. }, {
  485. Kind: yaml.ScalarNode,
  486. Line: 13,
  487. Column: 5,
  488. Value: "vb",
  489. Inline: "# IB",
  490. }},
  491. }},
  492. },
  493. }, {
  494. "# DH1\n\n# DH2\n\n# HA1\n# HA2\n- la # IA\n# FA1\n# FA2\n\n# HB1\n# HB2\n- lb # IB\n# FB1\n# FB2\n\n# DF1\n\n# DF2\n",
  495. "!!seq",
  496. yaml.Node{
  497. Kind: yaml.DocumentNode,
  498. Line: 7,
  499. Column: 1,
  500. Anchors: map[string]*yaml.Node{},
  501. Header: "# DH1\n\n# DH2",
  502. Footer: "# DF1\n\n# DF2",
  503. Children: []*yaml.Node{{
  504. Kind: yaml.SequenceNode,
  505. Line: 7,
  506. Column: 1,
  507. Children: []*yaml.Node{{
  508. Kind: yaml.ScalarNode,
  509. Line: 7,
  510. Column: 3,
  511. Value: "la",
  512. Header: "# HA1\n# HA2",
  513. Inline: "# IA",
  514. Footer: "# FA1\n# FA2",
  515. }, {
  516. Kind: yaml.ScalarNode,
  517. Line: 13,
  518. Column: 3,
  519. Value: "lb",
  520. Header: "# HB1\n# HB2",
  521. Inline: "# IB",
  522. Footer: "# FB1\n# FB2",
  523. }},
  524. }},
  525. },
  526. }, {
  527. "# DH1\n\n- la # IA\n\n# HB1\n- lb\n",
  528. "!!seq",
  529. yaml.Node{
  530. Kind: yaml.DocumentNode,
  531. Line: 3,
  532. Column: 1,
  533. Anchors: map[string]*yaml.Node{},
  534. Header: "# DH1",
  535. Children: []*yaml.Node{{
  536. Kind: yaml.SequenceNode,
  537. Line: 3,
  538. Column: 1,
  539. Children: []*yaml.Node{{
  540. Kind: yaml.ScalarNode,
  541. Line: 3,
  542. Column: 3,
  543. Value: "la",
  544. Inline: "# IA",
  545. }, {
  546. Kind: yaml.ScalarNode,
  547. Line: 6,
  548. Column: 3,
  549. Value: "lb",
  550. Header: "# HB1",
  551. }},
  552. }},
  553. },
  554. }, {
  555. "# DH1\n\n# HA1\nka:\n # HB1\n kb:\n # HC1\n # HC2\n - lc # IC\n # FC1\n # FC2\n\n # HD1\n - ld # ID\n # FD1\n\n# DF1\n",
  556. "!!map",
  557. yaml.Node{
  558. Kind: yaml.DocumentNode,
  559. Line: 4,
  560. Column: 1,
  561. Anchors: map[string]*yaml.Node{},
  562. Header: "# DH1",
  563. Footer: "# DF1",
  564. Children: []*yaml.Node{{
  565. Kind: yaml.MappingNode,
  566. Line: 4,
  567. Column: 1,
  568. Children: []*yaml.Node{{
  569. Kind: yaml.ScalarNode,
  570. Line: 4,
  571. Column: 1,
  572. Value: "ka",
  573. Header: "# HA1",
  574. }, {
  575. Kind: yaml.MappingNode,
  576. Line: 6,
  577. Column: 3,
  578. Children: []*yaml.Node{{
  579. Kind: yaml.ScalarNode,
  580. Line: 6,
  581. Column: 3,
  582. Value: "kb",
  583. Header: "# HB1",
  584. }, {
  585. Kind: yaml.SequenceNode,
  586. Line: 9,
  587. Column: 3,
  588. Children: []*yaml.Node{{
  589. Kind: yaml.ScalarNode,
  590. Line: 9,
  591. Column: 5,
  592. Value: "lc",
  593. Header: "# HC1\n# HC2",
  594. Inline: "# IC",
  595. Footer: "# FC1\n# FC2",
  596. }, {
  597. Kind: yaml.ScalarNode,
  598. Line: 14,
  599. Column: 5,
  600. Value: "ld",
  601. Header: "# HD1",
  602. Inline: "# ID",
  603. Footer: "# FD1",
  604. }},
  605. }},
  606. }},
  607. }},
  608. },
  609. }, {
  610. "# H1\n[la, lb] # I\n# F1\n",
  611. "!!seq",
  612. yaml.Node{
  613. Kind: yaml.DocumentNode,
  614. Line: 2,
  615. Column: 1,
  616. Anchors: map[string]*yaml.Node{},
  617. Children: []*yaml.Node{{
  618. Kind: yaml.SequenceNode,
  619. Style: yaml.FlowStyle,
  620. Line: 2,
  621. Column: 1,
  622. Header: "# H1",
  623. Inline: "# I",
  624. Footer: "# F1",
  625. Children: []*yaml.Node{{
  626. Kind: yaml.ScalarNode,
  627. Line: 2,
  628. Column: 2,
  629. Value: "la",
  630. }, {
  631. Kind: yaml.ScalarNode,
  632. Line: 2,
  633. Column: 6,
  634. Value: "lb",
  635. }},
  636. }},
  637. },
  638. }, {
  639. "# DH1\n\n# SH1\n[\n # HA1\n la, # IA\n # FA1\n\n # HB1\n lb, # IB\n # FB1\n]\n# SF1\n\n# DF1\n",
  640. "!!seq",
  641. yaml.Node{
  642. Kind: yaml.DocumentNode,
  643. Line: 4,
  644. Column: 1,
  645. Anchors: map[string]*yaml.Node{},
  646. Header: "# DH1",
  647. Footer: "# DF1",
  648. Children: []*yaml.Node{{
  649. Kind: yaml.SequenceNode,
  650. Style: yaml.FlowStyle,
  651. Line: 4,
  652. Column: 1,
  653. Header: "# SH1",
  654. Footer: "# SF1",
  655. Children: []*yaml.Node{{
  656. Kind: yaml.ScalarNode,
  657. Line: 6,
  658. Column: 3,
  659. Value: "la",
  660. Header: "# HA1",
  661. Inline: "# IA",
  662. Footer: "# FA1",
  663. }, {
  664. Kind: yaml.ScalarNode,
  665. Line: 10,
  666. Column: 3,
  667. Value: "lb",
  668. Header: "# HB1",
  669. Inline: "# IB",
  670. Footer: "# FB1",
  671. }},
  672. }},
  673. },
  674. }, {
  675. "# DH1\n\n# SH1\n[\n # HA1\n la,\n # FA1\n\n # HB1\n lb,\n # FB1\n]\n# SF1\n\n# DF1\n",
  676. "!!seq",
  677. yaml.Node{
  678. Kind: yaml.DocumentNode,
  679. Line: 4,
  680. Column: 1,
  681. Anchors: map[string]*yaml.Node{},
  682. Header: "# DH1",
  683. Footer: "# DF1",
  684. Children: []*yaml.Node{{
  685. Kind: yaml.SequenceNode,
  686. Style: yaml.FlowStyle,
  687. Line: 4,
  688. Column: 1,
  689. Header: "# SH1",
  690. Footer: "# SF1",
  691. Children: []*yaml.Node{{
  692. Kind: yaml.ScalarNode,
  693. Line: 6,
  694. Column: 3,
  695. Value: "la",
  696. Header: "# HA1",
  697. Footer: "# FA1",
  698. }, {
  699. Kind: yaml.ScalarNode,
  700. Line: 10,
  701. Column: 3,
  702. Value: "lb",
  703. Header: "# HB1",
  704. Footer: "# FB1",
  705. }},
  706. }},
  707. },
  708. }, {
  709. "# DH1\n\n# MH1\n{\n # HA1\n ka: va, # IA\n # FA1\n\n # HB1\n kb: vb, # IB\n # FB1\n}\n# MF1\n\n# DF1\n",
  710. "!!map",
  711. yaml.Node{
  712. Kind: yaml.DocumentNode,
  713. Line: 4,
  714. Column: 1,
  715. Anchors: map[string]*yaml.Node{},
  716. Header: "# DH1",
  717. Footer: "# DF1",
  718. Children: []*yaml.Node{{
  719. Kind: yaml.MappingNode,
  720. Style: yaml.FlowStyle,
  721. Line: 4,
  722. Column: 1,
  723. Header: "# MH1",
  724. Footer: "# MF1",
  725. Children: []*yaml.Node{{
  726. Kind: yaml.ScalarNode,
  727. Line: 6,
  728. Column: 3,
  729. Value: "ka",
  730. Header: "# HA1",
  731. Footer: "# FA1",
  732. }, {
  733. Kind: yaml.ScalarNode,
  734. Line: 6,
  735. Column: 7,
  736. Value: "va",
  737. Inline: "# IA",
  738. }, {
  739. Kind: yaml.ScalarNode,
  740. Line: 10,
  741. Column: 3,
  742. Value: "kb",
  743. Header: "# HB1",
  744. Footer: "# FB1",
  745. }, {
  746. Kind: yaml.ScalarNode,
  747. Line: 10,
  748. Column: 7,
  749. Value: "vb",
  750. Inline: "# IB",
  751. }},
  752. }},
  753. },
  754. }, {
  755. "# DH1\n\n# MH1\n{\n # HA1\n ka: va,\n # FA1\n\n # HB1\n kb: vb,\n # FB1\n}\n# MF1\n\n# DF1\n",
  756. "!!map",
  757. yaml.Node{
  758. Kind: yaml.DocumentNode,
  759. Line: 4,
  760. Column: 1,
  761. Anchors: map[string]*yaml.Node{},
  762. Header: "# DH1",
  763. Footer: "# DF1",
  764. Children: []*yaml.Node{{
  765. Kind: yaml.MappingNode,
  766. Style: yaml.FlowStyle,
  767. Line: 4,
  768. Column: 1,
  769. Header: "# MH1",
  770. Footer: "# MF1",
  771. Children: []*yaml.Node{{
  772. Kind: yaml.ScalarNode,
  773. Line: 6,
  774. Column: 3,
  775. Value: "ka",
  776. Header: "# HA1",
  777. Footer: "# FA1",
  778. }, {
  779. Kind: yaml.ScalarNode,
  780. Line: 6,
  781. Column: 7,
  782. Value: "va",
  783. }, {
  784. Kind: yaml.ScalarNode,
  785. Line: 10,
  786. Column: 3,
  787. Value: "kb",
  788. Header: "# HB1",
  789. Footer: "# FB1",
  790. }, {
  791. Kind: yaml.ScalarNode,
  792. Line: 10,
  793. Column: 7,
  794. Value: "vb",
  795. }},
  796. }},
  797. },
  798. },
  799. }
  800. func (s *S) TestNodeRoundtrip(c *C) {
  801. defer os.Setenv("TZ", os.Getenv("TZ"))
  802. os.Setenv("TZ", "UTC")
  803. for i, item := range nodeTests {
  804. c.Logf("test %d: %q", i, item.yaml)
  805. var node yaml.Node
  806. err := yaml.Unmarshal([]byte(item.yaml), &node)
  807. c.Assert(err, IsNil)
  808. c.Assert(node, DeepEquals, item.node)
  809. data, err := yaml.Marshal(&node)
  810. c.Assert(err, IsNil)
  811. c.Assert(string(data), Equals, item.yaml)
  812. if len(node.Children) > 0 {
  813. c.Assert(node.Children[0].ShortTag(), Equals, item.tag)
  814. }
  815. }
  816. }