node_test.go 16 KB

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