mirror of
				https://github.com/ether/etherpad-lite.git
				synced 2025-10-31 16:21:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			172 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| describe("timeslider", function(){
 | |
|   //create a new pad before each test run
 | |
|   beforeEach(function(cb){
 | |
|     helper.newPad(cb);
 | |
|     this.timeout(6000);
 | |
|   });
 | |
|   it("loads adds a hundred revisions", function(done) {
 | |
|     var inner$ = helper.padInner$; 
 | |
|     var chrome$ = helper.padChrome$; 
 | |
|     
 | |
|     // make some changes to produce 100 revisions
 | |
|     var timePerRev = 900
 | |
|       , revs = 100;
 | |
|     this.timeout(revs*timePerRev+10000);
 | |
|     for(var i=0; i < revs; i++) {
 | |
|       setTimeout(function() {
 | |
|         // enter 'a' in the first text element
 | |
|         inner$("div").first().sendkeys('a');
 | |
|       }, timePerRev*i);
 | |
|     }
 | |
|     
 | |
|     setTimeout(function() {
 | |
|       // go to timeslider
 | |
|       $('#iframe-container iframe').attr('src', $('#iframe-container iframe').attr('src')+'/timeslider');
 | |
|       
 | |
|       setTimeout(function() {
 | |
|         var timeslider$ = $('#iframe-container iframe')[0].contentWindow.$;
 | |
|         var $sliderBar = timeslider$('#ui-slider-bar');
 | |
|         
 | |
|         var latestContents = timeslider$('#padcontent').text();
 | |
| 
 | |
|         // Click somewhere on the timeslider
 | |
|         var e = new jQuery.Event('mousedown');
 | |
|         e.clientX = e.pageX = 150;
 | |
|         e.clientY = e.pageY = 45;
 | |
|         $sliderBar.trigger(e);
 | |
|         
 | |
|         e = new jQuery.Event('mousedown');
 | |
|         e.clientX = e.pageX = 150;
 | |
|         e.clientY = e.pageY = 40;
 | |
|         $sliderBar.trigger(e);
 | |
|         
 | |
|         e = new jQuery.Event('mousedown');
 | |
|         e.clientX = e.pageX = 150;
 | |
|         e.clientY = e.pageY = 50;
 | |
|         $sliderBar.trigger(e);
 | |
|         
 | |
|         $sliderBar.trigger('mouseup')
 | |
| 
 | |
|         setTimeout(function() {
 | |
|           //make sure the text has changed
 | |
|           expect( timeslider$('#padcontent').text() ).not.to.eql( latestContents );
 | |
|           done();
 | |
|         }, 1000);
 | |
|         
 | |
|       }, 6000);
 | |
|     }, revs*timePerRev);
 | |
|   });
 | |
|   it("changes the url when clicking on the timeslider", function(done) {
 | |
|     var inner$ = helper.padInner$; 
 | |
|     var chrome$ = helper.padChrome$; 
 | |
|     
 | |
|     // make some changes to produce 7 revisions
 | |
|     var timePerRev = 1000
 | |
|       , revs = 20;
 | |
|     this.timeout(revs*timePerRev+10000);
 | |
|     for(var i=0; i < revs; i++) {
 | |
|       setTimeout(function() {
 | |
|         // enter 'a' in the first text element
 | |
|         inner$("div").first().sendkeys('a');
 | |
|       }, timePerRev*i);
 | |
|     }
 | |
|     
 | |
|     setTimeout(function() {
 | |
|       // go to timeslider
 | |
|       $('#iframe-container iframe').attr('src', $('#iframe-container iframe').attr('src')+'/timeslider');
 | |
|       
 | |
|       setTimeout(function() {
 | |
|         var timeslider$ = $('#iframe-container iframe')[0].contentWindow.$;
 | |
|         var $sliderBar = timeslider$('#ui-slider-bar');
 | |
|         
 | |
|         var latestContents = timeslider$('#padcontent').text();
 | |
|         
 | |
|         var oldUrl = $('#iframe-container iframe')[0].contentWindow.location.hash;
 | |
|         
 | |
|         // Click somewhere on the timeslider
 | |
|         var e = new jQuery.Event('mousedown');
 | |
|         e.clientX = e.pageX = 150;
 | |
|         e.clientY = e.pageY = 60;
 | |
|         $sliderBar.trigger(e);
 | |
|         
 | |
|         helper.waitFor(function(){
 | |
|           return $('#iframe-container iframe')[0].contentWindow.location.hash != oldUrl;
 | |
|         }, 6000).always(function(){
 | |
|           expect( $('#iframe-container iframe')[0].contentWindow.location.hash ).not.to.eql( oldUrl );
 | |
|           done();
 | |
|         });
 | |
|       }, 6000);
 | |
|     }, revs*timePerRev);
 | |
|   });
 | |
|   it("jumps to a revision given in the url", function(done) {
 | |
|     var inner$ = helper.padInner$; 
 | |
|     var chrome$ = helper.padChrome$;
 | |
|     this.timeout(20000);
 | |
| 
 | |
|     // wait for the text to be loaded
 | |
|     helper.waitFor(function(){
 | |
|       return inner$('body').text().length != 0;
 | |
|     }, 6000).always(function() {
 | |
|       var newLines = inner$('body div').length;
 | |
|       var oldLength = inner$('body').text().length + newLines / 2;
 | |
|       expect( oldLength ).to.not.eql( 0 );
 | |
|       inner$("div").first().sendkeys('a');
 | |
|       
 | |
|       // wait for our additional revision to be added
 | |
|       helper.waitFor(function(){
 | |
|         // newLines takes the new lines into account which are strippen when using
 | |
|         // inner$('body').text(), one <div> is used for one line in ACE.
 | |
|         var lenOkay = inner$('body').text().length + newLines / 2 != oldLength;
 | |
|         // this waits for the color to be added to our <span>, which means that the revision
 | |
|         // was accepted by the server.
 | |
|         var colorOkay = inner$('span').first().attr('class').indexOf("author-") == 0;
 | |
|         return lenOkay && colorOkay;
 | |
|       }, 6000).always(function() {
 | |
|         // go to timeslider with a specific revision set
 | |
|         $('#iframe-container iframe').attr('src', $('#iframe-container iframe').attr('src')+'/timeslider#0');
 | |
|         
 | |
|         // wait for the timeslider to be loaded
 | |
|         helper.waitFor(function(){
 | |
|           try {
 | |
|             timeslider$ = $('#iframe-container iframe')[0].contentWindow.$;
 | |
|           } catch(e){}
 | |
|           if(timeslider$){
 | |
|             return timeslider$('#padcontent').text().length == oldLength;
 | |
|           }
 | |
|         }, 6000).always(function(){
 | |
|           expect( timeslider$('#padcontent').text().length ).to.eql( oldLength );
 | |
|           done();
 | |
|         });
 | |
|       });
 | |
|     });
 | |
|   });
 | |
|   it("checks the export url", function(done) {
 | |
|     var inner$ = helper.padInner$; 
 | |
|     var chrome$ = helper.padChrome$; 
 | |
|     this.timeout(11000);
 | |
|     inner$("div").first().sendkeys('a');
 | |
|     
 | |
|     setTimeout(function() {
 | |
|       // go to timeslider
 | |
|       $('#iframe-container iframe').attr('src', $('#iframe-container iframe').attr('src')+'/timeslider#0');
 | |
|       var timeslider$;
 | |
|       var exportLink;
 | |
|       
 | |
|       helper.waitFor(function(){
 | |
|         try{
 | |
|           timeslider$ = $('#iframe-container iframe')[0].contentWindow.$;
 | |
|         }catch(e){}
 | |
|         if(!timeslider$)
 | |
|           return false;
 | |
|         exportLink = timeslider$('#exportplaina').attr('href');
 | |
|         if(!exportLink)
 | |
|           return false;
 | |
|         return exportLink.substr(exportLink.length - 12) == "0/export/txt";
 | |
|       }, 6000).always(function(){
 | |
|         expect( exportLink.substr(exportLink.length - 12) ).to.eql( "0/export/txt" );
 | |
|         done();
 | |
|       });
 | |
|     }, 2500);
 | |
|   });
 | |
| });
 |