aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2022-01-01 16:03:32 +0000
committerLouis Pilfold <louis@lpil.uk>2022-01-01 16:03:32 +0000
commitd3d0ff192ebb29827c63e28f3aa8ef101b575efe (patch)
treebd1c64fcab00c9b0f0684b54f30e0da90a159207
parentcdcf2fffcc49e0d5d24708cb54169a96fa356054 (diff)
downloadgleam_json-d3d0ff192ebb29827c63e28f3aa8ef101b575efe.tar.gz
gleam_json-d3d0ff192ebb29827c63e28f3aa8ef101b575efe.zip
Test string builder generation
-rw-r--r--src/gleam/json.gleam9
-rw-r--r--test/gleam_json_test.gleam34
2 files changed, 23 insertions, 20 deletions
diff --git a/src/gleam/json.gleam b/src/gleam/json.gleam
index 43c8dda..b509d7c 100644
--- a/src/gleam/json.gleam
+++ b/src/gleam/json.gleam
@@ -13,22 +13,18 @@ pub type DecodeError {
}
// TODO: document
-// TODO: test
pub external fn decode(String) -> Result(Dynamic, DecodeError) =
"thoas" "decode"
// TODO: document
-// TODO: test
pub external fn to_string(Json) -> String =
"gleam_json_ffi" "json_to_string"
// TODO: document
-// TODO: test
-external fn to_string_builder(Json) -> String =
- "thoas_encode" "encode"
+pub external fn to_string_builder(Json) -> StringBuilder =
+ "gleam_json_ffi" "json_to_iodata"
// TODO: document
-// TODO: test
pub external fn string(input: String) -> Json =
"thoas_encode" "string"
@@ -38,7 +34,6 @@ pub external fn bool(input: Bool) -> Json =
"thoas_encode" "boolean"
// TODO: document
-// TODO: test
pub external fn int(input: Int) -> Json =
"thoas_encode" "integer"
diff --git a/test/gleam_json_test.gleam b/test/gleam_json_test.gleam
index 80849e3..7617ebb 100644
--- a/test/gleam_json_test.gleam
+++ b/test/gleam_json_test.gleam
@@ -1,6 +1,7 @@
import gleam/dynamic
-import gleam/json
+import gleam/json.{Json}
import gleam/option.{None, Some}
+import gleam/string_builder
import gleam/result
import gleeunit
import gleeunit/should
@@ -27,34 +28,41 @@ pub fn decode_unexpected_byte_test() {
pub fn encode_string_test() {
json.string("hello")
- |> json.to_string()
- |> should.equal("\"hello\"")
+ |> should_encode("\"hello\"")
}
pub fn encode_null_test() {
json.null()
- |> json.to_string()
- |> should.equal("null")
+ |> should_encode("null")
}
pub fn encode_object_test() {
json.object([#("foo", json.int(5))])
- |> json.to_string()
- |> should.equal("{\"foo\":5}")
+ |> should_encode("{\"foo\":5}")
}
pub fn encode_list_test() {
json.list([json.int(5), json.int(6)])
- |> json.to_string()
- |> should.equal("[5,6]")
+ |> should_encode("[5,6]")
}
-pub fn encode_nullable_test() {
+pub fn encode_nullable_some_test() {
json.nullable(Some(5), json.int)
- |> json.to_string()
- |> should.equal("5")
+ |> should_encode("5")
+}
+pub fn encode_nullable_none_test() {
json.nullable(None, json.int)
+ |> should_encode("null")
+}
+
+fn should_encode(data: Json, expected: String) {
+ data
|> json.to_string()
- |> should.equal("null")
+ |> should.equal(expected)
+
+ data
+ |> json.to_string_builder
+ |> string_builder.to_string
+ |> should.equal(json.to_string(data))
}