diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-06-28 17:44:16 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-06-28 17:44:16 +0000 |
commit | beffb77e05bf3c192e798587812105458146df32 (patch) | |
tree | e51ff71df80264ad08447719d842929ef1e9fd8e /actionpack/test/template | |
parent | 62ed6950c9119c12e6b17a68c79c45c77a7b1ca4 (diff) | |
download | rails-beffb77e05bf3c192e798587812105458146df32.tar.gz rails-beffb77e05bf3c192e798587812105458146df32.tar.bz2 rails-beffb77e05bf3c192e798587812105458146df32.zip |
Added support for upload progress indicators in Apache and lighttpd 1.4.x (won't work in WEBrick or lighttpd 1.3.x) #1475 [Sean Treadway]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1553 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/test/template')
-rw-r--r-- | actionpack/test/template/upload_progress_helper_test.rb | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/actionpack/test/template/upload_progress_helper_test.rb b/actionpack/test/template/upload_progress_helper_test.rb new file mode 100644 index 0000000000..361aa4bb08 --- /dev/null +++ b/actionpack/test/template/upload_progress_helper_test.rb @@ -0,0 +1,272 @@ +require File.dirname(__FILE__) + '/../abstract_unit' + +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/date_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/number_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/asset_tag_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/form_tag_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/javascript_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/upload_progress_helper' +require File.dirname(__FILE__) + '/../../../activesupport/lib/active_support/core_ext/hash' #for stringify keys + +class MockProgress + def initialize(started, finished) + @started, @finished = [started, finished] + end + + def started? + @started + end + + def finished? + @finished + end + + def message + "A message" + end + + def method_missing(meth, *args) + # Just return some consitant number + meth.to_s.hash.to_i.abs + args.hash.to_i.abs + end +end + +class UploadProgressHelperTest < Test::Unit::TestCase + include ActionView::Helpers::DateHelper + include ActionView::Helpers::NumberHelper + include ActionView::Helpers::AssetTagHelper + include ActionView::Helpers::FormTagHelper + include ActionView::Helpers::TagHelper + include ActionView::Helpers::UrlHelper + include ActionView::Helpers::JavascriptHelper + include ActionView::Helpers::UploadProgressHelper + + def next_upload_id; @upload_id = last_upload_id.succ; end + def last_upload_id; @upload_id ||= 0; end + def current_upload_id; last_upload_id; end + def upload_progress(upload_id = nil); @upload_progress or MockProgress.new(false, true); end + + def setup + @controller = Class.new do + def url_for(options, *parameters_for_method_reference) + "http://www.example.com" + end + end + @controller = @controller.new + end + + def test_upload_status_tag + assert_equal( + '<div class="progressBar" id="UploadProgressBar0"><div class="border"><div class="background"><div class="foreground"></div></div></div></div><div class="uploadStatus" id="UploadStatus0"></div>', + upload_status_tag + ) + end + + def test_upload_status_text_tag + assert_equal( + '<div class="my-upload" id="my-id">Starting</div>', + upload_status_text_tag('Starting', :class => 'my-upload', :id => 'my-id') + ) + end + + + def test_upload_progress_text + @upload_progress = MockProgress.new(false, false) + assert_equal( + "Upload starting...", + upload_progress_text + ) + + @upload_progress = MockProgress.new(true, false) + assert_equal( + "828.7 MB of 456.2 MB at 990.1 MB/s; 10227 days remaining", + upload_progress_text + ) + + @upload_progress = MockProgress.new(true, true) + assert_equal( + "Upload finished. A message", + upload_progress_text + ) + end + + def test_upload_progress_update_bar_js + assert_equal( + "$('UploadProgressBar0').firstChild.firstChild.style.width='0%';", + upload_progress_update_bar_js + ) + + assert_equal( + "$('UploadProgressBar0').firstChild.firstChild.style.width='50%';", + upload_progress_update_bar_js(50) + ) + end + + def test_finish_upload_status + assert_equal( + "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop();\n }\n }</script></head><body onload=\"finish()\"></body></html>", + finish_upload_status + ) + + assert_equal( + "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop(123);\n }\n }</script></head><body onload=\"finish()\"></body></html>", + finish_upload_status(:client_js_argument => 123) + ) + + assert_equal( + "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop();\nparent.location.replace('/redirected/');\n }\n }</script></head><body onload=\"finish()\"></body></html>", + finish_upload_status(:redirect_to => '/redirected/') + ) + end + + def test_form_tag_with_upload_progress + assert_equal( + "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=1'; }this.target = 'UploadTarget1';$('UploadProgressBar1').firstChild.firstChild.style.width='0%';; document.uploadStatus1 = new Ajax.PeriodicalUpdater('UploadStatus1','http://www.example.com',{script:true, onComplete:function(request){$('UploadProgressBar1').firstChild.firstChild.style.width='100%';; }, asynchronous:true}.extend({decay:1.8,freqency:2.0})); return true\"><iframe id=\"UploadTarget1\" name=\"UploadTarget1\" src=\"\" style=\"width:0px;height:0px;border:0\"></iframe>", + form_tag_with_upload_progress + ) + end + + def test_form_tag_with_upload_progress_custom + assert_equal( + "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=5'; }this.target = 'awindow';$('UploadProgressBar0').firstChild.firstChild.style.width='0%';; alert('foo'); document.uploadStatus0 = new Ajax.PeriodicalUpdater('UploadStatus0','http://www.example.com',{script:true, onComplete:function(request){$('UploadProgressBar0').firstChild.firstChild.style.width='100%';; alert('bar'); alert('bar')}, asynchronous:true}.extend({decay:7,freqency:6})); return true\" target=\"awindow\">", + form_tag_with_upload_progress({:upload_id => 5}, {:begin => "alert('foo')", :finish => "alert('bar')", :frequency => 6, :decay => 7, :target => 'awindow'}) + ) + end +end +require File.dirname(__FILE__) + '/../abstract_unit' + +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/date_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/number_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/asset_tag_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/form_tag_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/javascript_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/upload_progress_helper' +require File.dirname(__FILE__) + '/../../../activesupport/lib/active_support/core_ext/hash' #for stringify keys + +class MockProgress + def initialize(started, finished) + @started, @finished = [started, finished] + end + + def started? + @started + end + + def finished? + @finished + end + + def message + "A message" + end + + def method_missing(meth, *args) + # Just return some consitant number + meth.to_s.hash.to_i.abs + args.hash.to_i.abs + end +end + +class UploadProgressHelperTest < Test::Unit::TestCase + include ActionView::Helpers::DateHelper + include ActionView::Helpers::NumberHelper + include ActionView::Helpers::AssetTagHelper + include ActionView::Helpers::FormTagHelper + include ActionView::Helpers::TagHelper + include ActionView::Helpers::UrlHelper + include ActionView::Helpers::JavascriptHelper + include ActionView::Helpers::UploadProgressHelper + + def next_upload_id; @upload_id = last_upload_id.succ; end + def last_upload_id; @upload_id ||= 0; end + def current_upload_id; last_upload_id; end + def upload_progress(upload_id = nil); @upload_progress ||= MockProgress.new(false, true); end + + def setup + @controller = Class.new do + def url_for(options, *parameters_for_method_reference) + "http://www.example.com" + end + end + @controller = @controller.new + end + + def test_upload_status_tag + assert_equal( + '<div class="progressBar" id="UploadProgressBar0"><div class="border"><div class="background"><div class="foreground"></div></div></div></div><div class="uploadStatus" id="UploadStatus0"></div>', + upload_status_tag + ) + end + + def test_upload_status_text_tag + assert_equal( + '<div class="my-upload" id="my-id">Starting</div>', + upload_status_text_tag('Starting', :class => 'my-upload', :id => 'my-id') + ) + end + + + def test_upload_progress_text + @upload_progress = MockProgress.new(false, false) + assert_equal( + "Upload starting...", + upload_progress_text + ) + + @upload_progress = MockProgress.new(true, false) + assert_equal( + "828.7 MB of 456.2 MB at 990.1 MB/s; 10227 days remaining", + upload_progress_text + ) + + @upload_progress = MockProgress.new(true, true) + assert_equal( + "A message", + upload_progress_text + ) + end + + def test_upload_progress_update_bar_js + assert_equal( + "$('UploadProgressBar0').firstChild.firstChild.style.width='0%'", + upload_progress_update_bar_js + ) + + assert_equal( + "$('UploadProgressBar0').firstChild.firstChild.style.width='50%'", + upload_progress_update_bar_js(50) + ) + end + + def test_finish_upload_status + assert_equal( + "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop();\n }\n }</script></head><body onload=\"finish()\"></body></html>", + finish_upload_status + ) + + assert_equal( + "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop(123);\n }\n }</script></head><body onload=\"finish()\"></body></html>", + finish_upload_status(:client_js_argument => 123) + ) + + assert_equal( + "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop();\nparent.location.replace('/redirected/');\n }\n }</script></head><body onload=\"finish()\"></body></html>", + finish_upload_status(:redirect_to => '/redirected/') + ) + end + + def test_form_tag_with_upload_progress + assert_equal( + "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=1'; }this.target = 'UploadTarget1';$('UploadStatus1').innerHTML='Upload starting...'; $('UploadProgressBar1').firstChild.firstChild.style.width='0%'; if (document.uploadStatus1) { document.uploadStatus1.stop(); }document.uploadStatus1 = new Ajax.PeriodicalUpdater('UploadStatus1','http://www.example.com', {script:true, onComplete:function(request){$('UploadStatus1').innerHTML='A message';$('UploadProgressBar1').firstChild.firstChild.style.width='100%';document.uploadStatus1 = null}, asynchronous:true}.extend({decay:1.8,freqency:2.0})); return true\"><iframe id=\"UploadTarget1\" name=\"UploadTarget1\" src=\"\" style=\"width:0px;height:0px;border:0\"></iframe>", + form_tag_with_upload_progress + ) + end + + def test_form_tag_with_upload_progress_custom + assert_equal( + "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=5'; }this.target = 'awindow';$('UploadStatus0').innerHTML='Upload starting...'; $('UploadProgressBar0').firstChild.firstChild.style.width='0%'; alert('foo'); if (document.uploadStatus0) { document.uploadStatus0.stop(); }document.uploadStatus0 = new Ajax.PeriodicalUpdater('UploadStatus0','http://www.example.com', {script:true, onComplete:function(request){$('UploadStatus0').innerHTML='A message';$('UploadProgressBar0').firstChild.firstChild.style.width='100%';document.uploadStatus0 = null; alert('bar')}, asynchronous:true}.extend({decay:7,freqency:6})); return true\" target=\"awindow\">", + form_tag_with_upload_progress({:upload_id => 5}, {:begin => "alert('foo')", :finish => "alert('bar')", :frequency => 6, :decay => 7, :target => 'awindow'}) + ) + end +end |