ソースを参照

tests for maintaining scroll state

Adam Shaw 11 年 前
コミット
c76576de93
1 ファイル変更86 行追加0 行削除
  1. 86 0
      tests/automated/scroll-state.js

+ 86 - 0
tests/automated/scroll-state.js

@@ -0,0 +1,86 @@
+
+describe('scroll state', function() {
+	var options;
+
+	beforeEach(function() {
+		options = {
+			defaultDate: '2015-02-20',
+			contentHeight: 200
+		};
+		affix('#cal');
+		$('#cal').width(800);
+	});
+
+	describe('when in month view', function() {
+		beforeEach(function() {
+			options.defaultView = 'month';
+		});
+		defineTests();
+	});
+
+	describe('when in agendaWeek view', function() {
+		beforeEach(function() {
+			options.defaultView = 'agendaWeek';
+			options.scrollTime = '00:00';
+		});
+		defineTests();
+	});
+
+	function defineTests() {
+
+		it('should be maintained when moving resizing window', function(done) {
+			var scrollEl;
+			var scroll0;
+
+			options.windowResize = function() {
+				setTimeout(function() { // wait until all other tasks are finished
+					expect(scrollEl.scrollTop()).toBe(scroll0);
+					done();
+				}, 0);
+			};
+
+			$('#cal').fullCalendar(options);
+			scrollEl = $('#cal .fc-scroller');
+
+			setTimeout(function() { // wait until after browser's scroll state is applied
+				scrollEl.scrollTop(9999); // all the way
+				scroll0 = scrollEl.scrollTop();
+				$(window).trigger('resize');
+			}, 0);
+		});
+
+		it('should be maintained when after rerendering events', function(done) {
+			var calls = 0;
+			var eventEl0;
+			var eventEl1;
+			var scrollEl;
+			var scroll0;
+
+			options.events = [ {
+				start: '2015-02-20'
+			} ];
+			options.eventAfterAllRender = function() {
+				if (++calls === 1) {
+					eventEl0 = $('#cal .fc-event');
+					expect(eventEl0.length).toBe(1);
+
+					setTimeout(function() { // wait until after browser's scroll state is applied
+						scrollEl.scrollTop(9999); // all the way
+						scroll0 = scrollEl.scrollTop();
+						$('#cal').fullCalendar('rerenderEvents');
+					}, 0);
+				}
+				else {
+					eventEl1 = $('#cal .fc-event');
+					expect(eventEl1.length).toBe(1);
+					expect(eventEl1[0]).not.toBe(eventEl0[0]); // ensure it a rerender
+					expect(scrollEl.scrollTop()).toBe(scroll0);
+					done();
+				}
+			};
+
+			$('#cal').fullCalendar(options);
+			scrollEl = $('#cal .fc-scroller');
+		});
+	}
+});