PageRenderTime 61ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/plugins/tiny_mce_helper/test/unit/tiny_mce_helper_test.rb

https://github.com/hrmc/hrmc
Ruby | 386 lines | 300 code | 72 blank | 14 comment | 5 complexity | 9ac214da8b32c006ef4cb482006ad7fb MD5 | raw file
Possible License(s): LGPL-2.1
  1. require File.dirname(__FILE__) + '/../test_helper'
  2. # Don't go out to the Internet if we're not live
  3. unless ENV['LIVE']
  4. class << PluginAWeek::TinyMCEHelper
  5. # Whether or not an IO failure should be caused
  6. attr_accessor :fail_io
  7. # Use pages we've already downloaded for Sourceforge and Wiki information
  8. def open(name, *rest, &block)
  9. if name.include?('sourceforge')
  10. name = 'test/files/sourceforge.html'
  11. elsif name.include?('wiki')
  12. name = 'test/files/wiki.html'
  13. end
  14. super
  15. end
  16. # User files we've already downloaded for extracting the TinyMCE soure
  17. def system(cmd, *args)
  18. raise IOError if fail_io
  19. if cmd == 'wget'
  20. if args.first =~ /3_0_8/
  21. FileUtils.cp("#{EXPANDED_RAILS_ROOT}/../files/tinymce_3_0_8.zip", '/tmp/')
  22. elsif args.first =~ /3_0_6_2/
  23. FileUtils.cp("#{EXPANDED_RAILS_ROOT}/../files/tinymce_3_0_6_2.zip", '/tmp/')
  24. else
  25. super
  26. end
  27. else
  28. super
  29. end
  30. end
  31. end
  32. end
  33. # Simulate user input
  34. class << STDIN
  35. attr_accessor :prompted
  36. def gets
  37. @prompted = true
  38. "#{@gets.is_a?(Array) ? @gets.shift : @gets}\n"
  39. end
  40. def gets=(value)
  41. @gets = value
  42. end
  43. end
  44. class TinyMceInstallerTest < Test::Unit::TestCase
  45. def setup
  46. # Set up public path
  47. @public_root = "#{Rails.root}/public"
  48. FileUtils.mkdir_p("#{Rails.root}/public/javascripts")
  49. # Set default STDIN value
  50. STDIN.gets = 'n'
  51. STDIN.prompted = false
  52. end
  53. def test_should_save_latest_version_to_default_target
  54. PluginAWeek::TinyMCEHelper.install(:force => true)
  55. assert File.exists?("#{Rails.root}/public/javascripts/tiny_mce")
  56. source = File.open("#{Rails.root}/public/javascripts/tiny_mce/tiny_mce_src.js").readlines.join
  57. assert source.include?("majorVersion : '3'");
  58. assert source.include?("minorVersion : '0.8'");
  59. end
  60. def test_should_allow_custom_version
  61. PluginAWeek::TinyMCEHelper.install(:version => '3.0.6.2', :force => true)
  62. assert File.exists?("#{Rails.root}/public/javascripts/tiny_mce")
  63. source = File.open("#{Rails.root}/public/javascripts/tiny_mce/tiny_mce_src.js").readlines.join
  64. assert source.include?("majorVersion : '3'");
  65. assert source.include?("minorVersion : '0.6.2'");
  66. end
  67. def test_should_allow_custom_target
  68. PluginAWeek::TinyMCEHelper.install(:target => 'public/javascripts/tinymce', :force => true)
  69. assert File.exists?("#{Rails.root}/public/javascripts/tinymce")
  70. end
  71. def test_should_prompt_user_if_base_target_already_exists
  72. FileUtils.mkdir("#{Rails.root}/public/javascripts/tiny_mce")
  73. PluginAWeek::TinyMCEHelper.install
  74. assert STDIN.prompted
  75. end
  76. def test_should_skip_if_target_exists_and_user_skips
  77. FileUtils.mkdir("#{Rails.root}/public/javascripts/tiny_mce")
  78. STDIN.gets = 'n'
  79. PluginAWeek::TinyMCEHelper.install
  80. assert !File.exists?("#{Rails.root}/public/javascripts/tiny_mce/tiny_mce_src.js")
  81. end
  82. def test_should_not_skip_if_target_exists_and_user_doesnt_skip
  83. FileUtils.mkdir("#{Rails.root}/public/javascripts/tiny_mce")
  84. STDIN.gets = 'y'
  85. PluginAWeek::TinyMCEHelper.install
  86. assert File.exists?("#{Rails.root}/public/javascripts/tiny_mce/tiny_mce_src.js")
  87. end
  88. def test_should_continue_prompting_user_if_target_exists_and_invalid_option_is_typed
  89. FileUtils.mkdir("#{Rails.root}/public/javascripts/tiny_mce")
  90. STDIN.gets = %w(k y)
  91. PluginAWeek::TinyMCEHelper.install
  92. assert STDIN.gets.chomp.empty?
  93. assert File.exists?("#{Rails.root}/public/javascripts/tiny_mce/tiny_mce_src.js")
  94. end
  95. def test_install_should_overwrite_existing_folder_if_forced
  96. FileUtils.mkdir("#{Rails.root}/public/javascripts/tiny_mce")
  97. PluginAWeek::TinyMCEHelper.install(:force => true)
  98. assert File.exists?("#{Rails.root}/public/javascripts/tiny_mce/tiny_mce_src.js")
  99. end
  100. def test_should_not_raise_exception_if_error_occurs_during_io_operation
  101. PluginAWeek::TinyMCEHelper.fail_io = true
  102. assert_nothing_raised {PluginAWeek::TinyMCEHelper.install(:force => true)}
  103. ensure
  104. PluginAWeek::TinyMCEHelper.fail_io = false
  105. end
  106. def teardown
  107. FileUtils.rmtree(@public_root)
  108. end
  109. end
  110. class TinyMceUpdaterTest < Test::Unit::TestCase
  111. def setup
  112. # Set up config path
  113. @config_root = "#{Rails.root}/config"
  114. FileUtils.cp("#{Rails.root}/config_bak/tiny_mce_options.yml", @config_root)
  115. @original_config_files = Dir["#{Rails.root}/config/**/*"].sort
  116. # Track valid options
  117. @original_valid_options = PluginAWeek::TinyMCEHelper.valid_options.dup
  118. end
  119. def test_should_update_options_if_options_configuration_doesnt_exist
  120. FileUtils.rm("#{Rails.root}/config/tiny_mce_options.yml")
  121. PluginAWeek::TinyMCEHelper.update_options
  122. assert File.exists?("#{Rails.root}/config/tiny_mce_options.yml")
  123. options = File.open(PluginAWeek::TinyMCEHelper::OPTIONS_FILE_PATH) {|f| YAML.load(f.read)}
  124. assert_instance_of Array, options
  125. end
  126. def test_should_update_options_if_options_configuration_exists
  127. File.truncate("#{Rails.root}/config/tiny_mce_options.yml", 0)
  128. PluginAWeek::TinyMCEHelper.update_options
  129. assert File.exists?("#{Rails.root}/config/tiny_mce_options.yml")
  130. options = File.open(PluginAWeek::TinyMCEHelper::OPTIONS_FILE_PATH) {|f| YAML.load(f.read)}
  131. assert_instance_of Array, options
  132. end
  133. def teardown
  134. PluginAWeek::TinyMCEHelper.valid_options = @original_valid_options
  135. end
  136. end
  137. class TinyMceUninstallerTest < Test::Unit::TestCase
  138. def setup
  139. # Set up public path
  140. @public_root = "#{Rails.root}/public"
  141. FileUtils.mkdir_p("#{Rails.root}/public/javascripts")
  142. # Set up config path
  143. @config_root = "#{Rails.root}/config"
  144. FileUtils.cp("#{Rails.root}/config_bak/tiny_mce_options.yml", @config_root)
  145. @original_config_files = Dir["#{Rails.root}/config/**/*"].sort
  146. end
  147. def test_uninstall_should_remove_options_configuration
  148. PluginAWeek::TinyMCEHelper.uninstall
  149. assert !File.exists?("#{Rails.root}/config/tiny_mce_options.yml")
  150. end
  151. def test_uninstall_should_remove_tinymce_source
  152. FileUtils.mkdir("#{Rails.root}/public/javascripts/tiny_mce")
  153. PluginAWeek::TinyMCEHelper.uninstall
  154. assert !File.exists?("#{Rails.root}/public/javascripts/tiny_mce")
  155. end
  156. def teardown
  157. FileUtils.rmtree(@public_root)
  158. end
  159. end
  160. class TinyMceHelperTest < Test::Unit::TestCase
  161. include ActionView::Helpers::TagHelper
  162. include ActionView::Helpers::AssetTagHelper
  163. include ActionView::Helpers::JavaScriptHelper
  164. include PluginAWeek::TinyMCEHelper
  165. def setup
  166. # Set up test request
  167. @request = ActionController::TestRequest.new
  168. @controller = ActionController::Base.new
  169. @controller.request = @request
  170. @controller.instance_eval {@_params = request.path_parameters}
  171. @controller.send(:initialize_current_url)
  172. # Make sure we always start in a test environment
  173. silence_warnings {Object.const_set('RAILS_ENV', 'test')}
  174. end
  175. def test_valid_options_should_not_be_empty
  176. assert PluginAWeek::TinyMCEHelper.valid_options.any?
  177. end
  178. def test_should_be_using_tiny_mce_if_instance_variable_exists
  179. @uses_tiny_mce = true
  180. assert using_tiny_mce?
  181. end
  182. def test_should_not_be_using_tiny_mce_if_instance_variable_doesnt_exist
  183. @uses_tiny_mce = false
  184. assert !using_tiny_mce?
  185. end
  186. def test_should_use_source_file_name_if_in_development
  187. silence_warnings {Object.const_set('RAILS_ENV', 'development')}
  188. assert_equal 'tiny_mce/tiny_mce_src', tiny_mce_file_name
  189. end
  190. def test_should_use_compressed_file_name_if_in_test
  191. silence_warnings {Object.const_set('RAILS_ENV', 'test')}
  192. assert_equal 'tiny_mce/tiny_mce', tiny_mce_file_name
  193. end
  194. def test_should_use_compressed_file_name_if_in_production
  195. silence_warnings {Object.const_set('RAILS_ENV', 'production')}
  196. assert_equal 'tiny_mce/tiny_mce', tiny_mce_file_name
  197. end
  198. def test_should_use_environment_file_name_for_javascript_include_in_development
  199. silence_warnings {Object.const_set('RAILS_ENV', 'development')}
  200. assert_equal '<script src="/javascripts/tiny_mce/tiny_mce_src.js" type="text/javascript"></script>', javascript_include_tiny_mce
  201. end
  202. def test_should_use_environment_file_name_for_javascript_include_in_test
  203. silence_warnings {Object.const_set('RAILS_ENV', 'test')}
  204. assert_equal '<script src="/javascripts/tiny_mce/tiny_mce.js" type="text/javascript"></script>', javascript_include_tiny_mce
  205. end
  206. def test_should_include_conditional_javascript_if_using_tiny_mce
  207. @uses_tiny_mce = true
  208. assert_equal '<script src="/javascripts/tiny_mce/tiny_mce.js" type="text/javascript"></script>', javascript_include_tiny_mce_if_used
  209. end
  210. def test_should_not_include_conditional_javascript_if_not_using_tiny_mce
  211. @uses_tiny_mce = false
  212. assert_nil javascript_include_tiny_mce_if_used
  213. end
  214. end
  215. class TinyMceHelperScriptTest < Test::Unit::TestCase
  216. include ActionView::Helpers::TagHelper
  217. include ActionView::Helpers::JavaScriptHelper
  218. include PluginAWeek::TinyMCEHelper
  219. def setup
  220. # Track valid options
  221. @original_valid_options = PluginAWeek::TinyMCEHelper.valid_options.dup
  222. end
  223. def test_script_should_use_textareas_mode_and_simple_theme_by_default
  224. expected = <<-end_str
  225. tinyMCE.init({
  226. mode : 'textareas',
  227. theme : 'simple'
  228. });
  229. end_str
  230. assert_html_equal expected, tiny_mce_init_script
  231. end
  232. def test_script_should_raise_exception_if_invalid_option_provided
  233. assert_raise(ArgumentError) {tiny_mce_init_script(:invalid => true)}
  234. end
  235. def test_script_should_not_raise_exception_if_invalid_option_provided_but_valid_options_is_nil
  236. PluginAWeek::TinyMCEHelper.valid_options = nil
  237. assert_nothing_raised {tiny_mce_init_script(:invalid => true)}
  238. end
  239. def test_script_should_not_raise_exception_if_invalid_option_provided_but_valid_options_is_empty
  240. PluginAWeek::TinyMCEHelper.valid_options = []
  241. assert_nothing_raised {tiny_mce_init_script(:invalid => true)}
  242. end
  243. def test_script_should_not_raise_exception_for_dynamic_options
  244. assert_nothing_raised {tiny_mce_init_script(:theme_advanced_buttons_1 => '', :theme_advanced_container_test => '')}
  245. end
  246. def test_script_should_convert_symbols
  247. expected = <<-end_str
  248. tinyMCE.init({
  249. mode : 'textareas',
  250. theme : 'simple'
  251. });
  252. end_str
  253. assert_html_equal expected, tiny_mce_init_script(:mode => :textareas)
  254. end
  255. def test_script_should_convert_numbers
  256. expected = <<-end_str
  257. tinyMCE.init({
  258. mode : 'textareas',
  259. theme : 'simple',
  260. width : '640'
  261. });
  262. end_str
  263. assert_html_equal expected, tiny_mce_init_script(:width => 640)
  264. end
  265. def test_script_should_convert_arrays
  266. expected = <<-end_str
  267. tinyMCE.init({
  268. mode : 'textareas',
  269. theme : 'simple',
  270. valid_elements : 'b,p,br,i,u'
  271. });
  272. end_str
  273. assert_html_equal expected, tiny_mce_init_script(:valid_elements => %w(b p br i u))
  274. end
  275. def test_script_should_convert_boolean_true
  276. expected = <<-end_str
  277. tinyMCE.init({
  278. auto_reset_designmode : true,
  279. mode : 'textareas',
  280. theme : 'simple'
  281. });
  282. end_str
  283. assert_html_equal expected, tiny_mce_init_script(:auto_reset_designmode => true)
  284. end
  285. def test_script_should_convert_boolean_false
  286. expected = <<-end_str
  287. tinyMCE.init({
  288. auto_reset_designmode : false,
  289. mode : 'textareas',
  290. theme : 'simple'
  291. });
  292. end_str
  293. assert_html_equal expected, tiny_mce_init_script(:auto_reset_designmode => false)
  294. end
  295. def test_script_should_raise_exception_if_unknown_value_class_provided
  296. assert_raise(ArgumentError) {tiny_mce_init_script(:mode => Hash.new)}
  297. end
  298. def test_tiny_mce_should_wrap_script_in_javascript_tag
  299. expected = <<-end_str
  300. <script type="text/javascript">
  301. //<![CDATA[
  302. tinyMCE.init({
  303. mode : 'textareas',
  304. theme : 'simple'
  305. });
  306. //]]>
  307. </script>
  308. end_str
  309. assert_html_equal expected, tiny_mce
  310. end
  311. def teardown
  312. PluginAWeek::TinyMCEHelper.valid_options = @original_valid_options
  313. end
  314. end