import {
  ddescribe,
  describe,
  xdescribe,
  it,
  iit,
  xit,
  expect,
  beforeEach,
  afterEach,
  AsyncTestCompleter,
  inject
} from 'angular2/testing_internal';
import {IS_DART} from 'angular2/src/facade/lang';

import {evalModule} from './eval_module';

// This export is used by this test code
// when evaling the test module!
export var TEST_VALUE = 23;

const THIS_MODULE_URL = `package:angular2/test/compiler/eval_module_spec${IS_DART?'.dart':'.js'}`;

export function main() {
  // Dart's isolate support is broken, and these tests will be obsolote soon with
  // https://github.com/angular/angular/issues/6270
  if (IS_DART) {
    return;
  }
  describe('evalModule', () => {
    it('should call the "run" function and allow to use imports',
       inject([AsyncTestCompleter], (async) => {
         var moduleSource = IS_DART ? testDartModule : testJsModule;
         evalModule(moduleSource, [[THIS_MODULE_URL, 'tst']], [1])
             .then((value) => {
               expect(value).toEqual([1, 23]);
               async.done();
             });
       }));
  });
}

var testDartModule = `
  run(data) {
	  data.add(tst.TEST_VALUE);
		return data;
	}
`;

var testJsModule = `
  exports.run = function(data) {
	  data.push(tst.TEST_VALUE);
		return data;
	}
`;
