// Copyright 2014 Traceur Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

suite('require.js', function() {

  var path = require('path');

  test('traceurRequire', function() {
    var traceurRequire = require('../../../src/node/require');
    // TODO(arv): The path below is sucky...
    var x = traceurRequire(path.join(__dirname, './resources/x.js')).x;
    assert.equal(x, 'x');
  });

  test('traceurRequire errors', function() {
    var traceurRequire = require('../../../src/node/require');
    try {
      var filename = 'resources/syntax-error.js';
      traceurRequire(path.join(__dirname, './' + filename));
      assert.notOk(true);
    } catch (ex) {
      assert.equal(ex.length, 1, 'One error is reported');
      assert(ex[0].indexOf(filename) !== -1,
          'The error message contains the filename');
    }
  });

  test('traceurRequire.makeDefault options', function() {
    var traceurRequire = require('../../../src/node/require');
    // TODO(arv): The path below is sucky...
    var fixturePath = path.join(__dirname, './resources/async-function.js');
    var experimentalOption = {asyncFunctions: true};

    // traceur.require must throw without the experimentalOption
    try {
      traceurRequire(fixturePath);
      assert.notOk(true);
    } catch(e) {
      assert.ok(true);
    }

    traceurRequire.makeDefault(undefined, experimentalOption);
    assert.equal(typeof require(fixturePath).foo, 'function');

    // reset traceur.makeDefault options
    traceurRequire.makeDefault();
    try {
      require(fixturePath);
      assert.notOk(true);
    } catch(e) {
      assert.ok(true);
    }
  });

  test('traceurRequire.makeDefault with nested dependencies', function() {
    require('../../../src/node/require').makeDefault(function(filename) {
      return /\/test\/unit\/node\/resources\//.test(
          filename.replace(/\\/g, '/'));
    });

    // // TODO(arv): The path below is sucky...
    var Q = require(path.join(__dirname, './resources/import-export.js')).Q;
    var q = new Q();
    assert.equal(q.name, 'Q');
  });
});

@@ -1253,39 +1253,52 @@
 sert
-(ex%5B0%5D.indexOf(filename) !== -1
+.include(ex%5B0%5D.replace(/%5C%5C/g, '/'), filename
 ,%0A  
@@ -1328,16 +1328,22 @@
 age 
+should 
 contain
-s
  the

Fix test/unit/node/require.js on Windows.