main_test.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. package dirty
  2. import (
  3. "strings"
  4. "testing"
  5. "fmt"
  6. )
  7. func TestLoadEmptyArray(t *testing.T) {
  8. r := strings.NewReader("()")
  9. arr, err := Load(r)
  10. if err != nil {
  11. t.Fatalf("got error: %v\n", err)
  12. }
  13. if len(arr) != 0 {
  14. t.Fatalf("expected empty array, got %+v\n", arr)
  15. }
  16. }
  17. func TestLoadEmptyArrayInArray(t *testing.T) {
  18. r := strings.NewReader("(())")
  19. arr, err := Load(r)
  20. if err != nil {
  21. t.Fatalf("got error: %v\n", err)
  22. }
  23. if !(len(arr) == 1 && len(arr[0].(Array)) == 0) {
  24. t.Fatalf("expected empty array in array, got %+v\n", arr)
  25. }
  26. }
  27. func TestLoadEmptyArrayWithComment(t *testing.T) {
  28. r := strings.NewReader(`
  29. (
  30. # this is a comment
  31. )
  32. `)
  33. arr, err := Load(r)
  34. if err != nil {
  35. t.Fatalf("got error: %v\n", err)
  36. }
  37. if len(arr) != 0 {
  38. t.Fatalf("expected empty array, got %+v\n", arr)
  39. }
  40. }
  41. func TestLoadArrayWithString(t *testing.T) {
  42. r := strings.NewReader(`('this is a string')`)
  43. arr, err := Load(r)
  44. if err != nil {
  45. t.Fatalf("got error: %v\n", err)
  46. }
  47. if !(len(arr) == 1 && arr[0].(String) == "this is a string") {
  48. t.Fatalf("expected [‘this is a string’], got %+v\n", arr)
  49. }
  50. }
  51. func TestEscapeTab(t *testing.T) {
  52. r := strings.NewReader(`('tab\t')`)
  53. arr, err := Load(r)
  54. if err != nil {
  55. t.Fatalf("got error: %v\n", err)
  56. }
  57. if !(len(arr) == 1 && arr[0].(String) == "tab\t") {
  58. t.Fatalf("expected [‘tab\t’], got %+v\n", arr)
  59. }
  60. }
  61. func TestEscapeNewline(t *testing.T) {
  62. r := strings.NewReader(`('nl\n')`)
  63. arr, err := Load(r)
  64. if err != nil {
  65. t.Fatalf("got error: %v\n", err)
  66. }
  67. if !(len(arr) == 1 && arr[0].(String) == "nl\n") {
  68. t.Fatalf("expected [‘nl\n’], got %+v\n", arr)
  69. }
  70. }
  71. func TestEscapeBackslash(t *testing.T) {
  72. r := strings.NewReader(`('bs\\')`)
  73. arr, err := Load(r)
  74. if err != nil {
  75. t.Fatalf("got error: %v\n", err)
  76. }
  77. if !(len(arr) == 1 && arr[0].(String) == "bs\\") {
  78. t.Fatalf("expected [‘bs\\’], got %+v\n", arr)
  79. }
  80. }
  81. func TestEscapeCarret(t *testing.T) {
  82. r := strings.NewReader(`('\rcarret')`)
  83. arr, err := Load(r)
  84. if err != nil {
  85. t.Fatalf("got error: %v\n", err)
  86. }
  87. if !(len(arr) == 1 && arr[0].(String) == "\rcarret") {
  88. t.Fatalf("expected [‘\rcarret’], got %+v\n", arr)
  89. }
  90. }
  91. func TestEscapeApos(t *testing.T) {
  92. r := strings.NewReader(`('\'')`)
  93. arr, err := Load(r)
  94. if err != nil {
  95. t.Fatalf("got error: %v\n", err)
  96. }
  97. if !(len(arr) == 1 && arr[0].(String) == "'") {
  98. t.Fatalf("expected [‘'’], got %+v\n", arr)
  99. }
  100. }
  101. func TestTrue(t *testing.T) {
  102. r := strings.NewReader(`(true)`)
  103. arr, err := Load(r)
  104. if err != nil {
  105. t.Fatalf("got error: %v\n", err)
  106. }
  107. if !(len(arr) == 1 && arr[0].(Const) == TRUE) {
  108. t.Fatalf("expected [true], got %+v\n", arr)
  109. }
  110. }
  111. func TestFalse(t *testing.T) {
  112. r := strings.NewReader(`(false)`)
  113. arr, err := Load(r)
  114. if err != nil {
  115. t.Fatalf("got error: %v\n", err)
  116. }
  117. if !(len(arr) == 1 && arr[0].(Const) == FALSE) {
  118. t.Fatalf("expected [false], got %+v\n", arr)
  119. }
  120. }
  121. func TestNull(t *testing.T) {
  122. r := strings.NewReader(`(null)`)
  123. arr, err := Load(r)
  124. if err != nil {
  125. t.Fatalf("got error: %v\n", err)
  126. }
  127. if !(len(arr) == 1 && arr[0].(Const) == NULL) {
  128. t.Fatalf("expected [null], got %+v\n", arr)
  129. }
  130. }
  131. func TestU1B(t *testing.T) {
  132. r := strings.NewReader(`('\u0040')`)
  133. arr, err := Load(r)
  134. if err != nil {
  135. t.Fatalf("got error: %v\n", err)
  136. }
  137. if !(len(arr) == 1 && arr[0].(String) == "@") {
  138. t.Fatalf("expected [‘@’], got %+v\n", arr)
  139. }
  140. }
  141. func TestU2B(t *testing.T) {
  142. r := strings.NewReader(`('\u00E5')`)
  143. arr, err := Load(r)
  144. if err != nil {
  145. t.Fatalf("got error: %v\n", err)
  146. }
  147. if !(len(arr) == 1 && arr[0].(String) == "å") {
  148. t.Fatalf("expected [‘å’], got %+v\n", arr)
  149. }
  150. }
  151. func TestU3B(t *testing.T) {
  152. r := strings.NewReader(`('\u2042')`)
  153. arr, err := Load(r)
  154. if err != nil {
  155. t.Fatalf("got error: %v\n", err)
  156. }
  157. if !(len(arr) == 1 && arr[0].(String) == "⁂") {
  158. t.Fatalf("expected [‘⁂’], got %+v\n", arr)
  159. }
  160. }
  161. func TestU4B(t *testing.T) {
  162. r := strings.NewReader(`('\U000200D1')`)
  163. arr, err := Load(r)
  164. if err != nil {
  165. t.Fatalf("got error: %v\n", err)
  166. }
  167. if !(len(arr) == 1 && arr[0].(String) == "𠃑") {
  168. t.Fatalf("expected [‘𠃑’], got %+v\n", arr)
  169. }
  170. }
  171. func Test0b(t *testing.T) {
  172. r := strings.NewReader(`(0b01)`)
  173. arr, err := Load(r)
  174. if err != nil {
  175. t.Fatalf("got error: %v\n", err)
  176. }
  177. if !(len(arr) == 1 && arr[0].(Int) == 1) {
  178. t.Fatalf("expected [1], got %+v\n", arr)
  179. }
  180. }
  181. func Test0bCommaMiddle(t *testing.T) {
  182. r := strings.NewReader(`(0b01,00000000)`)
  183. arr, err := Load(r)
  184. if err != nil {
  185. t.Fatalf("got error: %v\n", err)
  186. }
  187. if !(len(arr) == 1 && arr[0].(Int) == 0b100000000) {
  188. t.Fatalf("expected [256], got %+v\n", arr)
  189. }
  190. }
  191. func Test0bCommaBegin(t *testing.T) {
  192. r := strings.NewReader(`(0b,00000000)`)
  193. arr, err := Load(r)
  194. if err != nil {
  195. t.Fatalf("got error: %v\n", err)
  196. }
  197. if !(len(arr) == 1 && arr[0].(Int) == 0b100000000) {
  198. t.Fatalf("expected [256], got %+v\n", arr)
  199. }
  200. }
  201. func Test0bCommas(t *testing.T) {
  202. r := strings.NewReader(`(0b01,,00000000)`)
  203. arr, err := Load(r)
  204. if err != nil {
  205. t.Fatalf("got error: %v\n", err)
  206. }
  207. if !(len(arr) == 1 && arr[0].(Int) == 0b10000000000000000) {
  208. t.Fatalf("expected [65536], got %+v\n", arr)
  209. }
  210. }
  211. func Test0o(t *testing.T) {
  212. r := strings.NewReader(`(0o77)`)
  213. arr, err := Load(r)
  214. if err != nil {
  215. t.Fatalf("got error: %v\n", err)
  216. }
  217. if !(len(arr) == 1 && arr[0].(Int) == 0o77) {
  218. t.Fatalf("expected [63], got %+v\n", arr)
  219. }
  220. }
  221. func Test0x(t *testing.T) {
  222. r := strings.NewReader(`(0xff)`)
  223. arr, err := Load(r)
  224. if err != nil {
  225. t.Fatalf("got error: %v\n", err)
  226. }
  227. if !(len(arr) == 1 && arr[0].(Int) == 0xff) {
  228. t.Fatalf("expected [255], got %+v\n", arr)
  229. }
  230. }
  231. func Test0(t *testing.T) {
  232. r := strings.NewReader(`(0)`)
  233. arr, err := Load(r)
  234. if err != nil {
  235. t.Fatalf("got error: %v\n", err)
  236. }
  237. if !(len(arr) == 1 && arr[0].(Int) == 0) {
  238. t.Fatalf("expected [0], got %+v\n", arr)
  239. }
  240. }
  241. // todo test not show
  242. func TestNumbers(t *testing.T) {
  243. r := strings.NewReader(`(1 10 10. 10.5 ↊· ↊·6 1e2 -1 -10 -10.5 -↊· -↊·6 -1e2 1e-2 -1e-2)`)
  244. arr, err := Load(r)
  245. fmt.Println(arr)
  246. if err != nil {
  247. t.Fatalf("got error: %v\n", err)
  248. }
  249. }
  250. func TestShowRawString(t *testing.T) {
  251. r := strings.NewReader("(`\n" +
  252. " a\n" +
  253. " `sql`\n" +
  254. "`)")
  255. arr, err := Load(r)
  256. fmt.Println(arr)
  257. if err != nil {
  258. t.Fatalf("got error: %v\n", err)
  259. }
  260. }
  261. func TestShowLoadStruct(t *testing.T) {
  262. /*a := ""
  263. b := 5*/
  264. r := strings.NewReader(`(
  265. ('a' 'sss')
  266. ('b' 42)
  267. ('c' 3.14)
  268. ('d' null)
  269. ('e' true)
  270. ('f' false)
  271. ('g' 5)
  272. )`)
  273. s := &struct {
  274. A string
  275. B int
  276. C float32
  277. D *int
  278. E bool
  279. F bool
  280. G *int
  281. }{}
  282. LoadStruct(r, s)
  283. fmt.Println(*s.G)
  284. r = strings.NewReader(`(
  285. ('a' (
  286. ('b' true)
  287. ))
  288. )`)
  289. LoadStruct(r, &struct {
  290. A struct {
  291. B bool
  292. C bool
  293. }
  294. }{})
  295. r = strings.NewReader(`(
  296. ('a' 'sss')
  297. ('b' 42)
  298. ('c' 3.14)
  299. )`)
  300. LoadStruct(r, &struct {
  301. z string
  302. }{})
  303. /*LoadStruct(nil, &[]int{})
  304. LoadStruct(nil, &map[string]int{})
  305. LoadStruct(nil, &a)
  306. LoadStruct(nil, &b)*/
  307. }
  308. func TestShowLoadMap(t *testing.T) {
  309. r := strings.NewReader(`(
  310. ('a' 11)
  311. ('b' 42)
  312. ('c' 3)
  313. )`)
  314. m := map[string]int{}
  315. LoadStruct(r, &m)
  316. }
  317. func TestShowLoadMapInt(t *testing.T) {
  318. r := strings.NewReader(`(
  319. (1 11)
  320. (2 42)
  321. (4 3)
  322. )`)
  323. m := map[int]int{}
  324. LoadStruct(r, &m)
  325. }
  326. func TestShowLoadMapInt8(t *testing.T) {
  327. r := strings.NewReader(`(
  328. (1 11)
  329. (2 42)
  330. (4 3)
  331. )`)
  332. m := map[int8]int{}
  333. LoadStruct(r, &m)
  334. }
  335. func TestShowLoadMapInt16(t *testing.T) {
  336. r := strings.NewReader(`(
  337. (1 11)
  338. (2 42)
  339. (4 3)
  340. )`)
  341. m := map[int16]int{}
  342. LoadStruct(r, &m)
  343. }
  344. func TestShowLoadMapInt32(t *testing.T) {
  345. r := strings.NewReader(`(
  346. (1 11)
  347. (2 42)
  348. (4 3)
  349. )`)
  350. m := map[int32]int{}
  351. LoadStruct(r, &m)
  352. }
  353. func TestShowLoadMapInt64(t *testing.T) {
  354. r := strings.NewReader(`(
  355. (1 11)
  356. (2 42)
  357. (4 3)
  358. )`)
  359. m := map[int64]int{}
  360. LoadStruct(r, &m)
  361. }
  362. func TestShowLoadMapUInt(t *testing.T) {
  363. r := strings.NewReader(`(
  364. (1 11)
  365. (2 42)
  366. (4 3)
  367. )`)
  368. m := map[uint]int{}
  369. LoadStruct(r, &m)
  370. }
  371. func TestShowLoadMapUInt8(t *testing.T) {
  372. r := strings.NewReader(`(
  373. (1 11)
  374. (2 42)
  375. (4 3)
  376. )`)
  377. m := map[uint8]int{}
  378. LoadStruct(r, &m)
  379. }
  380. func TestShowLoadMapUInt16(t *testing.T) {
  381. r := strings.NewReader(`(
  382. (1 11)
  383. (2 42)
  384. (4 3)
  385. )`)
  386. m := map[uint16]int{}
  387. LoadStruct(r, &m)
  388. }
  389. func TestShowLoadMapUInt32(t *testing.T) {
  390. r := strings.NewReader(`(
  391. (1 11)
  392. (2 42)
  393. (4 3)
  394. )`)
  395. m := map[uint32]int{}
  396. LoadStruct(r, &m)
  397. }
  398. func TestShowLoadMapUInt64(t *testing.T) {
  399. r := strings.NewReader(`(
  400. (1 11)
  401. (2 42)
  402. (4 3)
  403. )`)
  404. m := map[uint64]int{}
  405. LoadStruct(r, &m)
  406. }
  407. func TestShowLoadMapBool(t *testing.T) {
  408. r := strings.NewReader(`(
  409. (true 11)
  410. (false 42)
  411. )`)
  412. m := map[bool]int{}
  413. LoadStruct(r, &m)
  414. }
  415. func TestShowLoadArray(t *testing.T) {
  416. r := strings.NewReader(`(11 22 31)`)
  417. s := [3]int64{}
  418. LoadStruct(r, &s)
  419. }
  420. func TestShowLoadSlice(t *testing.T) {
  421. r := strings.NewReader(`(11 22 31)`)
  422. s := []int64{}
  423. LoadStruct(r, &s)
  424. }
  425. func TestShowLoadMapArray(t *testing.T) {
  426. r := strings.NewReader(`(
  427. (
  428. ('a' 1)
  429. ('b' 2)
  430. )
  431. )`)
  432. s := []map[string]int{}
  433. LoadStruct(r, &s)
  434. fmt.Println(s)
  435. }
  436. //todo escapeError, unterminatedError, invalidCharError, invalidCodepointError, constError, commaError
  437. //todo syntax errors