text: describe('Ionic Content directive', function() {
    var compile, scope, timeout, window;
  
    beforeEach(module('ionic'));
  
    beforeEach(inject(function($compile, $rootScope, $timeout, $window) {
      compile = $compile;
      scope = $rootScope;
      timeout = $timeout;
      window = $window;
      ionic.Platform.setPlatform('Android');
    }));
  
    it('Has $ionicScroll controller', function() {
      var element = compile('<ion-content></ion-content>')(scope);
      expect(element.controller('$ionicScroll').element).toBe(element[0]);
    });
  
    it('passes delegateHandle attribute', function() {
      var element = compile('<ion-content delegate-handle="handleMe">')(scope);
      expect(element.controller('$ionicScroll')._scrollViewOptions.delegateHandle)
        .toBe('handleMe');
    });
  
    it('Has content class', function() {
      var element = compile('<ion-content></ion-content>')(scope);
      expect(element.hasClass('scroll-content')).toBe(true);
    });
  
    it('has $onScroll (used by $ionicScrollController)', function() {
      element = compile('<ion-content on-scroll="foo()"></ion-content>')(scope);
      scope = element.scope();
      scope.foo = jasmine.createSpy('foo');
      scope.$apply();
      expect(typeof scope.$onScroll).toBe('function');
  
      expect(scope.foo).not.toHaveBeenCalled();
      scope.$onScroll();
      expect(scope.foo).toHaveBeenCalled();
    });
  
    ['header','subheader','footer','subfooter','tabs','tabs-top'].forEach(function(type) {
      var scopeVar = '$has' + type.split('-').map(function(part) {
        return part.charAt(0).toUpperCase() + part.substring(1);
      }).join('');
      var className = 'has-'+type;
  
      it('should has-' + type + ' when $parent.' + scopeVar + ' == true', function() {
        var element = compile('<ion-content>')(scope.$new());
        scope = element.scope();
  
        expect(element.hasClass(className)).toBe(false);
        expect(scope[scopeVar]).toBeFalsy();
  
        scope.$apply('$parent.' + scopeVar + ' = true');
        expect(element.hasClass(className)).toBe(true);
  
        scope.$apply('$parent.' + scopeVar + ' = false');
        expect(element.hasClass(className)).toBe(false);
      });
  
      it('should set $scope.' + scopeVar + ' to false on the ionContent element child scope, to stop inheritance of the has* classes', function() {
        var compileScope = scope.$new();
        compileScope[scopeVar] = true;
        var element = compile('<ion-content>')(compileScope);
        expect(compileScope[scopeVar]).toBe(true);
        expect(element.scope()[scopeVar]).toBe(false);
      });
    });
  
    it('should have no scroll element when scroll="false"', function() {
      var element = compile('<ion-content scroll="false"></ion-content>')(scope);
      var scroll = element.find('.scroll');
  
      expect(scroll.length).toBe(0);
    });
  
    it('should add padding classname to scroll element', function() {
      var element = compile('<ion-content padding="shouldPad"></ion-content>')(scope);
      var scroll = element.find('.scroll');
  
      // by default, ion-content should have a scroll element, and the scroll element should not be padded
      expect(scroll.hasClass('padding')).toEqual(false);
      expect(element.hasClass('padding')).toEqual(false);
  
      element.scope().$apply('shouldPad = true');
      expect(scroll.hasClass('padding')).toEqual(true);
      expect(element.hasClass('padding')).toEqual(false);
  
      element.scope().$apply('shouldPad = false');
      expect(scroll.hasClass('padding')).toEqual(false);
      expect(element.hasClass('padding')).toEqual(false);
  
    });
  
    // keep scroll=false && padding tests separate as we don't handle a recompile yet when scroll changes.
    it('should add padding classname to scroll-content element', function() {
      var element = compile('<ion-content padding="shouldPad" scroll="false"></ion-content>')(scope);
  
      // when ion-content is not scrollable, there will be no scroll element, the padding should be added to ion-content itself.
      element.scope().$apply('shouldPad = false');
      expect(element.hasClass('padding')).toEqual(false);
  
      element.scope().$apply('shouldPad = true');
      expect(element.hasClass('padding')).toEqual(true);
    });
  
    it('Should set start x and y', function() {
      var element = compile('<ion-content start-x="100" start-y="300"></ion-content>')(scope);
      scope.$apply();
      var scrollView = element.controller('$ionicScroll').scrollView;
      var vals = scrollView.getValues();
      expect(vals.left).toBe(100);
      expect(vals.top).toBe(300);
    });
  
  });
  /* Tests #555, #1155 */
  describe('Ionic Content Directive scoping', function() {
    beforeEach(module('ionic', function($controllerProvider) {
      $controllerProvider.register('ContentTestCtrl', function($scope){
        this.$scope = $scope;
      });
    }));
    it('should have same scope as content', inject(function($compile, $rootScope) {
      var element = $compile('<ion-content ng-controller="ContentTestCtrl">' +
                             '<form name="myForm"></form>' +
                             '<input ng-model="foo">' +
                             '</ion-content>')($rootScope.$new());
      var contentScope = element.scope();
      var ctrl = element.data('$ngControllerController');
      expect(contentScope.myForm).toBeTruthy();
      expect(ctrl.$scope.myForm).toBeTruthy();
      var input = angular.element(element[0].querySelector('input'));
      input.val('bar');
      input.triggerHandler('input');
      expect(input.scope().foo).toBe('bar');
      expect(ctrl.$scope.foo).toBe('bar');
    }));
  });
  