montage 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +31 -0
- data/History.md +40 -0
- data/LICENSE +19 -0
- data/README.md +89 -0
- data/Rakefile +41 -0
- data/VERSION +1 -0
- data/bin/montage +22 -0
- data/lib/montage.rb +33 -0
- data/lib/montage/commands.rb +32 -0
- data/lib/montage/commands/generate.rb +234 -0
- data/lib/montage/commands/init.rb +119 -0
- data/lib/montage/core_ext.rb +80 -0
- data/lib/montage/project.rb +185 -0
- data/lib/montage/sass_builder.rb +37 -0
- data/lib/montage/source.rb +75 -0
- data/lib/montage/sprite.rb +132 -0
- data/lib/montage/templates/montage.yml +26 -0
- data/lib/montage/templates/sass_mixins.erb +20 -0
- data/lib/montage/templates/sources/book.png +0 -0
- data/lib/montage/templates/sources/box-label.png +0 -0
- data/lib/montage/templates/sources/calculator.png +0 -0
- data/lib/montage/templates/sources/calendar-month.png +0 -0
- data/lib/montage/templates/sources/camera.png +0 -0
- data/lib/montage/templates/sources/eraser.png +0 -0
- data/lib/montage/version.rb +3 -0
- data/montage.gemspec +145 -0
- data/spec/fixtures/custom_dirs/montage.yml +8 -0
- data/spec/fixtures/default/montage.yml +7 -0
- data/spec/fixtures/default/public/images/sprites/src/one.png +0 -0
- data/spec/fixtures/default/public/images/sprites/src/three.png +0 -0
- data/spec/fixtures/default/public/images/sprites/src/two.png +0 -0
- data/spec/fixtures/directory_config/config/montage.yml +5 -0
- data/spec/fixtures/missing_source/montage.yml +3 -0
- data/spec/fixtures/missing_source_dir/montage.yml +5 -0
- data/spec/fixtures/root_config/montage.yml +5 -0
- data/spec/fixtures/root_config/public/images/sprites/src/source_one.png +0 -0
- data/spec/fixtures/root_config/public/images/sprites/src/source_three.jpg +0 -0
- data/spec/fixtures/root_config/public/images/sprites/src/source_two +0 -0
- data/spec/fixtures/sources/hundred.png +0 -0
- data/spec/fixtures/sources/mammoth.png +0 -0
- data/spec/fixtures/sources/other.png +0 -0
- data/spec/fixtures/sources/twenty.png +0 -0
- data/spec/fixtures/subdirs/montage.yml +5 -0
- data/spec/fixtures/subdirs/sub/sub/keep +0 -0
- data/spec/lib/command_runner.rb +140 -0
- data/spec/lib/fixtures.rb +7 -0
- data/spec/lib/have_public_method_defined.rb +19 -0
- data/spec/lib/project_helper.rb +135 -0
- data/spec/lib/shared_project_specs.rb +32 -0
- data/spec/lib/shared_sprite_specs.rb +30 -0
- data/spec/montage/commands/generate_spec.rb +308 -0
- data/spec/montage/commands/init_spec.rb +120 -0
- data/spec/montage/core_ext_spec.rb +33 -0
- data/spec/montage/project_spec.rb +181 -0
- data/spec/montage/sass_builder_spec.rb +269 -0
- data/spec/montage/source_spec.rb +53 -0
- data/spec/montage/spec/have_public_method_defined_spec.rb +31 -0
- data/spec/montage/sprite_spec.rb +170 -0
- data/spec/rcov.opts +8 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +19 -0
- data/tasks/spec.rake +17 -0
- data/tasks/yard.rake +11 -0
- metadata +249 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
::Spec::Matchers.define :have_public_method_defined do |value|
|
2
|
+
match do |klass|
|
3
|
+
klass.public_method_defined?(value.to_sym)
|
4
|
+
end
|
5
|
+
|
6
|
+
description do
|
7
|
+
"should define public instance method ##{value.to_s}"
|
8
|
+
end
|
9
|
+
|
10
|
+
failure_message_for_should do |klass|
|
11
|
+
"expected #{klass.inspect} to define public instance method " \
|
12
|
+
"#{value.inspect}, but it didn't"
|
13
|
+
end
|
14
|
+
|
15
|
+
failure_message_for_should_not do |klass|
|
16
|
+
"expected #{klass.inspect} to not define public instance method " \
|
17
|
+
"#{value.inspect}, but it did"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module Montage
|
5
|
+
module Spec
|
6
|
+
# Provides useful functionality for dealing with temporary project
|
7
|
+
# directories when running tests.
|
8
|
+
#
|
9
|
+
# Any helper classes which use ProjectHelper will always run in a single
|
10
|
+
# temporary directory (which is removed and recreated each time) and thus
|
11
|
+
# doesn't need to be cleaned up afterwards.
|
12
|
+
#
|
13
|
+
class ProjectHelper
|
14
|
+
|
15
|
+
# --- Class methods ----------------------------------------------------
|
16
|
+
|
17
|
+
def self.project_dir
|
18
|
+
@project_dir ||= Pathname.new(Dir.mktmpdir)
|
19
|
+
end
|
20
|
+
|
21
|
+
def project_dir
|
22
|
+
self.class.project_dir
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.cleanup!
|
26
|
+
FileUtils.remove_entry_secure(project_dir) if project_dir.directory?
|
27
|
+
end
|
28
|
+
|
29
|
+
# ----------------------------------------------------------------------
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
# Wipe out the temporary directory to ensure
|
33
|
+
# we have a clean state before each run.
|
34
|
+
self.class.cleanup!
|
35
|
+
project_dir.mkpath
|
36
|
+
|
37
|
+
self.sources_path = "public/images/sprites/src"
|
38
|
+
self.sprites_path = "public/images/sprites"
|
39
|
+
end
|
40
|
+
|
41
|
+
def sources_path=(path)
|
42
|
+
@sources_path = Pathname.new(path)
|
43
|
+
end
|
44
|
+
|
45
|
+
def sprites_path=(path)
|
46
|
+
@sprites_path = Pathname.new(path)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns a project instance representing the contents of the test
|
50
|
+
# directory.
|
51
|
+
#
|
52
|
+
# @return [Montage::Project]
|
53
|
+
#
|
54
|
+
def project
|
55
|
+
Project.find(project_dir)
|
56
|
+
end
|
57
|
+
|
58
|
+
# --- Paths ------------------------------------------------------------
|
59
|
+
|
60
|
+
# Returns the path to a file.
|
61
|
+
#
|
62
|
+
# @param [String] name
|
63
|
+
# The name of the source file.
|
64
|
+
#
|
65
|
+
def path_to_file(name)
|
66
|
+
(project_dir + name).expand_path
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns the path to a source file (sans extension).
|
70
|
+
#
|
71
|
+
# @param [String] name
|
72
|
+
# The name of the source file.
|
73
|
+
#
|
74
|
+
def path_to_source(name)
|
75
|
+
path_to_file @sources_path + "#{name}.png"
|
76
|
+
end
|
77
|
+
|
78
|
+
# Returns the path to a sprite file (sans extension).
|
79
|
+
#
|
80
|
+
# @param [String] name
|
81
|
+
# The name of the sprite file.
|
82
|
+
#
|
83
|
+
def path_to_sprite(name)
|
84
|
+
path_to_file @sprites_path + "#{name}.png"
|
85
|
+
end
|
86
|
+
|
87
|
+
# --- File Writers -----------------------------------------------------
|
88
|
+
|
89
|
+
# Writes montage.yml file in the project root with the given contents.
|
90
|
+
#
|
91
|
+
# @param [String] contents
|
92
|
+
# The contents to be saved as the config file.
|
93
|
+
#
|
94
|
+
def write_config(contents)
|
95
|
+
File.open(project_dir + 'montage.yml', 'w') do |file|
|
96
|
+
file.puts contents.unindent
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Writes a source image file to the src directory.
|
101
|
+
#
|
102
|
+
# @param [String] name
|
103
|
+
# The name of the source image file, sans extension.
|
104
|
+
# @param [Integer] width
|
105
|
+
# The width of the source file in pixels.
|
106
|
+
# @param [Integer] height
|
107
|
+
# The height of the source file in pixels.
|
108
|
+
#
|
109
|
+
def write_source(name, width = 50, height = 20)
|
110
|
+
source_path = path_to_source(name)
|
111
|
+
|
112
|
+
# Create the sources directory.
|
113
|
+
source_path.dirname.mkpath
|
114
|
+
|
115
|
+
Magick::Image.new(width, height) do
|
116
|
+
self.background_color = '#CCC'
|
117
|
+
end.write(source_path)
|
118
|
+
|
119
|
+
unless source_path.file?
|
120
|
+
raise "Source #{name} was not successfully saved"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Creates a directory in the project.
|
125
|
+
#
|
126
|
+
# @param [String] dir
|
127
|
+
# Path to the directory, relative to the project root.
|
128
|
+
#
|
129
|
+
def mkdir(path)
|
130
|
+
(project_dir + path).mkpath
|
131
|
+
end
|
132
|
+
|
133
|
+
end # ProjectHelper
|
134
|
+
end # Spec
|
135
|
+
end # Montage
|
@@ -0,0 +1,32 @@
|
|
1
|
+
describe 'a project with correct paths', :shared => true do
|
2
|
+
# Requires:
|
3
|
+
#
|
4
|
+
# @project => Montage::Project
|
5
|
+
# @root => Pathname (path to project root)
|
6
|
+
# @config => Pathname (path to config file)
|
7
|
+
#
|
8
|
+
|
9
|
+
it 'should set the project root path' do
|
10
|
+
@project.paths.root.should == @root
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should set the configuration file path' do
|
14
|
+
@project.paths.config.should == @config
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should set the sources path' do
|
18
|
+
@project.paths.sources.should == @root + 'public/images/sprites/src'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should set the sprite path' do
|
22
|
+
@project.paths.sprites.should == @root + 'public/images/sprites'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should set the SASS output path' do
|
26
|
+
@project.paths.sass.should == @root + 'public/stylesheets/sass'
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should set the CSS sprite URL' do
|
30
|
+
@project.paths.url.should == '/images/sprites'
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
describe 'saving a sprite', :shared => true do
|
2
|
+
# Requires:
|
3
|
+
#
|
4
|
+
# @sprite => Montage::Sprite
|
5
|
+
# @dir => Pathname (path at which the sprite is saved)
|
6
|
+
# @output => Pathname (path for the final sprite)
|
7
|
+
#
|
8
|
+
it 'should save the sprite to the specified directory' do
|
9
|
+
lambda { @sprite.write }.should \
|
10
|
+
change(&lambda { @output.file? })
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should save an 8-bit PNG with transparency' do
|
14
|
+
@sprite.write
|
15
|
+
image = Magick::Image.ping(@output).first
|
16
|
+
image.format.should == 'PNG'
|
17
|
+
image.quantum_depth.should == 8 # 8-bits per channel.
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should overwrite an existingn file' do
|
21
|
+
FileUtils.touch(@output)
|
22
|
+
orig_size = @output.size
|
23
|
+
@sprite.write
|
24
|
+
|
25
|
+
# Using touch should create an empty file. Saving the PNG
|
26
|
+
# should result in a larger file.
|
27
|
+
@output.should be_file
|
28
|
+
@output.size.should > orig_size
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,308 @@
|
|
1
|
+
require File.expand_path('../../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
# ----------------------------------------------------------------------------
|
4
|
+
|
5
|
+
context 'Generating a single sprite with two sources' do
|
6
|
+
before(:all) do
|
7
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
8
|
+
@runner.write_config <<-CONFIG
|
9
|
+
---
|
10
|
+
sprite_one:
|
11
|
+
- one
|
12
|
+
- two
|
13
|
+
CONFIG
|
14
|
+
@runner.write_source('one')
|
15
|
+
@runner.write_source('two')
|
16
|
+
@runner.run!
|
17
|
+
end
|
18
|
+
|
19
|
+
it { @runner.should be_success }
|
20
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
21
|
+
it { @runner.path_to_sprite('sprite_one').should be_file }
|
22
|
+
it { @runner.dimensions_of('sprite_one').should == [50, 60] }
|
23
|
+
|
24
|
+
# Sass.
|
25
|
+
it { @runner.path_to_file('public/stylesheets/sass/_montage.sass').should be_file }
|
26
|
+
|
27
|
+
# PNGOut.
|
28
|
+
it { @runner.stdout.should =~ /Optimising "sprite_one": Done/ }
|
29
|
+
end
|
30
|
+
|
31
|
+
# ----------------------------------------------------------------------------
|
32
|
+
|
33
|
+
context 'Generating multiple sprites' do
|
34
|
+
before(:all) do
|
35
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
36
|
+
@runner.write_config <<-CONFIG
|
37
|
+
---
|
38
|
+
sprite_one:
|
39
|
+
- one
|
40
|
+
|
41
|
+
sprite_two:
|
42
|
+
- two
|
43
|
+
- three
|
44
|
+
CONFIG
|
45
|
+
@runner.write_source('one')
|
46
|
+
@runner.write_source('two')
|
47
|
+
@runner.write_source('three', 200, 200)
|
48
|
+
@runner.run!
|
49
|
+
end
|
50
|
+
|
51
|
+
it { @runner.should be_success }
|
52
|
+
|
53
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
54
|
+
it { @runner.path_to_sprite('sprite_one').should be_file }
|
55
|
+
it { @runner.dimensions_of('sprite_one').should == [50, 20] }
|
56
|
+
|
57
|
+
it { @runner.stdout.should =~ /Generating "sprite_two": Done/ }
|
58
|
+
it { @runner.path_to_sprite('sprite_two').should be_file }
|
59
|
+
it { @runner.dimensions_of('sprite_two').should == [200, 240] }
|
60
|
+
|
61
|
+
# PNGOut.
|
62
|
+
it { @runner.stdout.should =~ /Optimising "sprite_one": Done/ }
|
63
|
+
it { @runner.stdout.should =~ /Optimising "sprite_two": Done/ }
|
64
|
+
end
|
65
|
+
|
66
|
+
# ----------------------------------------------------------------------------
|
67
|
+
|
68
|
+
context 'Generating a single sprite with custom padding' do
|
69
|
+
before(:all) do
|
70
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
71
|
+
@runner.write_config <<-CONFIG
|
72
|
+
---
|
73
|
+
config.padding: 50
|
74
|
+
|
75
|
+
sprite_one:
|
76
|
+
- one
|
77
|
+
- two
|
78
|
+
CONFIG
|
79
|
+
@runner.write_source('one')
|
80
|
+
@runner.write_source('two')
|
81
|
+
@runner.run!
|
82
|
+
end
|
83
|
+
|
84
|
+
it { @runner.should be_success }
|
85
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
86
|
+
it { @runner.path_to_sprite('sprite_one').should be_file }
|
87
|
+
it { @runner.dimensions_of('sprite_one').should == [50, 90] }
|
88
|
+
end
|
89
|
+
|
90
|
+
# ----------------------------------------------------------------------------
|
91
|
+
|
92
|
+
context 'Generating a single sprite using custom directories' do
|
93
|
+
before(:all) do
|
94
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
95
|
+
@runner.sources_path = 'img/sources'
|
96
|
+
@runner.sprites_path = 'img/sprites'
|
97
|
+
|
98
|
+
@runner.write_config <<-CONFIG
|
99
|
+
---
|
100
|
+
config.sources: img/sources
|
101
|
+
config.sprites: img/sprites
|
102
|
+
|
103
|
+
sprite_one:
|
104
|
+
- one
|
105
|
+
- two
|
106
|
+
CONFIG
|
107
|
+
|
108
|
+
@runner.write_source('one')
|
109
|
+
@runner.write_source('two')
|
110
|
+
@runner.run!
|
111
|
+
end
|
112
|
+
|
113
|
+
it { @runner.should be_success }
|
114
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
115
|
+
it { @runner.path_to_sprite('sprite_one').should be_file }
|
116
|
+
end
|
117
|
+
|
118
|
+
# ----------------------------------------------------------------------------
|
119
|
+
|
120
|
+
context 'Trying to generate sprites in a non-project directory' do
|
121
|
+
before(:all) do
|
122
|
+
@runner = Montage::Spec::CommandRunner.new('montage').run!
|
123
|
+
end
|
124
|
+
|
125
|
+
it { @runner.should be_failure }
|
126
|
+
it { @runner.stdout.should =~ /Couldn't find a Montage project/ }
|
127
|
+
end
|
128
|
+
|
129
|
+
# ----------------------------------------------------------------------------
|
130
|
+
|
131
|
+
context 'Trying to generate sprites when a source is missing' do
|
132
|
+
before(:all) do
|
133
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
134
|
+
@runner.write_config <<-CONFIG
|
135
|
+
---
|
136
|
+
sprite_one:
|
137
|
+
- one
|
138
|
+
CONFIG
|
139
|
+
@runner.mkdir('public/images/sprites/src')
|
140
|
+
@runner.run!
|
141
|
+
end
|
142
|
+
|
143
|
+
it { @runner.should be_failure }
|
144
|
+
it { @runner.stdout.should =~ /Couldn't find a matching file for source image `one'/ }
|
145
|
+
end
|
146
|
+
|
147
|
+
# ----------------------------------------------------------------------------
|
148
|
+
|
149
|
+
context 'Trying to generate sprites when the source directory does not exist' do
|
150
|
+
before(:all) do
|
151
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
152
|
+
@runner.write_config <<-CONFIG
|
153
|
+
---
|
154
|
+
sprite_one:
|
155
|
+
- one
|
156
|
+
CONFIG
|
157
|
+
@runner.run!
|
158
|
+
end
|
159
|
+
|
160
|
+
it { @runner.should be_failure }
|
161
|
+
it { @runner.stdout.should =~ /Couldn't find the source directory/ }
|
162
|
+
end
|
163
|
+
|
164
|
+
# ----------------------------------------------------------------------------
|
165
|
+
|
166
|
+
context 'Trying to generate sprites when the sprite directory is not writable' do
|
167
|
+
before(:all) do
|
168
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
169
|
+
@runner.write_config <<-CONFIG
|
170
|
+
---
|
171
|
+
sprite_one:
|
172
|
+
- one
|
173
|
+
CONFIG
|
174
|
+
@runner.write_source('one')
|
175
|
+
|
176
|
+
old_mode = @runner.project.paths.sprites.stat.mode
|
177
|
+
@runner.project.paths.sprites.chmod(040555)
|
178
|
+
|
179
|
+
begin
|
180
|
+
@runner.run!
|
181
|
+
ensure
|
182
|
+
@runner.project.paths.sprites.chmod(old_mode)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
it { @runner.should be_failure }
|
187
|
+
it { @runner.stdout.should =~ /can't save the sprite in .* isn't writable/m }
|
188
|
+
end
|
189
|
+
|
190
|
+
# ----------------------------------------------------------------------------
|
191
|
+
|
192
|
+
context 'Generating two sprites, one of which is unchanged' do
|
193
|
+
before(:all) do
|
194
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
195
|
+
@runner.write_config <<-CONFIG
|
196
|
+
---
|
197
|
+
sprite_one:
|
198
|
+
- one
|
199
|
+
- two
|
200
|
+
|
201
|
+
sprite_two:
|
202
|
+
- three
|
203
|
+
CONFIG
|
204
|
+
@runner.write_source('one')
|
205
|
+
@runner.write_source('two')
|
206
|
+
@runner.write_source('three')
|
207
|
+
@runner.run!
|
208
|
+
|
209
|
+
# Change the 'one' source.
|
210
|
+
@runner.write_source('one', 100, 25)
|
211
|
+
@runner.run!
|
212
|
+
end
|
213
|
+
|
214
|
+
it { @runner.should be_success }
|
215
|
+
|
216
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
217
|
+
it { @runner.path_to_sprite('sprite_one').should be_file }
|
218
|
+
it { @runner.dimensions_of('sprite_one').should == [100, 65] }
|
219
|
+
|
220
|
+
it { @runner.stdout.should =~ /Generating "sprite_two": Unchanged; ignoring/ }
|
221
|
+
it { @runner.path_to_sprite('sprite_two').should be_file }
|
222
|
+
it { @runner.dimensions_of('sprite_two').should == [50, 20] }
|
223
|
+
|
224
|
+
# PNGOut.
|
225
|
+
it { @runner.stdout.should =~ /Optimising "sprite_one": Done/ }
|
226
|
+
it { @runner.stdout.should_not =~ /Optimising "sprite_two": Done/ }
|
227
|
+
end
|
228
|
+
|
229
|
+
# ----------------------------------------------------------------------------
|
230
|
+
|
231
|
+
context 'Generating two sprites, one of which is unchanged when using the --force option' do
|
232
|
+
before(:all) do
|
233
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
234
|
+
@runner.write_config <<-CONFIG
|
235
|
+
---
|
236
|
+
sprite_one:
|
237
|
+
- one
|
238
|
+
- two
|
239
|
+
|
240
|
+
sprite_two:
|
241
|
+
- three
|
242
|
+
CONFIG
|
243
|
+
@runner.write_source('one')
|
244
|
+
@runner.write_source('two')
|
245
|
+
@runner.write_source('three')
|
246
|
+
@runner.run!
|
247
|
+
|
248
|
+
# Change the 'one' source.
|
249
|
+
@runner.write_source('one', 100, 25)
|
250
|
+
@runner.run('montage --force')
|
251
|
+
end
|
252
|
+
|
253
|
+
it { @runner.should be_success }
|
254
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
255
|
+
it { @runner.stdout.should =~ /Generating "sprite_two": Done/ }
|
256
|
+
|
257
|
+
# PNGOut.
|
258
|
+
it { @runner.stdout.should =~ /Optimising "sprite_one": Done/ }
|
259
|
+
it { @runner.stdout.should =~ /Optimising "sprite_two": Done/ }
|
260
|
+
end
|
261
|
+
|
262
|
+
# ----------------------------------------------------------------------------
|
263
|
+
|
264
|
+
context 'Generating an unchanged sprite which has been deleted' do
|
265
|
+
before(:all) do
|
266
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
267
|
+
@runner.write_config <<-CONFIG
|
268
|
+
---
|
269
|
+
sprite_one:
|
270
|
+
- one
|
271
|
+
|
272
|
+
CONFIG
|
273
|
+
@runner.write_source('one')
|
274
|
+
@runner.run!
|
275
|
+
|
276
|
+
# Remove the generated sprite.
|
277
|
+
@runner.path_to_sprite('sprite_one').unlink
|
278
|
+
@runner.run!
|
279
|
+
end
|
280
|
+
|
281
|
+
it { @runner.should be_success }
|
282
|
+
|
283
|
+
it { @runner.stdout.should =~ /Generating "sprite_one": Done/ }
|
284
|
+
it { @runner.path_to_sprite('sprite_one').should be_file }
|
285
|
+
|
286
|
+
# PNGOut.
|
287
|
+
it { @runner.stdout.should =~ /Optimising "sprite_one": Done/ }
|
288
|
+
end
|
289
|
+
|
290
|
+
# ----------------------------------------------------------------------------
|
291
|
+
|
292
|
+
context 'Generating sprites with a project which disables Sass' do
|
293
|
+
before(:all) do
|
294
|
+
@runner = Montage::Spec::CommandRunner.new('montage')
|
295
|
+
@runner.write_config <<-CONFIG
|
296
|
+
---
|
297
|
+
config.sass: false
|
298
|
+
|
299
|
+
sprite_one:
|
300
|
+
- one
|
301
|
+
|
302
|
+
CONFIG
|
303
|
+
@runner.write_source('one')
|
304
|
+
@runner.run!
|
305
|
+
end
|
306
|
+
|
307
|
+
it { @runner.path_to_file('public/stylesheets/sass/_montage.sass').should_not be_file }
|
308
|
+
end
|