import &StandardImport, {} &path, &CaffeineMcTestHelper

describe
  basic: ->
    beforeEach ->
      CaffeineMcTestHelper.mockFileSystem()
      CaffeineMcTestHelper.reset()

    afterEach ->
      CaffeineMcTestHelper.unmockFileSystem()

    each file from CaffeineMcTestHelper.testFiles
      test "compileFile #{path.basename file}", ->
        compileFile file
        .then (out) ->
          filename = path.basename file
          assert.eq CaffeineMcTestHelper.testLog, []
            "caffeine-mc.config.caf loaded"
            'caffeine-mc.config.caf custom compiler used on: caffeine-mc.config.caf, mySpecialConfig: undefined'
            "caffeine-mc.config.caf ran"
            "caffeine-mc.config.caf custom compiler used on: #{filename}, mySpecialConfig: :worked!"

  withCache: ->
    beforeEach ->
      CaffeineMcTestHelper.mockFileSystem()
      CaffeineMcTestHelper.reset()

    afterEach ->
      CaffeineMcTestHelper.unmockFileSystem()

    each file from CaffeineMcTestHelper.testFiles
      test "compileFile #{path.basename file}", ->
        firstCompileOutput = null
        compileFile file, cache: true

        .then (out) ->
          firstCompileOutput = out
          assert.ok !out.cached

        .then ->
          CaffeineMcTestHelper.reset()
          compileFile file, cache: true

        .then (secondCompileOutput) ->
          assert.eq CaffeineMcTestHelper.testLog, []
            "caffeine-mc.config.caf loaded"
            "caffeine-mc.config.caf custom compiler used on: caffeine-mc.config.caf, mySpecialConfig: undefined"
            "caffeine-mc.config.caf ran"

          assert.ok secondCompileOutput.output.cached
          assert.eq secondCompileOutput.output.compiled, firstCompileOutput.output.compiled


