require_relative 'spec_helper' describe AutoprefixerRails do before :all do @dir = Pathname(__FILE__).dirname @css = @dir.join('app/app/assets/stylesheets/test.css').read end it "process CSS" do expect(AutoprefixerRails.process(@css)).to be_a(AutoprefixerRails::Result) end it "process CSS for selected browsers" do css = "a {\n tab-size: 2\n}" result = AutoprefixerRails.process(css, browsers: ['opera 12']) expect(result.css).to eq "a {\n" + " -o-tab-size: 2;\n" + " tab-size: 2\n" + "}" end it "process @supports" do css = "@supports (display: flex) { }" result = AutoprefixerRails.process(css, browsers: ['chrome 28']) expect(result.css).to eq( '@supports ((display: -webkit-flex) or (display: flex)) { }') end it "generates source map" do result = AutoprefixerRails.process(@css, map: true) expect(result.css).to include('/*# sourceMappingURL=data:') end it "generates separated source map" do result = AutoprefixerRails.process(@css, map: { inline: false }) expect(result.map).to be_a(String) end it "uses file name in syntax errors", not_jruby: true do expect { AutoprefixerRails.process('a {', from: 'a.css') }.to raise_error(/a.css:/) end it "includes sourcesContent by default" do map = AutoprefixerRails.process('a{}', map: { inline: false }).map expect(map).to include('sourcesContent') end it "maps options from Ruby style" do map = AutoprefixerRails.process('a{}', map: { sources_content: false, inline: false }).map expect(map).not_to include('sourcesContent') end it "does not remove old prefixes on request" do css = 'a { -moz-border-radius: 5px; border-radius: 5px }' result = AutoprefixerRails.process(css, remove: false) expect(result.css).to eq(css) end it "shows debug" do info = AutoprefixerRails.processor(browsers: ['chrome 25']).info expect(info).to match(/Browsers:\n Chrome: 25\n\n/) expect(info).to match(/ transition: webkit/) end it "returns warnings" do css = 'a{background:linear-gradient(top,white,black)}' result = AutoprefixerRails.process(css) expect(result.warnings).to eq([':1:3: Gradient has outdated ' + 'direction syntax. New syntax is like `to left` instead of `right`.']) end it "shows correct error on country statistics" do expect { AutoprefixerRails.process('', browsers: '> 1% in US') }.to raise_error(/Use Autoprefixer with webpack/) end context 'Sprockets' do before :each do @assets = Sprockets::Environment.new @assets.append_path(@dir.join('app/app/assets/stylesheets')) AutoprefixerRails.install(@assets, browsers: ['chrome 25']) end it "integrates with Sprockets" do css = @assets['test.css'].to_s expect(css).to eq "a {\n" + " -webkit-mask: none;\n" + " mask: none\n" + "}\n" end it "shows file name from Sprockets", not_jruby: true do expect { @assets['wrong.css'] }.to raise_error(/wrong/) end it "supports disabling", not_jruby: true do AutoprefixerRails.uninstall(@assets) css = @assets['test.css'].to_s expect(css).to eq "a {\n" + " mask: none\n" + "}\n" end end end