#!/usr/bin/env ruby require 'test/unit' currentPath = File.dirname(__FILE__) require File.join( currentPath, '../../lib/masterview' ) class TestAutoCopy < Test::Unit::TestCase MVTestDir = File.expand_path( File.join(File.dirname(__FILE__), '..' ) ) ImageSrcDir = "#{MVTestDir}/tmp/src/images" ImageDstDir = "#{MVTestDir}/tmp/dst/public/images" CSSSrcDir = "#{MVTestDir}/tmp/src/css" CSSDstDir = "#{MVTestDir}/tmp/dst/public/stylesheets" JavascriptSrcDir = "#{MVTestDir}/tmp/src/scripts" JavascriptDstDir = "#{MVTestDir}/tmp/dst/public/javascript" AllDirs = [ImageSrcDir, ImageDstDir, CSSSrcDir, CSSDstDir, JavascriptSrcDir, JavascriptDstDir] ImageSrcMIO = MasterView::MIO::FileMIOTree.new(ImageSrcDir) ImageDstMIO = MasterView::MIO::FileMIOTree.new(ImageDstDir) CSSSrcMIO = MasterView::MIO::FileMIOTree.new(CSSSrcDir) CSSDstMIO = MasterView::MIO::FileMIOTree.new(CSSDstDir) JavascriptSrcMIO = MasterView::MIO::FileMIOTree.new(JavascriptSrcDir) JavascriptDstMIO = MasterView::MIO::FileMIOTree.new(JavascriptDstDir) ImageFiles = ['blank.gif', 'star.jpg', 'test.png', 'FOO.GIF', 'bar/baz.png', 'cat/dog/mouse.JPG'] CSSFiles = ['style.css', 'custom/blue.css', 'client/standard/great1.css'] JavascriptFiles = ['prototype.js', 'scriptaculous.js', 'custom/script.js', 'nested/custom/foo.js'] ModImageFiles = [ImageFiles[0], ImageFiles[4]] ModCSSFiles = [CSSFiles[0], CSSFiles[2]] ModJavascriptFiles = [JavascriptFiles[2]] MixedSrcDir = "#{MVTestDir}/tmp/src/mixed" def setup AllDirs.each do |dir| # clear out old tree, and insure that it exists pathname = Pathname.new(dir) pathname.rmtree if pathname.exist? pathname.mkpath end ImageFiles.each { |f| ImageSrcMIO.path(f).write('testfile') } # create each test file CSSFiles.each { |f| CSSSrcMIO.path(f).write('testfile') } # create each test file JavascriptFiles.each { |f| JavascriptSrcMIO.path(f).write('testfile') } # create each test file @image_auto_copy = MasterView::AutoCopy.new(ImageSrcMIO, ImageDstMIO) @css_auto_copy = MasterView::AutoCopy.new(CSSSrcMIO, CSSDstMIO) @javascript_auto_copy = MasterView::AutoCopy.new(JavascriptSrcMIO, JavascriptDstMIO) end #------------------------------------------------------------------------------ # Test Cases #------------------------------------------------------------------------------ def test_instance_auto_copy_wildcarded sleep(1) # make sure time (seconds) change before updating so timestamp will be different copied_files = @image_auto_copy.copy_updated_files assert_equal(ImageFiles.sort, copied_files.sort) ModImageFiles.each { |f| ImageSrcMIO.path(f).write('updated') } assert_equal(ModImageFiles.sort, @image_auto_copy.copy_updated_files.sort) copied_files = @css_auto_copy.copy_updated_files assert_equal(CSSFiles.sort, copied_files.sort) ModCSSFiles.each { |f| CSSSrcMIO.path(f).write('updated') } assert_equal(ModCSSFiles.sort, @css_auto_copy.copy_updated_files.sort) copied_files = @javascript_auto_copy.copy_updated_files assert_equal(JavascriptFiles.sort, copied_files.sort) ModJavascriptFiles.each { |f| JavascriptSrcMIO.path(f).write('updated') } assert_equal(ModJavascriptFiles.sort, @javascript_auto_copy.copy_updated_files.sort) end def test_instance_auto_copy_pattern_specified sleep(1) # make sure time (seconds) change before updating so timestamp will be different @image_auto_copy = MasterView::AutoCopy.new(ImageSrcMIO, ImageDstMIO, ['*.gif', '*.jpg', '*.png', '*.GIF', '*.JPG']) @css_auto_copy = MasterView::AutoCopy.new(CSSSrcMIO, CSSDstMIO, ['*.css']) @javascript_auto_copy = MasterView::AutoCopy.new(JavascriptSrcMIO, JavascriptDstMIO, ['*.js']) copied_files = @image_auto_copy.copy_updated_files assert_equal(ImageFiles.sort, copied_files.sort) ModImageFiles.each { |f| ImageSrcMIO.path(f).write('updated') } assert_equal(ModImageFiles.sort, @image_auto_copy.copy_updated_files.sort) copied_files = @css_auto_copy.copy_updated_files assert_equal(CSSFiles.sort, copied_files.sort) ModCSSFiles.each { |f| CSSSrcMIO.path(f).write('updated') } assert_equal(ModCSSFiles.sort, @css_auto_copy.copy_updated_files.sort) copied_files = @javascript_auto_copy.copy_updated_files assert_equal(JavascriptFiles.sort, copied_files.sort) ModJavascriptFiles.each { |f| JavascriptSrcMIO.path(f).write('updated') } assert_equal(ModJavascriptFiles.sort, @javascript_auto_copy.copy_updated_files.sort) end def test_instance_mixed_files_copied_to_different_directories mixedSourceMIO = MasterView::MIO::FileMIOTree.new(MixedSrcDir) allFiles = ImageFiles+CSSFiles+JavascriptFiles allFiles.each { |f| mixedSourceMIO.path(f).write('testfile') } # create each test file sleep(1) # so timestamp will differ on update @image_auto_copy = MasterView::AutoCopy.new(mixedSourceMIO, ImageDstMIO, ['*.gif', '*.jpg', '*.png', '*.GIF', '*.JPG']) @css_auto_copy = MasterView::AutoCopy.new(mixedSourceMIO, CSSDstMIO, ['*.css']) @javascript_auto_copy = MasterView::AutoCopy.new(mixedSourceMIO, JavascriptDstMIO, ['*.js']) copied_files = @image_auto_copy.copy_updated_files assert_equal(ImageFiles.sort, copied_files.sort) ModImageFiles.each { |f| mixedSourceMIO.path(f).write('updated') } assert_equal(ModImageFiles.sort, @image_auto_copy.copy_updated_files.sort) copied_files = @css_auto_copy.copy_updated_files assert_equal(CSSFiles.sort, copied_files.sort) ModCSSFiles.each { |f| mixedSourceMIO.path(f).write('updated') } assert_equal(ModCSSFiles.sort, @css_auto_copy.copy_updated_files.sort) copied_files = @javascript_auto_copy.copy_updated_files assert_equal(JavascriptFiles.sort, copied_files.sort) ModJavascriptFiles.each { |f| mixedSourceMIO.path(f).write('updated') } assert_equal(ModJavascriptFiles.sort, @javascript_auto_copy.copy_updated_files.sort) end def test_instance_auto_copy_pattern_lc_only @image_auto_copy = MasterView::AutoCopy.new(ImageSrcMIO, ImageDstMIO, ['*.gif', '*.jpg', '*.png']) copied_files = @image_auto_copy.copy_updated_files assert_equal([ImageFiles[0], ImageFiles[1], ImageFiles[2], ImageFiles[4]].sort, copied_files.sort) # only lowercase ones copied end def test_instance_auto_copy_pattern_lc_only_symbol_extensions symbol_extensions = [:gif, :jpg, :png] filename_patterns = symbol_extensions.collect{ |s| "*.#{s.to_s}" } @image_auto_copy = MasterView::AutoCopy.new(ImageSrcMIO, ImageDstMIO, filename_patterns) copied_files = @image_auto_copy.copy_updated_files assert_equal([ImageFiles[0], ImageFiles[1], ImageFiles[2], ImageFiles[4]].sort, copied_files.sort) # only lowercase ones copied end def test_registered_auto_copy sleep(1) # make sure time (seconds) change before updating so timestamp will be different MasterView::AutoCopy.clear_registrations MasterView::AutoCopy.register(ImageSrcMIO, ImageDstMIO) MasterView::AutoCopy.register(CSSSrcMIO, CSSDstMIO, ['*.css']) MasterView::AutoCopy.register(JavascriptSrcMIO, JavascriptDstMIO) expected_array_copied = ImageFiles+CSSFiles+JavascriptFiles assert_equal(expected_array_copied.sort, MasterView::AutoCopy.copy_all_updated_files.sort) ModImageFiles.each { |f| ImageSrcMIO.path(f).write('updated') } ModCSSFiles.each { |f| CSSSrcMIO.path(f).write('updated') } ModJavascriptFiles.each { |f| JavascriptSrcMIO.path(f).write('updated') } expected_array_copied = ModImageFiles+ModCSSFiles+ModJavascriptFiles assert_equal(expected_array_copied.sort, MasterView::AutoCopy.copy_all_updated_files.sort) end # test the clear, after clear will only copy the one set def test_clear_registered_auto_copy sleep(1) # make sure time (seconds) change before updating so timestamp will be different MasterView::AutoCopy.clear_registrations MasterView::AutoCopy.register(ImageSrcMIO, ImageDstMIO) MasterView::AutoCopy.register(CSSSrcMIO, CSSDstMIO, ['*.css']) MasterView::AutoCopy.register(JavascriptSrcMIO, JavascriptDstMIO) expected_array_copied = ImageFiles+CSSFiles+JavascriptFiles assert_equal(expected_array_copied.sort, MasterView::AutoCopy.copy_all_updated_files.sort) sleep(1) # make sure time (seconds) change before updating so timestamp will be different MasterView::AutoCopy.clear_registrations MasterView::AutoCopy.register(ImageSrcMIO, ImageDstMIO) ImageFiles.each { |f| ImageSrcMIO.path(f).write('updated') } CSSFiles.each { |f| CSSSrcMIO.path(f).write('updated') } JavascriptFiles.each { |f| JavascriptSrcMIO.path(f).write('updated') } expected_array_copied = ImageFiles # only the image files this time after clear and reset assert_equal(expected_array_copied.sort, MasterView::AutoCopy.copy_all_updated_files.sort) end end