oats/spec/oats_spec.moon

59 lines
1.8 KiB
Text

oats = require "oats"
describe "OATS", ->
it "parses a basic file", ->
assert.same {{name: "person", {name: "name"}, {name: "age"}}}, oats.decodefile("spec/fixtures/files/basic.oats")
deep = {
name: "first"
{
name: "second"
{ name: "third" }
}
{
name: "second",
{ name: "third" }
{ name: "third" }
}
}
assert.same {deep}, oats.decodefile("spec/fixtures/files/deep.oats")
it "parses basic text nodes", ->
bob = {name: "person", {name: "name", "Bob"}, {name: "age", "20"}}
assert.same {bob}, oats.decodefile("spec/fixtures/files/bob.oats")
it "parses multiple lines into separate nodes", ->
assert.same {"multi", "line", "strings"}, oats.decodefile("spec/fixtures/files/multi.oats")
it "parses one-line nodes", ->
rose = {name: "person", {name: "name", "Rose"}, {name: "age", "22"}}
assert.same {rose}, oats.decodefile("spec/fixtures/files/rose.oats")
it "parses inline nodes", ->
document = {
name: "document"
{
name: "section"
"Text with a "
{name: "inline", "inline"}
" node"
"Text with an "
{name: "inline"}
" empty nested node"
{name: "one-line", "with ", {name: "inline"}, " node"}
}
}
assert.same document, oats.decodefile("spec/fixtures/files/document.oats")[1]
it "errors for endless inline nodes", ->
assert.has.error (-> oats.decode("line with [endless tag")), "Endless inline tag on 1:11"
it "parses strings files", ->
assert.same {{name: "tester"}}, oats.decode("[tester]")
assert.same {{name: "tester", {name: "nested", "text"}}}, oats.decode("[tester]\n\t[nested] text")
it "errors when indentation increases by more than one", ->
assert.error ->
oats.decode("[outer]\n\t\t[nested]")
it "ignores empty lines", ->
assert.same {{name: "tester", {name: "nested", "text"}}}, oats.decode("[tester]\n\n\t[nested] text")