'use strict';

describe('$$directiveIntrospector', function () {

  var $compileProvider;

  beforeEach(function() {
    module('ng');
    module('ngComponentRouter');
    module(function(_$compileProvider_) {
      $compileProvider = _$compileProvider_;
    });
  });

  it('should call the introspector function whenever a directive factory is registered', inject(function ($$directiveIntrospector) {
    var spy = jasmine.createSpy();
    $$directiveIntrospector(spy);
    function myDir(){}
    $compileProvider.directive('myDir', myDir);

    expect(spy).toHaveBeenCalledWith('myDir', myDir);
  }));

  it('should call the introspector function whenever a directive factory is registered with array annotations', inject(function ($$directiveIntrospector) {
    var spy = jasmine.createSpy();
    $$directiveIntrospector(spy);
    function myDir(){}
    $compileProvider.directive('myDir', ['foo', myDir]);

    expect(spy).toHaveBeenCalledWith('myDir', myDir);
  }));

  it('should retrieve a factory based on directive name', inject(function ($$directiveIntrospector) {
    function myDir(){}
    $compileProvider.directive('myDir', ['foo', myDir]);
    expect($$directiveIntrospector.getTypeByName('myDir')).toBe(myDir);
  }));
});