Viewing File: /usr/local/cpanel/3rdparty/share/angular-ui-scroll/1.6.1/test/AssigningSpec.js

/*global describe, beforeEach, module, it, expect */
describe('uiScroll', function () {
    'use strict';

    beforeEach(module('ui.scroll'));
    beforeEach(module('ui.scroll.test.datasources'));

    var myApp = angular.module('myApp',[]);
    myApp.controller('MyTopController', function($scope) {
        $scope.name = 'MyTopController';
    });
    myApp.controller('MyInnerController', function($scope) {
        $scope.name = 'MyInnerController';
        $scope.container = {};
    });
    myApp.controller('MyBottomController', function($scope) {
        $scope.name = 'MyBottomController';
        $scope.container = {};
    });

    beforeEach(module('myApp'));

    var setDirective = function(options) {
        return function() {
            var directive = {
                restrict: 'E',
                scope: true,
                controller: function($scope) {
                    this.show = true;
                    this.container = {};
                    $scope.container = {};
                }
            };
            if (options.ctrlAs) {
                directive.controllerAs = options.ctrlAs;
            }
            directive.template = options.template;
            return directive;
        };
    };

    var executeTest = function(template, scopeSelector, scopeContainer) {
        inject(function($rootScope, $compile, $timeout) {
            // build and render
            var templateElement = angular.element(template);
            var scope = $rootScope.$new();
            angular.element(document).find('body').append(templateElement);
            $compile(templateElement)(scope);
            scope.$apply();
            $timeout.flush();

            // find adapter element and scope container
            var adapterContainer;
            if(scopeSelector) {
                var adapterElement;
                if(typeof scopeSelector === 'string') {
                  adapterElement = templateElement.find('[ng-controller="' + scopeSelector + '"]');
                }
                else { //number
                    adapterElement = templateElement.find('my-dir' + scopeSelector);
                }
                adapterContainer = adapterElement.scope();
            }
            else {
                adapterContainer = $rootScope;
            }
            if (scopeContainer) {
               adapterContainer = adapterContainer[scopeContainer];
            }

            // expectations
            expect(!!adapterContainer.adapter).toBe(true);
            expect(angular.isString(adapterContainer.adapter.topVisible)).toBe(true);

            // clean up
            templateElement.remove();
        });
    };

    describe('Adapter assigning', function () {

        it('should work in simplest case (viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController">' +
        '<div ng-controller="MyBottomController">' +
            '<div ui-scroll-viewport style="height: 200px">' +
                '<div ui-scroll="item in myMultipageDatasource" adapter="adapter">' +
                    '{{$index}}: {{item}}' +
                '</div>' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyBottomController');
        });

        it('should work in simplest case (no viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<div ui-scroll="item in myMultipageDatasource" adapter="adapter">' +
                '{{$index}}: {{item}}' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyBottomController');
        });

        it('should work with additional container (viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController">' +
        '<div ng-controller="MyBottomController">' +
            '<div ui-scroll-viewport style="height: 200px">' +
                '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
                    '{{$index}}: {{item}}' +
                '</div>' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyBottomController', 'ctrl');
        });

        it('should work with additional container (no viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
                '{{$index}}: {{item}}' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyBottomController', 'ctrl');
        });

        it('should work for "on" syntax (viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<div ui-scroll-viewport style="height: 200px" ng-if="name">' +
                '<div ui-scroll="item in myMultipageDatasource" adapter="adapter on MyInnerController">' +
                    '{{$index}}: {{item}}' +
                '</div>' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyInnerController');
        });

        it('should work for "on" syntax (no viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<div ui-scroll="item in myMultipageDatasource" adapter="adapter on MyInnerController">' +
                '{{$index}}: {{item}}' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyInnerController');
        });

        it('should work for "Controller As" syntax (viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController as ctrl" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<div ui-scroll-viewport style="height: 200px" ng-if="name">' +
                '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
                    '{{$index}}: {{item}}' +
                '</div>' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyInnerController as ctrl', 'ctrl');
        });

        it('should work for "Controller As" syntax (no viewport)', function () {
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController as ctrl" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
                '{{$index}}: {{item}}' +
            '</div>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyInnerController as ctrl', 'ctrl');
        });

        it('should work for custom directive with "Controller As" syntax (viewport)', function () {
            myApp.directive('myDir1', setDirective({
              ctrlAs: 'ctrl',
              template:
'<div ui-scroll-viewport style="height:200px" ng-if="ctrl.show">' +
    '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
        '{{$index}}: {{item}}' +
    '</div>' +
'</div>'
            }));
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<my-dir1></my-dir1>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 1, 'ctrl');
        });

        it('should work for custom directive with "Controller As" syntax (no viewport)', function () {
            myApp.directive('myDir2', setDirective({
              ctrlAs: 'ctrl',
              template:
'<div style="height:200px" ng-if="ctrl.show">' +
    '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
        '{{$index}}: {{item}}' +
    '</div>' +
'</div>'
            }));
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<my-dir2></my-dir2>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 2, 'ctrl');
        });

        it('should work for custom directive with the adapter defined on some external controller', function () {
            myApp.directive('myDir3', setDirective({
              ctrlAs: 'ctrl2',
              template:
'<div ui-scroll-viewport style="height:200px" ng-if="ctrl2.show">' +
    '<div ui-scroll="item in myMultipageDatasource" adapter="ctrl.adapter">' +
        '{{$index}}: {{item}}' +
    '</div>' +
'</div>'
            }));
            var template =
'<div ng-controller="MyTopController">' +
    '<div ng-controller="MyInnerController as ctrl" ng-if="name">' +
        '<div ng-controller="MyBottomController" ng-if="name">' +
            '<my-dir3></my-dir3>' +
        '</div>' +
    '</div>' +
'</div>';
            executeTest(template, 'MyInnerController as ctrl', 'ctrl');
        });
    });

});
Back to Directory File Manager