Explorar el Código

tests and tweaks for eventRenderWait

Adam Shaw hace 9 años
padre
commit
3c12c1d29d
Se han modificado 3 ficheros con 60 adiciones y 2 borrados
  1. 2 1
      CHANGELOG.md
  2. 1 1
      src/common/View.js
  3. 57 0
      tests/automated/eventRenderWait.js

+ 2 - 1
CHANGELOG.md

@@ -2,7 +2,8 @@
 v3.1.0 (2016-12-05)
 -------------------
 
-- `eventRenderWait` for implicit batch event rerendering, for performance (#2938)
+- experimental support for implicitly batched ("debounced") event rendering (#2938)
+	- `eventRenderWait` (off by default)
 - new `footer` option, similar to header toolbar (#654, #3299)
 - event rendering batch methods (#3351):
 	- `renderEvents`

+ 1 - 1
src/common/View.js

@@ -895,7 +895,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 	requestEventsRender: function(events) {
 		var _this = this;
 
-		return this.eventRenderQueue.add(function() {
+		return this.eventRenderQueue.add(function() { // might not return a promise if debounced!? bad
 			return _this.executeEventsRender(events);
 		});
 	},

+ 57 - 0
tests/automated/eventRenderWait.js

@@ -0,0 +1,57 @@
+describe('eventRenderWait', function() {
+
+	it('batches together many event renders', function(done) {
+		var eventSource1 = [
+			{ title: 'event1', start: '2016-12-04T01:00:00', className: 'event1' },
+			{ title: 'event2', start: '2016-12-04T02:00:00', className: 'event2' }
+		];
+		var eventSource2 = [
+			{ title: 'event3', start: '2016-12-04T03:00:00', className: 'event3' },
+			{ title: 'event4', start: '2016-12-04T04:00:00', className: 'event4' }
+		];
+		var extraEvent1 = { title: 'event5', start: '2016-12-04T05:00:00', className: 'event5', id: '5' };
+		var extraEvent2 = { title: 'event6', start: '2016-12-04T06:00:00', className: 'event6', id: '6' };
+		var eventRenderCnt = 0;
+
+		affix('#cal');
+		$('#cal').fullCalendar({
+			defaultDate: '2016-12-04',
+			defaultView: 'agendaDay',
+			events: eventSource1,
+			eventRenderWait: 0, // will still debounce despite being zero
+			eventAfterAllRender: function() {
+				eventRenderCnt++;
+				if (eventRenderCnt === 1) {
+
+					expect($('.event1').length).toBe(1);
+					expect($('.event2').length).toBe(1);
+					expect($('.event3').length).toBe(1);
+					expect($('.event4').length).toBe(1);
+					expect($('.event5').length).toBe(1);
+					expect($('.event6').length).toBe(0); // got removed
+
+					// make sure doesn't fire again
+					setTimeout(function() {
+						expect(eventRenderCnt).toBe(1);
+						done();
+					}, 1000);
+				}
+			}
+		});
+
+		var calendar = $('#cal').fullCalendar('getCalendar');
+		expect($('.fc-event').length).toBe(0);
+
+		calendar.addEventSource(eventSource2);
+		expect($('.fc-event').length).toBe(0);
+
+		calendar.renderEvent(extraEvent1);
+		expect($('.fc-event').length).toBe(0);
+
+		calendar.renderEvent(extraEvent2);
+		expect($('.fc-event').length).toBe(0);
+
+		calendar.removeEvents(extraEvent2.id); // only works with id!?
+		expect($('.fc-event').length).toBe(0);
+	});
+});