diff --git a/lexgen/gleam.toml b/lexgen/gleam.toml index 57ffa94..41bcb60 100644 --- a/lexgen/gleam.toml +++ b/lexgen/gleam.toml @@ -12,6 +12,9 @@ path = "lexgen" [dependencies] gleam_stdlib = ">= 1.0.0 and < 2.0.0" +gleam_json = ">= 3.1.0 and < 4.0.0" [dev_dependencies] gleeunit = ">= 1.0.0 and < 2.0.0" +birdie = ">= 2.0.0 and < 3.0.0" +pprint = ">= 1.0.6 and < 2.0.0" diff --git a/lexgen/manifest.toml b/lexgen/manifest.toml index 1f6f3c6..e0acd2a 100644 --- a/lexgen/manifest.toml +++ b/lexgen/manifest.toml @@ -2,10 +2,35 @@ # You typically do not need to edit this file packages = [ + { name = "argv", version = "1.1.0", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "3277D100448BDB4A29B6D58C0F36F631CBC349E8BDD09766C6309DF202831140" }, + { name = "birdie", version = "2.0.0", build_tools = ["gleam"], requirements = ["argv", "edit_distance", "envoy", "filepath", "glance", "gleam_community_ansi", "gleam_json", "gleam_stdlib", "global_value", "justin", "rank", "simplifile", "term_size", "tom", "trie_again"], otp_app = "birdie", source = "hex", outer_checksum = "4B8B7413D9FA02F7378C4F1A19DB2B68814252F63F37701A0281851EAFB1F40F" }, + { name = "edit_distance", version = "3.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "edit_distance", source = "hex", outer_checksum = "DE588BC3483ED6DBA717211B59F3178891A5FC6F1C00D415AE8C4233EAFB94B1" }, + { name = "envoy", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "envoy", source = "hex", outer_checksum = "9C6FBB6BFA02A52798BEEC5977A738CAD6E4A057F4B67FD0C8061AD2502C191A" }, + { name = "filepath", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "B06A9AF0BF10E51401D64B98E4B627F1D2E48C154967DA7AF4D0914780A6D40A" }, + { name = "glam", version = "2.0.4", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glam", source = "hex", outer_checksum = "48A043A12091F93D911C316DD8F7FFD03CD9FF6F50848FC56E359D3C168DF0FA" }, + { name = "glance", version = "6.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "glexer"], otp_app = "glance", source = "hex", outer_checksum = "49E0ED4793BB3F56C3E5ED00528D70CAE21D263F70A735604124B95C5F62E2DB" }, + { name = "gleam_community_ansi", version = "1.5.0", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_regexp", "gleam_stdlib"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "B5AA433AF84313E23FDF90CCFF752B9380FE9FFCE02B2949D49B7AACCC77B16D" }, + { name = "gleam_community_colour", version = "2.0.4", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "6DB4665555D7D2B27F0EA32EF47E8BEBC4303821765F9C73D483F38EE24894F0" }, + { name = "gleam_json", version = "3.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "44FDAA8847BE8FC48CA7A1C089706BD54BADCC4C45B237A992EDDF9F2CDB2836" }, + { name = "gleam_regexp", version = "1.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "9C215C6CA84A5B35BB934A9B61A9A306EC743153BE2B0425A0D032E477B062A9" }, { name = "gleam_stdlib", version = "1.0.2", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "0C5506589DF4C63DF5D6FFBB834562D6865C6C2AEE0019D7B37886BD6D128141" }, + { name = "gleam_time", version = "1.8.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_time", source = "hex", outer_checksum = "533D8723774D61AD4998324F5DD1DABDCDBFABAFB9E87CB5D03C6955448FC97D" }, { name = "gleeunit", version = "1.10.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "254B697FE72EEAD7BF82E941723918E421317813AC49923EE76A18C788C61E72" }, + { name = "glexer", version = "2.4.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "splitter"], otp_app = "glexer", source = "hex", outer_checksum = "5AB2401BF251699746B3551EF699ECC1D94FE2897C15041F181614B089125CA0" }, + { name = "global_value", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "global_value", source = "hex", outer_checksum = "23F74C91A7B819C43ABCCBF49DAD5BB8799D81F2A3736BA9A534BD47F309FF4F" }, + { name = "justin", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "justin", source = "hex", outer_checksum = "8B1C62269E8607D0A0ED698B7903984CE0BF7B6B3C0DEA3C6C8302B39402837B" }, + { name = "pprint", version = "1.0.6", build_tools = ["gleam"], requirements = ["glam", "gleam_stdlib"], otp_app = "pprint", source = "hex", outer_checksum = "4E9B34AE03B2E81D60F230B9BAF1792BE1AC37AFB5564B8DEBEE56BAEC866B7D" }, + { name = "rank", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "rank", source = "hex", outer_checksum = "B846D54D1512FB83A3994A07A8C7915FE74335A99BCE1EDC7943EA31ED710DFD" }, + { name = "simplifile", version = "2.4.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "7C18AFA4FED0B4CE1FA5B0B4BAC1FA1744427054EA993565F6F3F82E5453170D" }, + { name = "splitter", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "splitter", source = "hex", outer_checksum = "3DFD6B6C49E61EDAF6F7B27A42054A17CFF6CA2135FF553D0CB61C234D281DD0" }, + { name = "term_size", version = "1.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "term_size", source = "hex", outer_checksum = "D00BD2BC8FB3EBB7E6AE076F3F1FF2AC9D5ED1805F004D0896C784D06C6645F1" }, + { name = "tom", version = "2.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_time"], otp_app = "tom", source = "hex", outer_checksum = "DCF04CB7AB35D58CFC598C66EA2E1816D160759802C89B2BA6238780D59BC256" }, + { name = "trie_again", version = "1.1.4", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "trie_again", source = "hex", outer_checksum = "E3BD66B4E126EF567EA8C4944EAB216413392ADF6C16C36047AF79EE5EF13466" }, ] [requirements] +birdie = { version = ">= 2.0.0 and < 3.0.0" } +gleam_json = { version = ">= 3.1.0 and < 4.0.0" } gleam_stdlib = { version = ">= 1.0.0 and < 2.0.0" } gleeunit = { version = ">= 1.0.0 and < 2.0.0" } +pprint = { version = ">= 1.0.6 and < 2.0.0" } diff --git a/lexgen/src/alicia/lexgen.gleam b/lexgen/src/alicia/lexgen.gleam index 5c0837e..0294b6c 100644 --- a/lexgen/src/alicia/lexgen.gleam +++ b/lexgen/src/alicia/lexgen.gleam @@ -8,7 +8,7 @@ pub type Lexicon { } pub fn lexicon_decoder() -> decode.Decoder(Lexicon) { - use version <- decode.field("version", decode.int) + use version <- decode.field("lexicon", decode.int) use id <- decode.field("id", decode.string) use defs <- decode.field( "defs", diff --git a/lexgen/test/alicia_lexgen_test.gleam b/lexgen/test/alicia_lexgen_test.gleam index fba3c88..0269af5 100644 --- a/lexgen/test/alicia_lexgen_test.gleam +++ b/lexgen/test/alicia_lexgen_test.gleam @@ -1,13 +1,59 @@ +import alicia/lexgen +import birdie +import gleam/json import gleeunit +import pprint pub fn main() -> Nil { gleeunit.main() } -// gleeunit test functions end in `_test` -pub fn hello_world_test() { - let name = "Joe" - let greeting = "Hello, " <> name <> "!" +pub fn simple_lexicon_parse_test() { + let json = + json.object([ + #("lexicon", json.int(1)), + #("id", json.string("test.example.something")), + #( + "defs", + json.object([ + #( + "main", + json.object([ + #("type", json.string("record")), + #("key", json.string("tid")), + #( + "record", + json.object([ + #("type", json.string("object")), + #( + "properties", + json.object([ + #("name", json.object([#("type", json.string("string"))])), + ]), + ), + ]), + ), + ]), + ), + ]), + ), + ]) - assert greeting == "Hello, Joe!" + let assert Ok(lexicon) = + json.parse(json.to_string(json), lexgen.lexicon_decoder()) + + lexicon + |> pretty + |> birdie.snap("Simple Lexicon Parse") +} + +fn pretty(a) { + pprint.with_config( + a, + pprint.Config( + pprint.Styled, + bit_array_mode: pprint.KeepBitArrays, + label_mode: pprint.Labels, + ), + ) } diff --git a/lexgen/test/birdie_snapshots/simple_lexicon_parse.accepted b/lexgen/test/birdie_snapshots/simple_lexicon_parse.accepted new file mode 100644 index 0000000..9cd2eb6 --- /dev/null +++ b/lexgen/test/birdie_snapshots/simple_lexicon_parse.accepted @@ -0,0 +1,40 @@ +--- +version: 2.0.0 +title: Simple Lexicon Parse +file: ./test/alicia_lexgen_test.gleam +test_name: simple_lexicon_parse_test +--- +Lexicon( + 1, + "test.example.something", + dict.from_list([ + #( + "main", + Record( + None, + "tid", + Object( + None, + None, + dict.from_list([ + #( + "name", + String( + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ), + ), + ]), + ), + ), + ), + ]), +)