spec/fontcustom/util_spec.rb in fontcustom-1.0.1 vs spec/fontcustom/util_spec.rb in fontcustom-1.1.0.pre
- old
+ new
@@ -11,103 +11,349 @@
expect { util.check_fontforge }.to raise_error Fontcustom::Error, /install fontforge/
end
end
context ".collect_options" do
- it "should return defaults when called without arguments" do
- options = util.collect_options
- defaults = Fontcustom::DEFAULT_OPTIONS.dup
-
- # ignore :templates and :output since they're generated
- options.delete(:templates)
- defaults.delete(:templates)
- options.delete(:output)
- defaults.delete(:output)
-
- options.should == defaults
+ it "should raise error if fontcustom.yml isn't valid" do
+ options = {
+ :project_root => fixture,
+ :input => "shared/vectors",
+ :config => "util/fontcustom-malformed.yml"
+ }
+ expect { util.collect_options(options) }.to raise_error Fontcustom::Error, /couldn't read your configuration/
end
it "should overwrite defaults with config file" do
- options = util.collect_options :config => fixture("fontcustom.yml")
- options[:font_name].should == "custom-name-from-config"
+ options = {
+ :project_root => fixture,
+ :input => "shared/vectors",
+ :config => "util/fontcustom.yml"
+ }
+ options = util.collect_options options
+ options[:font_name].should == "Custom-Name-From-Config"
end
it "should overwrite config file and defaults with CLI options" do
- options = util.collect_options :config => fixture("fontcustom.yml"), :font_name => "custom-name-from-cli"
+ options = {
+ :project_root => fixture,
+ :input => "shared/vectors",
+ :font_name => "custom-name-from-cli",
+ :config => "util/fontcustom.yml"
+ }
+ options = util.collect_options options
options[:font_name].should == "custom-name-from-cli"
end
it "should normalize file name" do
- options = util.collect_options :font_name => " A_stR4nG3 nAm3 "
- options[:font_name].should == "a_str4ng3-nam3"
+ options = {
+ :project_root => fixture,
+ :input => "shared/vectors",
+ :font_name => " A_stR4nG3 nAm3 Ø& "
+ }
+ options = util.collect_options options
+ options[:font_name].should == "A_stR4nG3--nAm3---"
end
end
context ".get_config_path" do
it "should search for fontcustom.yml if options[:config] is a dir" do
- options = { :config => fixture("") }
- util.get_config_path(options).should == fixture("fontcustom.yml")
+ options = {
+ :project_root => fixture,
+ :config => "util/config-is-in-dir"
+ }
+ util.get_config_path(options).should == fixture("util/config-is-in-dir/fontcustom.yml")
end
- it "should search use options[:config] if it's a file" do
- options = { :config => fixture("fontcustom.yml") }
- util.get_config_path(options).should == fixture("fontcustom.yml")
+ it "should use options[:config] if it's a file" do
+ options = {
+ :project_root => fixture,
+ :config => "util/fontcustom.yml"
+ }
+ util.get_config_path(options).should == fixture("util/fontcustom.yml")
end
- it "should search in input dir if no options[:config] is given" do
- options = { :input => fixture("") }
- util.get_config_path(options).should == fixture("fontcustom.yml")
+ it "should find fontcustom.yml in :project_root/config" do
+ options = { :project_root => fixture("util/rails-like") }
+ util.get_config_path(options).should == fixture("util/rails-like/config/fontcustom.yml")
end
- it "should return false if neither exist" do
- options = { :input => fixture("vectors") }
- util.get_config_path(options).should be_false
+ it "should follow ../../ paths" do
+ options = {
+ :project_root => fixture("shared"),
+ :input => "vectors",
+ :config => "../util"
+ }
+ util.get_config_path(options).should == fixture("util/fontcustom.yml")
end
+
+ it "should print out which fontcustom.yml it's using"
+
+ it "should raise error if fontcustom.yml was specified but doesn't exist" do
+ options = {
+ :project_root => fixture,
+ :input => "shared/vectors",
+ :config => "does-not-exist"
+ }
+ expect { util.get_config_path(options) }.to raise_error Fontcustom::Error, /couldn't find/
+ end
+
+ it "should print a warning if fontcustom.yml was NOT specified and doesn't exist"
end
- context ".get_template_paths" do
+ context ".get_input_paths" do
+ it "should raise error if input[:vectors] doesn't contain vectors" do
+ options = {
+ :project_root => fixture,
+ :input => "shared/vectors-empty"
+ }
+ expect { util.get_input_paths(options) }.to raise_error Fontcustom::Error, /doesn't contain any vectors/
+ end
+
+ it "should follow ../../ paths" do
+ options = {
+ :project_root => fixture("util"),
+ :input => {:vectors => "../shared/vectors", :templates => "../shared/templates"}
+ }
+ paths = util.get_input_paths(options)
+ paths[:vectors].should eq(fixture("shared/vectors"))
+ paths[:templates].should eq(fixture("shared/templates"))
+ end
+
+ context "when passed a hash" do
+ it "should return a hash of input locations" do
+ options = {
+ :input => { :vectors => "shared/vectors" },
+ :project_root => fixture
+ }
+ paths = util.get_input_paths(options)
+ paths.should have_key("vectors")
+ paths.should have_key("templates")
+ end
+
+ it "should set :templates as :vectors if :templates isn't passed" do
+ options = {
+ :input => { :vectors => "shared/vectors" },
+ :project_root => fixture
+ }
+ paths = util.get_input_paths(options)
+ paths[:vectors].should equal(paths[:templates])
+ end
+
+ it "should preserve :templates if it is passed" do
+ options = {
+ :input => { :vectors => "shared/vectors", :templates => "shared/templates" },
+ :project_root => fixture
+ }
+ paths = util.get_input_paths(options)
+ paths[:templates].should_not equal(paths[:vectors])
+ end
+
+ it "should raise an error if :vectors isn't included" do
+ options = {
+ :input => { :templates => "shared/templates" },
+ :project_root => fixture
+ }
+ expect { util.get_input_paths(options) }.to raise_error Fontcustom::Error, /should be a string or a hash/
+ end
+
+ it "should raise an error if :vectors doesn't point to an existing directory" do
+ options = {
+ :input => { :vectors => "shared/not-a-dir" },
+ :project_root => fixture
+ }
+ expect { util.get_input_paths(options) }.to raise_error Fontcustom::Error, /should be a directory/
+ end
+ end
+
+ context "when passed a string" do
+ it "should return a hash of input locations" do
+ options = {
+ :input => "shared/vectors",
+ :project_root => fixture
+ }
+ paths = util.get_input_paths(options)
+ paths.should have_key("vectors")
+ paths.should have_key("templates")
+ end
+
+ it "should set :templates to match :vectors" do
+ options = {
+ :input => "shared/vectors",
+ :project_root => fixture
+ }
+ paths = util.get_input_paths(options)
+ paths[:vectors].should equal(paths[:templates])
+ end
+
+ it "should raise an error if :vectors doesn't point to a directory" do
+ options = {
+ :input => "shared/not-a-dir",
+ :project_root => fixture
+ }
+ expect { util.collect_options options }.to raise_error Fontcustom::Error, /should be a directory/
+ end
+ end
+ end
+
+ context ".get_output_paths" do
+ it "should default to :project_root/:font_name if no output is specified" do
+ options = { :project_root => fixture, :font_name => "test" }
+ paths = util.get_output_paths(options)
+ paths[:fonts].should eq(fixture("test"))
+ end
+
+ it "should print a warning when defaulting to :project_root/:font_name"
+
+ it "should follow ../../ paths" do
+ options = {
+ :project_root => fixture("shared"),
+ :input => "vectors",
+ :output => {
+ :fonts => "../output/fonts",
+ :css => "../output/css",
+ :preview => "../output/views"
+ }
+ }
+ paths = util.get_output_paths(options)
+ paths[:fonts].should eq(fixture("output/fonts"))
+ paths[:css].should eq(fixture("output/css"))
+ paths[:preview].should eq(fixture("output/views"))
+ end
+
+ context "when passed a hash" do
+ it "should return a hash of output locations" do
+ options = {
+ :output => { :fonts => "output/fonts" },
+ :project_root => fixture
+ }
+ paths = util.get_output_paths(options)
+ paths.should have_key("fonts")
+ paths.should have_key("css")
+ paths.should have_key("preview")
+ end
+
+ it "should set :css and :preview to match :fonts if either aren't passed" do
+ options = {
+ :output => { :fonts => "output/fonts" },
+ :project_root => fixture
+ }
+ paths = util.get_output_paths(options)
+ paths[:css].should equal(paths[:fonts])
+ paths[:preview].should equal(paths[:fonts])
+ end
+
+ it "should preserve :css and :preview if they do exist" do
+ options = {
+ :output => {
+ :fonts => "output/fonts",
+ :css => "output/styles",
+ :preview => "output/preview"
+ },
+ :project_root => fixture
+ }
+ paths = util.get_output_paths(options)
+ paths[:css].should_not equal(paths[:fonts])
+ paths[:preview].should_not equal(paths[:fonts])
+ end
+
+ it "should create additional paths if they are given" do
+ options = {
+ :output => {
+ :fonts => "output/fonts",
+ "special.js" => "assets/javascripts"
+ },
+ :project_root => fixture
+ }
+ paths = util.get_output_paths(options)
+ paths["special.js"].should eq(File.join(options[:project_root], "assets/javascripts"))
+ end
+
+ it "should raise an error if :fonts isn't included" do
+ options = {
+ :output => { :css => "output/styles" },
+ :project_root => fixture
+ }
+ expect { util.get_output_paths(options) }.to raise_error Fontcustom::Error, /containing a "fonts" key/
+ end
+ end
+
+ context "when passed a string" do
+ it "should return a hash of output locations" do
+ options = {
+ :output => "output/fonts",
+ :project_root => fixture
+ }
+ paths = util.get_output_paths(options)
+ paths.should have_key("fonts")
+ paths.should have_key("css")
+ paths.should have_key("preview")
+ end
+
+ it "should set :css and :preview to match :fonts" do
+ options = {
+ :output => "output/fonts",
+ :project_root => fixture
+ }
+ paths = util.get_output_paths(options)
+ paths[:css].should equal(paths[:fonts])
+ paths[:preview].should equal(paths[:fonts])
+ end
+
+ it "should raise an error if :fonts exists but isn't a directory" do
+ options = {
+ :output => "shared/not-a-dir",
+ :project_root => fixture
+ }
+ expect { util.get_output_paths(options) }.to raise_error Fontcustom::Error, /directory, not a file/
+ end
+ end
+ end
+
+ context ".get_templates" do
it "should ensure that 'css' is included with 'preview'" do
lib = util.gem_lib_path
- options = { :input => fixture("vectors"), :templates => %W|preview| }
- templates = util.get_template_paths options
+ options = { :input => fixture("shared/vectors"), :templates => %W|preview| }
+ templates = util.get_templates options
templates.should =~ [
- File.join(lib, "templates", "fontcustom.css"),
+ File.join(lib, "templates", "fontcustom.css"),
File.join(lib, "templates", "fontcustom-preview.html")
]
end
it "should expand shorthand for packaged templates" do
lib = util.gem_lib_path
- options = { :input => fixture("vectors"), :templates => %W|preview css scss bootstrap bootstrap-scss bootstrap-ie7 bootstrap-ie7-scss| }
- templates = util.get_template_paths options
+ options = { :input => fixture("shared/vectors"), :templates => %W|preview css scss bootstrap bootstrap-scss bootstrap-ie7 bootstrap-ie7-scss| }
+ templates = util.get_templates options
templates.should =~ [
File.join(lib, "templates", "fontcustom-preview.html"),
- File.join(lib, "templates", "fontcustom.css"),
+ File.join(lib, "templates", "fontcustom.css"),
File.join(lib, "templates", "_fontcustom.scss"),
- File.join(lib, "templates", "fontcustom-bootstrap.css"),
- File.join(lib, "templates", "_fontcustom-bootstrap.scss"),
- File.join(lib, "templates", "fontcustom-bootstrap-ie7.css"),
- File.join(lib, "templates", "_fontcustom-bootstrap-ie7.scss")
+ File.join(lib, "templates", "fontcustom-bootstrap.css"),
+ File.join(lib, "templates", "_fontcustom-bootstrap.scss"),
+ File.join(lib, "templates", "fontcustom-bootstrap-ie7.css"),
+ File.join(lib, "templates", "_fontcustom-bootstrap-ie7.scss")
]
end
- it "should search in Dir.pwd first" do
- Dir.chdir fixture("")
- options = { :templates => %W|not-a-dir| }
- templates = util.get_template_paths options
- templates.should =~ ["not-a-dir"]
+ it "should find custom templates in :template_path" do
+ options = {
+ :project_root => fixture,
+ :input => {
+ :vectors => fixture("shared/vectors"),
+ :templates => fixture("shared/templates")
+ },
+ :templates => %W|custom.css|
+ }
+ templates = util.get_templates options
+ templates.should eq([ fixture("shared/templates/custom.css") ])
end
- it "should search in options[:input] second" do
- options = { :input => fixture("empty"), :templates => %W|no_vectors_here.txt| }
- templates = util.get_template_paths options
- templates.should =~ [fixture("empty/no_vectors_here.txt")]
- end
-
it "should raise an error if a template does not exist" do
- options = { :input => fixture("vectors"), :templates => %W|css #{fixture("fake-template")}| }
- expect { util.get_template_paths options }.to raise_error(
- Fontcustom::Error, /couldn't find.+#{fixture("fake-template")}/
- )
+ options = {
+ :project_root => fixture,
+ :input => { :templates => "shared/templates" },
+ :templates => %W|css fake-template|
+ }
+ expect { util.get_templates options }.to raise_error Fontcustom::Error, /couldn't find.+fake-template/
end
end
end