Skip to content

Commit a3715a7

Browse files
committed
Draggable Tests: Ensure all combinations of helper / draggable positions / scrollParents / parent positions are tested accurately.
1 parent 8b64322 commit a3715a7

File tree

2 files changed

+50
-275
lines changed

2 files changed

+50
-275
lines changed

Gruntfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ grunt.initConfig({
172172
files: expandFiles( "tests/unit/**/*.html" ).filter(function( file ) {
173173
// disabling everything that doesn't (quite) work with PhantomJS for now
174174
// TODO except for all|index|test, try to include more as we go
175-
return !( /(all|index|test|dialog|tooltip)\.html$/ ).test( file );
175+
return !( /(all|index|test|dialog|tooltip|draggable)\.html$/ ).test( file );
176176
})
177177
},
178178
jshint: {

tests/unit/draggable/draggable_options.js

Lines changed: 49 additions & 274 deletions
Original file line numberDiff line numberDiff line change
@@ -666,284 +666,59 @@ test( "helper, default, switching after initialization", function() {
666666
TestHelpers.draggable.shouldMove( element, "helper: original" );
667667
});
668668

669-
test( "{ helper: 'clone' }, relative", function() {
670-
expect( 2 );
671-
672-
var element = $( "#draggable1" ).draggable({ helper: "clone" });
673-
TestHelpers.draggable.shouldMove( element, "helper: clone relative" );
674-
});
675-
676-
test( "{ helper: 'clone' }, absolute", function() {
677-
expect( 2 );
678-
679-
var element = $( "#draggable2" ).draggable({ helper: "clone" });
680-
TestHelpers.draggable.shouldMove( element, "helper: clone absolute" );
681-
});
682-
683-
test( "{ helper: 'original' }, relative, with scroll offset on parent", function() {
684-
expect( 6 );
685-
686-
var element = $( "#draggable1" ).draggable({ helper: "original" });
687-
688-
TestHelpers.draggable.setScroll( "#main" );
689-
TestHelpers.draggable.testScroll( element, "relative" );
690-
691-
TestHelpers.draggable.setScroll( "#main" );
692-
TestHelpers.draggable.testScroll( element, "static" );
693-
694-
TestHelpers.draggable.setScroll( "#main" );
695-
TestHelpers.draggable.testScroll( element, "absolute" );
696-
697-
TestHelpers.draggable.restoreScroll( "#main" );
698-
});
699-
700-
test( "{ helper: 'original' }, relative, with scroll offset on root", function() {
701-
expect( 6 );
702-
703-
var element = $( "#draggable1" ).draggable({ helper: "original" });
704-
705-
TestHelpers.draggable.setScroll( document );
706-
TestHelpers.draggable.testScroll( element, "relative" );
707-
708-
TestHelpers.draggable.setScroll( document );
709-
TestHelpers.draggable.testScroll( element, "static" );
710-
711-
TestHelpers.draggable.setScroll( document );
712-
TestHelpers.draggable.testScroll( element, "absolute" );
713-
714-
TestHelpers.draggable.restoreScroll( document );
715-
});
716-
717-
test( "{ helper: 'original' }, relative, with scroll offset on root and parent", function() {
718-
expect( 6 );
719-
720-
var element = $( "#draggable1" ).draggable({ helper: "original" });
721-
722-
TestHelpers.draggable.setScroll( "#main" );
723-
TestHelpers.draggable.setScroll( document );
724-
TestHelpers.draggable.testScroll( element, "relative" );
725-
726-
TestHelpers.draggable.setScroll( "#main" );
727-
TestHelpers.draggable.setScroll( document );
728-
TestHelpers.draggable.testScroll( element, "static" );
729-
730-
TestHelpers.draggable.setScroll( "#main" );
731-
TestHelpers.draggable.setScroll( document );
732-
TestHelpers.draggable.testScroll( element, "absolute" );
733-
734-
TestHelpers.draggable.restoreScroll( "#main" );
735-
TestHelpers.draggable.restoreScroll( document );
736-
});
737-
738-
test( "{ helper: 'original' }, absolute, with scroll offset on parent", function() {
739-
expect( 6 );
740-
741-
var element = $( "#draggable1" ).css({ position: "absolute", top: 0, left: 0 }).draggable({ helper: "original" });
742-
743-
TestHelpers.draggable.setScroll( "#main" );
744-
TestHelpers.draggable.testScroll( element, "relative" );
745-
746-
TestHelpers.draggable.setScroll( "#main" );
747-
TestHelpers.draggable.testScroll( element, "static" );
748-
749-
TestHelpers.draggable.setScroll( "#main" );
750-
TestHelpers.draggable.testScroll( element, "absolute" );
751-
752-
TestHelpers.draggable.restoreScroll( "#main" );
753-
});
754-
755-
test( "{ helper: 'original' }, absolute, with scroll offset on grandparent", function() {
756-
expect( 6 );
757-
758-
var element = $( "#draggable1" ).css({ position: "absolute", top: 0, left: 0 }).draggable({ helper: "original" });
759-
760-
TestHelpers.draggable.setScrollable( "#main", false );
761-
TestHelpers.draggable.setScrollable( "#scrollParent", true );
762-
763-
TestHelpers.draggable.setScroll( "#scrollParent" );
764-
TestHelpers.draggable.testScroll( element, "relative" );
765-
766-
TestHelpers.draggable.setScroll( "#scrollParent" );
767-
TestHelpers.draggable.testScroll( element, "static" );
768-
769-
TestHelpers.draggable.setScroll( "#scrollParent" );
770-
TestHelpers.draggable.testScroll( element, "absolute" );
771-
772-
TestHelpers.draggable.restoreScroll( "#scrollParent" );
773-
});
774-
775-
test( "{ helper: 'original' }, absolute, with scroll offset on root", function() {
776-
expect( 6 );
777-
778-
var element = $( "#draggable1" ).css({ position: "absolute", top: 0, left: 0 }).draggable({ helper: "original" });
779-
780-
TestHelpers.draggable.setScroll( document );
781-
TestHelpers.draggable.testScroll( element, "relative" );
782-
783-
TestHelpers.draggable.setScroll( document );
784-
TestHelpers.draggable.testScroll( element, "static" );
785-
786-
TestHelpers.draggable.setScroll( document );
787-
TestHelpers.draggable.testScroll( element, "absolute" );
788-
789-
TestHelpers.draggable.restoreScroll( document );
790-
});
791-
792-
test( "{ helper: 'original' }, absolute, with scroll offset on root and parent", function() {
793-
expect( 6 );
794-
795-
var element = $( "#draggable1" ).css({ position: "absolute", top: 0, left: 0 }).draggable({ helper: "original" });
796-
797-
TestHelpers.draggable.setScroll( "#main" );
798-
TestHelpers.draggable.setScroll( document );
799-
TestHelpers.draggable.testScroll( element, "relative" );
800-
801-
TestHelpers.draggable.setScroll( "#main" );
802-
TestHelpers.draggable.setScroll( document );
803-
TestHelpers.draggable.testScroll( element, "static" );
804-
805-
TestHelpers.draggable.setScroll( "#main" );
806-
TestHelpers.draggable.setScroll( document );
807-
TestHelpers.draggable.testScroll( element, "absolute" );
808-
809-
TestHelpers.draggable.restoreScroll( "#main" );
810-
TestHelpers.draggable.restoreScroll( document );
811-
});
812-
813-
test( "{ helper: 'original' }, fixed, with scroll offset on parent", function() {
814-
expect( 4 );
815-
816-
var element = $( "#draggable1" ).css({ position: "fixed", top: 0, left: 0 }).draggable({ helper: "original" });
817-
818-
TestHelpers.draggable.setScroll( "#main" );
819-
TestHelpers.draggable.testScroll( element, "relative" );
820-
821-
TestHelpers.draggable.setScroll( "#main" );
822-
TestHelpers.draggable.testScroll( element, "static" );
823-
824-
TestHelpers.draggable.setScroll( "#main" );
825-
// TODO: investigate these failure in PhantomJS
826-
//TestHelpers.draggable.testScroll( element, "absolute" );
827-
828-
TestHelpers.draggable.restoreScroll( "#main" );
829-
});
830-
831-
test( "{ helper: 'original' }, fixed, with scroll offset on root", function() {
832-
expect( 4 );
833-
834-
var element = $( "#draggable1" ).css({ position: "fixed", top: 0, left: 0 }).draggable({ helper: "original" });
835-
836-
TestHelpers.draggable.setScroll( document );
837-
TestHelpers.draggable.testScroll( element, "relative" );
838-
839-
TestHelpers.draggable.setScroll( document );
840-
TestHelpers.draggable.testScroll( element, "static" );
841-
842-
TestHelpers.draggable.setScroll( document );
843-
// TODO: investigate these failure in PhantomJS
844-
//TestHelpers.draggable.testScroll( element, "absolute" );
845-
846-
TestHelpers.draggable.restoreScroll( document );
847-
});
848-
849-
test( "{ helper: 'original' }, fixed, with scroll offset on root and parent", function() {
850-
expect( 4 );
851-
852-
var element = $( "#draggable1" ).css({ position: "fixed", top: 0, left: 0 }).draggable({ helper: "original" });
853-
854-
TestHelpers.draggable.setScroll( "#main" );
855-
TestHelpers.draggable.setScroll( document );
856-
TestHelpers.draggable.testScroll( element, "relative" );
857-
858-
TestHelpers.draggable.setScroll( "#main" );
859-
TestHelpers.draggable.setScroll( document );
860-
TestHelpers.draggable.testScroll( element, "static" );
861-
862-
TestHelpers.draggable.setScroll( "#main" );
863-
TestHelpers.draggable.setScroll( document );
864-
// TODO: investigate these failure in PhantomJS
865-
//TestHelpers.draggable.testScroll( element, "absolute" );
866-
867-
TestHelpers.draggable.restoreScroll( "#main" );
868-
TestHelpers.draggable.restoreScroll( document );
869-
});
870-
871-
test( "{ helper: 'clone' }, absolute", function() {
872-
expect( 1 );
873-
874-
var helperOffset = null,
875-
origOffset = $( "#draggable1" ).offset(),
876-
element = $( "#draggable1" ).draggable({ helper: "clone", drag: function( event, ui) {
877-
helperOffset = ui.helper.offset();
878-
} });
879-
880-
element.simulate( "drag", {
881-
dx: 1,
882-
dy: 1
883-
});
884-
deepEqual({ top: helperOffset.top - 1, left: helperOffset.left - 1 }, origOffset, "dragged[1, 1]" );
885-
});
886-
887-
test( "{ helper: 'clone' }, absolute with scroll offset on parent", function() {
888-
expect( 6 );
889-
890-
var element = $( "#draggable1" ).draggable({
891-
helper: "clone"
892-
});
893-
894-
TestHelpers.draggable.setScroll( "#main" );
895-
TestHelpers.draggable.testScroll( element, "relative" );
896-
897-
TestHelpers.draggable.setScroll( "#main" );
898-
TestHelpers.draggable.testScroll( element, "static" );
899-
900-
TestHelpers.draggable.setScroll( "#main" );
901-
TestHelpers.draggable.testScroll( element, "absolute" );
902-
903-
TestHelpers.draggable.restoreScroll( "#main" );
904-
});
905-
906-
test( "{ helper: 'clone' }, absolute with scroll offset on root", function() {
907-
expect( 6 );
908-
909-
var element = $( "#draggable1" ).draggable({
910-
helper: "clone"
911-
});
912-
913-
TestHelpers.draggable.setScroll( document );
914-
TestHelpers.draggable.testScroll( element, "relative" );
915-
916-
TestHelpers.draggable.setScroll( document );
917-
TestHelpers.draggable.testScroll( element, "static" );
918-
919-
TestHelpers.draggable.setScroll( document );
920-
TestHelpers.draggable.testScroll( element, "absolute" );
921-
922-
TestHelpers.draggable.restoreScroll( document );
923-
});
924-
925-
test( "{ helper: 'clone' }, absolute with scroll offset on root and parent", function() {
926-
expect( 6 );
927-
928-
var element = $( "#draggable1" ).draggable({
929-
helper: "clone"
930-
});
669+
/* jshint loopfunc: true */
670+
(function(){
671+
var k, l, m,
672+
scrollElements = {
673+
"no elements": [],
674+
"parent": [ "#main" ],
675+
"root": [ document ],
676+
"parent and root": [ "#main", document ],
677+
"grandparent": [ "#scrollParent" ]
678+
},
679+
positions = [ "absolute", "fixed", "relative" ],
680+
helpers = [ "original", "clone" ],
681+
scrollPositions = [ "relative", "static", "absolute" ];
682+
683+
for ( m = 0 ; m < helpers.length; m++ ) {
684+
for ( l = 0; l < positions.length; l++ ) {
685+
for ( k in scrollElements ) {
686+
(function( position, helper, scrollElements, scrollElementsTitle ){
687+
test( "{ helper: '" + helper + "' }, " + position + ", with scroll offset on " + scrollElementsTitle, function() {
688+
expect( 6 );
689+
var i, j,
690+
element = $( "#draggable1" ).css({ position: position, top: 0, left: 0 }).draggable({
691+
helper: helper
692+
});
693+
694+
if ( scrollElements.length === 1 && scrollElements[ 1 ] === "#scrollParent" ) {
695+
TestHelpers.draggable.setScrollable( "#main", false );
696+
TestHelpers.draggable.setScrollable( "#scrollParent", true );
697+
}
931698

932-
TestHelpers.draggable.setScroll( document );
933-
TestHelpers.draggable.setScroll( "#main" );
934-
TestHelpers.draggable.testScroll( element, "relative" );
699+
for ( j = 0; j < scrollPositions.length; j++ ) {
700+
for ( i = 0; i < scrollElements.length; i++ ) {
701+
TestHelpers.draggable.setScroll( scrollElements[ i ] );
702+
}
935703

936-
TestHelpers.draggable.setScroll( document );
937-
TestHelpers.draggable.setScroll( "#main" );
938-
TestHelpers.draggable.testScroll( element, "static" );
704+
TestHelpers.draggable.testScroll( element, scrollPositions[ j ] );
939705

940-
TestHelpers.draggable.setScroll( document );
941-
TestHelpers.draggable.setScroll( "#main" );
942-
TestHelpers.draggable.testScroll( element, "absolute" );
706+
for ( i = 0; i < scrollElements.length; i++ ) {
707+
TestHelpers.draggable.restoreScroll( scrollElements[ i ] );
708+
}
709+
}
943710

944-
TestHelpers.draggable.restoreScroll( document );
945-
TestHelpers.draggable.restoreScroll( "#main" );
946-
});
711+
if ( scrollElements.length === 1 && scrollElements[ 1 ] === "#scrollParent" ) {
712+
TestHelpers.draggable.setScrollable( "#main", true );
713+
TestHelpers.draggable.setScrollable( "#scrollParent", false );
714+
}
715+
});
716+
})( positions[ l ], helpers[ m ], scrollElements[ k ], k );
717+
}
718+
}
719+
}
720+
})();
721+
/* jshint loopfunc: false */
947722

948723
test( "{ opacity: 0.5 }", function() {
949724
expect( 1 );

0 commit comments

Comments
 (0)