caffeine-mc
Version:
Select, configure and extend your to-JavaScript compiler, with arbitrary code, on a per file bases from within the file.
135 lines (115 loc) • 4.61 kB
text/coffeescript
{CaffeineMcParser} = require 'caffeine-mc'
{log} = Neptune.Art.StandardLib
module.exports = suite:
noMetaCode: ->
test "'hi'", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "hi"
assert.eq !!metaCode, false
assert.eq !!compilerName, false
assert.eq code, "hi"
test "multi-line source", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "hi\nthere"
assert.eq !!metaCode, false
assert.eq !!compilerName, false
assert.eq code, "hi\nthere"
test "set compiler-name", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|FooScript\nhi"
assert.eq !!metaCode, false
assert.eq compilerName, "FooScript"
assert.eq code, "hi"
illegal: ->
test "|AwesomeScript some meta code on one line without column after compiler-name", ->
parser = new CaffeineMcParser
assert.throws -> parser.parse "|AwesomeScript some meta code on one line without column after compiler-name"
degenerate: ->
test "|", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|"
assert.eq !!metaCode, false
assert.eq !!compilerName, false
assert.eq code, ""
test "|AwesomeScript", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|AwesomeScript"
assert.eq !!metaCode, false
assert.eq compilerName, "AwesomeScript"
assert.eq code, ""
test "|AwesomeScript/SubAwesome", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|AwesomeScript/SubAwesome"
assert.eq !!metaCode, false
assert.eq compilerName, "AwesomeScript/SubAwesome"
assert.eq code, ""
test "| meta code", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "| meta code"
assert.eq metaCode, "meta code"
assert.eq compilerName, undefined
assert.eq code, ""
test "|AwesomeScript: meta code", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|AwesomeScript: meta code"
assert.eq metaCode, "meta code"
assert.eq compilerName, "AwesomeScript"
assert.eq code, ""
test "|AwesomeScript:\\n meta code", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|AwesomeScript\n meta code"
assert.eq metaCode, "meta code"
assert.eq compilerName, "AwesomeScript"
assert.eq code, ""
metaCode:
oneLiner: ->
test "basic", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "| some meta-code\nhi"
assert.eq metaCode, "some meta-code"
assert.eq !!compilerName, false
assert.eq code, "hi"
test "with compilerName", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|BooScript: some meta-code\nhi"
assert.eq metaCode, "some meta-code"
assert.eq compilerName, "BooScript"
assert.eq code, "hi"
block: ->
test "basic", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|\n my meta code\nmy normal code"
assert.eq code, "my normal code"
assert.eq metaCode, "my meta code"
assert.eq compilerName, undefined
test "with compilerName", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|AwesomeScript\n my meta code\nmy normal code"
assert.eq code, "my normal code"
assert.eq metaCode, "my meta code"
assert.eq compilerName, "AwesomeScript"
test "with compilerName and optional colon", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse "|AwesomeScript:\n my meta code\nmy normal code"
assert.eq code, "my normal code"
assert.eq metaCode, "my meta code"
assert.eq compilerName, "AwesomeScript"
test "multi lines", ->
parser = new CaffeineMcParser
{metaCode, compilerName, code} = parser.parse """
|AwesomeScript
# comment
# blank line above
some code
indented
and some more
"""
assert.eq code, ""
assert.eq metaCode, """
# comment
# blank line above
some code
indented
and some more
"""
assert.eq compilerName, "AwesomeScript"