require 'spec_helper' describe Sprockets::Plugin do after :each do Sprockets::Plugin.send :class_variable_set, :@@plugins, nil end describe '#append_plugin_paths' do it 'adds paths from plugins to environments' do dir_1 = @sandbox.directory 'plugin_1/assets' dir_2 = @sandbox.directory 'plugin_2/assets' dir_3 = @sandbox.directory 'plugin_3/assets' plugin_1 = Class.new Sprockets::Plugin plugin_1.append_path dir_1 plugin_2 = Class.new Sprockets::Plugin plugin_2.append_path dir_2 plugin_3 = Class.new Sprockets::Plugin plugin_3.append_path dir_3 env = Sprockets::Environment.new env.append_plugin_paths env.paths.should == [dir_1, dir_2, dir_3].map(&:to_s) end it 'does not add duplicate paths' do dir_1 = @sandbox.directory 'plugin_1/assets' dir_2 = @sandbox.directory 'plugin_2/assets' dir_3 = @sandbox.directory 'plugin_3/assets' plugin_1 = Class.new Sprockets::Plugin plugin_1.append_path dir_1 env = Sprockets::Environment.new env.append_plugin_paths env.paths.should == [dir_1].map(&:to_s) plugin_2 = Class.new Sprockets::Plugin plugin_2.append_path dir_2 plugin_3 = Class.new Sprockets::Plugin plugin_3.append_path dir_3 env.append_plugin_paths env.paths.should == [dir_1, dir_2, dir_3].map(&:to_s) end end describe '.append_path' do it 'adds paths' do dir_1 = @sandbox.directory 'plugin/assets/images' dir_2 = @sandbox.directory 'plugin/assets/javascripts' dir_3 = @sandbox.directory 'plugin/assets/stylesheets' plugin = Class.new Sprockets::Plugin plugin.append_path dir_1 plugin.append_path dir_2 plugin.append_path dir_3 plugin.paths.should == [dir_1, dir_2, dir_3].map(&:to_s) end it 'adds the paths relative to the plugin root' do dir_1 = @sandbox.directory 'plugin/assets/images' dir_2 = @sandbox.directory 'plugin/assets/javascripts' dir_3 = @sandbox.directory 'plugin/assets/stylesheets' plugin = Class.new Sprockets::Plugin plugin.root @sandbox.join 'plugin' plugin.append_path 'assets/images' plugin.append_path 'assets/javascripts' plugin.append_path 'assets/stylesheets' plugin.paths.should == [dir_1, dir_2, dir_3].map(&:to_s) end it 'only adds existing paths' do dir_1 = @sandbox.directory 'plugin/assets/images' dir_2 = @sandbox.directory 'plugin/assets/javascripts' dir_3 = @sandbox.join 'plugin/assets/stylesheets' plugin = Class.new Sprockets::Plugin plugin.append_path dir_1 plugin.append_path dir_2 plugin.append_path dir_3 plugin.paths.should == [dir_1, dir_2].map(&:to_s) end end describe '.appends_paths' do it 'adds multiple paths at once' do dir_1 = @sandbox.directory 'plugin/assets/images' dir_2 = @sandbox.directory 'plugin/assets/javascripts' dir_3 = @sandbox.directory 'plugin/assets/stylesheets' plugin = Class.new Sprockets::Plugin plugin.append_path dir_1, dir_2 ,dir_3 plugin.paths.should == [dir_1, dir_2, dir_3].map(&:to_s) end end describe '.append_paths_in' do it 'adds paths within the given path' do assets_dir = @sandbox.directory 'plugin/assets' dir_1 = assets_dir.directory 'images' dir_2 = assets_dir.directory 'javascripts' dir_3 = assets_dir.directory 'stylesheets' plugin = Class.new Sprockets::Plugin plugin.append_paths_in assets_dir plugin.paths.should == [dir_1, dir_2, dir_3].map(&:to_s) end end describe '.root' do it 'converts the given path to a Pathname object' do plugin_path = @sandbox.join 'plugin' plugin = Class.new Sprockets::Plugin plugin.root plugin_path.to_s plugin.root.should be_an_instance_of(Pathname) plugin.root.should == plugin_path end end describe '.plugins' do it 'returns all of the plugins' do plugin_1 = Class.new Sprockets::Plugin plugin_2 = Class.new Sprockets::Plugin plugin_3 = Class.new Sprockets::Plugin Sprockets::Plugin.plugins.should == [ plugin_1, plugin_2, plugin_3 ] end end end