             semanticTree: stn
             transformedSemanticTree: if transformedStn != stn then transformedStn else "no change"
           log "\n"
+
         throw error if error
-        assert.eq js, expectedJs
+
+        if expectFailure
+          assert.eq js, null
+        else
+          assert.eq js, expectedJs
 
   parseTestSuite: parseTestSuite = (a, b) ->
     map = if b

      options = {}
      a

    hasStrings = hasOther = false
    for k, v of map
      if isString v
        hasStrings = true
      else
        hasOther = true

    throw new Error "either strings or others!" if hasStrings && hasOther
    if hasStrings
      -> parseTests options, map
    else
      object map, (v) -> parseTestSuite options, v

    parseOptions = merge options, verbose: true

    object map, (expectedJs, source) ->
      expectFailure = !expectedJs?
      expectedFailure = null
      test name = "#{source} >> #{expectedJs || 'ILLEGAL'}".replace(/\n/g, "\\n"), ->
        js = try
          stn = (p = CaffeineScriptParser.parse(source, parseOptions)).getStn()
          transformedStn = stn.transform()
