node_test.go 16 KB

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