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