1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
# frozen_string_literal: true
require_relative "test_helper"
module SassC
class CustomImporterTest < Minitest::Test
include TempFileTest
class CustomImporter < Importer
def imports(path, parent_path)
if path =~ /styles/
[
Import.new("#{path}1.scss", source: "$var1: #000;"),
Import.new("#{path}2.scss")
]
else
Import.new(path)
end
end
end
class NoFilesImporter < Importer
def imports(path, parent_path)
[]
end
end
class OptionsImporter < Importer
def imports(path, parent_path)
Import.new("name.scss", source: options[:custom_option_source])
end
end
class ParentImporter < Importer
def imports(path, parent_path)
Import.new("name.scss", source: ".#{parent_path} { color: red; }")
end
end
def test_custom_importer_works
temp_file("styles2.scss", ".hi { color: $var1; }")
temp_file("fonts.scss", ".font { color: $var1; }")
data = <<SCSS
@import "styles";
@import "fonts";
SCSS
engine = Engine.new(data, {
importer: CustomImporter
})
assert_equal <<CSS, engine.render
.hi {
color: #000; }
.font {
color: #000; }
CSS
end
def test_dependency_list
base = temp_dir("").to_s
temp_dir("fonts")
temp_dir("fonts/sub")
temp_file("fonts/sub/sub_fonts.scss", "$font: arial;")
temp_file("styles2.scss", ".hi { color: $var1; }")
temp_file "fonts/fonts.scss", <<SCSS
@import "sub/sub_fonts";
.font { font-familiy: $font; color: $var1; }
SCSS
data = <<SCSS
@import "styles";
@import "fonts";
SCSS
engine = Engine.new(data, {
importer: CustomImporter,
load_paths: ["fonts"]
})
engine.render
dependencies = engine.dependencies.map(&:filename).map { |f| f.gsub(base, "") }
assert_equal [
"/fonts/sub/sub_fonts.scss",
"/styles2.scss",
"fonts/fonts.scss",
"styles1.scss"
], dependencies
end
def test_custom_importer_works_with_no_files
engine = Engine.new("@import 'fake.scss';", {
importer: NoFilesImporter
})
assert_equal "", engine.render
end
def test_custom_importer_can_access_sassc_options
engine = Engine.new("@import 'fake.scss';", {
importer: OptionsImporter,
custom_option_source: ".test { width: 30px; }"
})
assert_equal <<CSS, engine.render
.test {
width: 30px; }
CSS
end
def test_parent_path_is_accessible
engine = Engine.new("@import 'parent.scss';", {
importer: ParentImporter,
filename: "import-parent-filename.scss"
})
assert_equal <<CSS, engine.render
.import-parent-filename.scss {
color: red; }
CSS
end
end
end
|