clash 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/clash +46 -24
- data/lib/clash.rb +6 -5
- data/lib/clash/helpers.rb +48 -6
- data/lib/clash/scaffold.rb +33 -0
- data/lib/clash/test.rb +19 -15
- data/lib/clash/tests.rb +30 -6
- data/lib/clash/version.rb +1 -1
- data/scaffold/_clash.yml +5 -0
- data/scaffold/site/_config.yml +4 -0
- data/scaffold/site/_expected/index.html +1 -0
- data/scaffold/site/index.html +4 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39d92dbce4ec886753820de001ead65ecc70c7ab
|
4
|
+
data.tar.gz: 5bf66afe83d476c95eb86698958e6433253b612c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7997bbf948e49ec53adf60f533f123f53aca55e337fcfa6025f653901ea7a62c99694a0a629b541d1642a3a3facd706e999a54662b40fc6d25ac390e4ea1186e
|
7
|
+
data.tar.gz: bc012514d2a41d416ee165f6eaea817ad0b624d8a89ff4eac74587b534f40ba62aa909b2c529e082568f6090af04969edf61c40951269a3046aca14c96a0d698
|
data/bin/clash
CHANGED
@@ -11,16 +11,22 @@ banner = <<-BANNER
|
|
11
11
|
clash #{Clash::VERSION} -- Clash is a diff based testing suite for static sites.
|
12
12
|
|
13
13
|
Usage:
|
14
|
-
|
14
|
+
# Run tests
|
15
15
|
clash [path] [tests] [options]
|
16
16
|
|
17
17
|
To run only specific tests, pass test numbers separated by commas.
|
18
18
|
|
19
|
-
$ clash
|
20
|
-
$ clash 1
|
21
|
-
$ clash 2,3
|
22
|
-
$ clash 2-4
|
23
|
-
$ clash
|
19
|
+
$ clash # Run all tests
|
20
|
+
$ clash 1 # Run only the first test
|
21
|
+
$ clash 2,3 # Run the second and third tests
|
22
|
+
$ clash 2-4 # Run the second, third, and fourth tests
|
23
|
+
$ clash :10 # Run the test on line 10
|
24
|
+
$ clash :10-:35 # Run all tests from line 10 to 35
|
25
|
+
$ clash test # Run all tests in the 'test' directory, reading test/_clash.yml.
|
26
|
+
$ clash test 1 # Run the first test in the 'test' directory.
|
27
|
+
|
28
|
+
# Add testing scaffold
|
29
|
+
clash init [path] [options]
|
24
30
|
|
25
31
|
Options:
|
26
32
|
|
@@ -40,20 +46,32 @@ CONFIG
|
|
40
46
|
OptionParser.new do |opts|
|
41
47
|
opts.banner = banner
|
42
48
|
|
43
|
-
|
44
|
-
options[:
|
45
|
-
end
|
49
|
+
if ARGV.first == 'init'
|
50
|
+
options[:init] = ARGV.shift
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
|
52
|
+
opts.on("-f", "--force", "Overwrite existing content") do |f|
|
53
|
+
options[:force] = f
|
54
|
+
end
|
55
|
+
else
|
56
|
+
opts.on("-b", "--build", "Build mode: Runs only 'before' and 'build' actions.") do |b|
|
57
|
+
options[:build_only] = b
|
58
|
+
end
|
50
59
|
|
51
|
-
|
52
|
-
|
53
|
-
|
60
|
+
opts.on("-f FILE", "--file FILE", "Use a specific test file (default: [PATH]/.clash.yml)") do |f|
|
61
|
+
options[:file] = f
|
62
|
+
end
|
63
|
+
|
64
|
+
opts.on("-c", "--context NUMBER", Integer, "On diff errors, show NUMBER of lines of surrounding context (default: 2)") do |context|
|
65
|
+
options[:context] = context
|
66
|
+
end
|
54
67
|
|
55
|
-
|
56
|
-
|
68
|
+
opts.on("-l", "--list", "Print a list of tests' numbers and titles") do |l|
|
69
|
+
options[:list] = l
|
70
|
+
end
|
71
|
+
|
72
|
+
opts.on("-d", "--debug", "Display output from system commands") do |d|
|
73
|
+
options[:debug] = d
|
74
|
+
end
|
57
75
|
end
|
58
76
|
|
59
77
|
opts.on("-h", "--help", "Show this message") do |h|
|
@@ -64,15 +82,19 @@ OptionParser.new do |opts|
|
|
64
82
|
|
65
83
|
end.parse!
|
66
84
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
85
|
+
if options[:init]
|
86
|
+
Clash::Scaffold.new(ARGV, options)
|
87
|
+
elsif !options[:help]
|
88
|
+
|
89
|
+
unless ARGV.empty?
|
90
|
+
# Parse input `clash 1 2 3` and `clash 1,2,3` and `clash 1-3` the same
|
91
|
+
#
|
92
|
+
options[:path] = ARGV.shift if ARGV.first =~ /^[^\d:].+/
|
93
|
+
options[:only] = ARGV
|
94
|
+
end
|
73
95
|
|
74
|
-
unless options[:help]
|
75
96
|
tests = Clash::Tests.new(options)
|
97
|
+
|
76
98
|
if options[:list]
|
77
99
|
tests.list
|
78
100
|
else
|
data/lib/clash.rb
CHANGED
@@ -5,17 +5,18 @@ require 'safe_yaml'
|
|
5
5
|
require 'diffy'
|
6
6
|
|
7
7
|
module Clash
|
8
|
-
autoload :Tests,
|
9
|
-
autoload :Test,
|
10
|
-
autoload :Diff,
|
11
|
-
autoload :Helpers,
|
8
|
+
autoload :Tests, 'clash/tests'
|
9
|
+
autoload :Test, 'clash/test'
|
10
|
+
autoload :Diff, 'clash/diff'
|
11
|
+
autoload :Helpers, 'clash/helpers'
|
12
|
+
autoload :Scaffold, 'clash/scaffold'
|
12
13
|
end
|
13
14
|
|
14
15
|
if defined? Octopress::Docs
|
15
16
|
Octopress::Docs.add({
|
16
17
|
name: "Clash",
|
17
18
|
gem: "clash",
|
18
|
-
description: "
|
19
|
+
description: "Clash is an integration test framework designed for Jekyll developers",
|
19
20
|
path: File.expand_path(File.join(File.dirname(__FILE__), "../")),
|
20
21
|
source_url: "https://github.com/imathis/clash",
|
21
22
|
version: Clash::VERSION
|
data/lib/clash/helpers.rb
CHANGED
@@ -7,20 +7,62 @@ module Clash
|
|
7
7
|
if only.is_a?(Array)
|
8
8
|
only = only.join(',')
|
9
9
|
end
|
10
|
-
only.split(',').map do |
|
11
|
-
if
|
12
|
-
expand_range(
|
10
|
+
only.split(',').map do |num|
|
11
|
+
if num.include?("-")
|
12
|
+
expand_range(num)
|
13
13
|
else
|
14
|
-
|
14
|
+
get_number(num)
|
15
15
|
end
|
16
16
|
end.flatten.sort.uniq
|
17
17
|
end
|
18
18
|
|
19
19
|
def expand_range(string_range)
|
20
|
-
lower, upper = string_range.split("-").map(
|
20
|
+
lower, upper = string_range.split("-").map{|n| get_number(n)}.take(2).sort
|
21
21
|
Array.new(upper+1 - lower).fill { |i| i + lower }
|
22
22
|
end
|
23
23
|
|
24
|
+
def get_number(num)
|
25
|
+
if num.start_with?(':')
|
26
|
+
test_at_line_number(num)
|
27
|
+
else
|
28
|
+
num.to_i
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def read_test_line_numbers(path)
|
33
|
+
@test_lines ||= []
|
34
|
+
count = 1
|
35
|
+
strip_tasks(File.read(path)).each_line do |line|
|
36
|
+
@test_lines << count if line =~ /^-/
|
37
|
+
count += 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def strip_tasks(content)
|
42
|
+
content.gsub(/-\s+tasks:.+?^-/im) do |match|
|
43
|
+
match.gsub(/.+?\n/,"\n")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_at_line_number(line_number)
|
48
|
+
ln = line_number.sub(':', '').to_i
|
49
|
+
test_number = nil
|
50
|
+
lines = @test_lines
|
51
|
+
lines.each_with_index do |line, index|
|
52
|
+
last = index == lines.size - 1
|
53
|
+
|
54
|
+
if line <= ln && ( last || ln <= lines[index + 1] )
|
55
|
+
test_number = index + 1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
if test_number
|
60
|
+
test_number
|
61
|
+
else
|
62
|
+
puts "No test found on line #{ln}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
24
66
|
def default_array(option)
|
25
67
|
o = option || []
|
26
68
|
o = [o] unless o.is_a?(Array)
|
@@ -40,7 +82,7 @@ module Clash
|
|
40
82
|
# Don't ouput to /dev/null if in debug mode
|
41
83
|
# or if a command supplies its own ouput
|
42
84
|
if !ENV['DEBUG'] && !(cmd =~ / > /)
|
43
|
-
cmd
|
85
|
+
cmd << " > /dev/null"
|
44
86
|
end
|
45
87
|
|
46
88
|
Kernel.system cmd
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Clash
|
2
|
+
class Scaffold
|
3
|
+
attr_accessor :options
|
4
|
+
|
5
|
+
def initialize(args, options = {})
|
6
|
+
raise 'You must specify a path.' if args.empty?
|
7
|
+
|
8
|
+
test_path = File.expand_path(args.join(" "), Dir.pwd)
|
9
|
+
FileUtils.mkdir_p test_path
|
10
|
+
if preserve_source_location?(test_path, options)
|
11
|
+
abort "Conflict: #{test_path} exists and is not empty."
|
12
|
+
end
|
13
|
+
|
14
|
+
add_test_scaffold test_path
|
15
|
+
|
16
|
+
puts "Clash test added to #{test_path}."
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_test_scaffold(path)
|
20
|
+
FileUtils.cp_r test_template + '/.', path
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_template
|
24
|
+
File.expand_path("../../scaffold", File.dirname(__FILE__))
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def preserve_source_location?(path, options)
|
30
|
+
!options[:force] && !Dir["#{path}/**/*"].empty?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/clash/test.rb
CHANGED
@@ -8,27 +8,30 @@ module Clash
|
|
8
8
|
@test_failures = []
|
9
9
|
@options = options
|
10
10
|
@options['config'] ||= {}
|
11
|
+
@options['dir'] ||= '.'
|
11
12
|
@cleanup = []
|
12
13
|
end
|
13
14
|
|
14
15
|
def run
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
Dir.chdir(@options['dir']) do
|
17
|
+
system_cmd(@options['before'])
|
18
|
+
config
|
19
|
+
build if @options['build']
|
20
|
+
unless @options['build_only']
|
21
|
+
compare
|
22
|
+
enforce_missing
|
23
|
+
system_cmd(@options['after'])
|
24
|
+
end
|
25
|
+
cleanup_config
|
26
|
+
end
|
22
27
|
print_result
|
23
28
|
results
|
24
29
|
end
|
25
30
|
|
26
31
|
def config
|
27
32
|
@options['config'].each do |name, file|
|
28
|
-
|
29
|
-
|
30
|
-
when 'octopress' then config_octopress(file)
|
31
|
-
else config_plugin(name, file)
|
33
|
+
if name != 'jekyll'
|
34
|
+
config_plugin(name, file)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
@@ -70,12 +73,13 @@ module Clash
|
|
70
73
|
end
|
71
74
|
|
72
75
|
def build
|
76
|
+
options = "--trace"
|
77
|
+
|
73
78
|
if jekyll_config = @options['config']['jekyll']
|
74
|
-
|
75
|
-
system("jekyll build --trace --config #{configs}")
|
76
|
-
else
|
77
|
-
system("jekyll build --trace")
|
79
|
+
options << " --config #{default_array(jekyll_config).join(',')}"
|
78
80
|
end
|
81
|
+
|
82
|
+
system "jekyll build #{options}"
|
79
83
|
end
|
80
84
|
|
81
85
|
def system_cmd(cmds)
|
data/lib/clash/tests.rb
CHANGED
@@ -21,14 +21,15 @@ module Clash
|
|
21
21
|
@options[:only] ||= []
|
22
22
|
@options[:exit] ||= true
|
23
23
|
@options[:path] ||= '.'
|
24
|
-
@options[:file] ||= '.
|
24
|
+
@options[:file] ||= '_clash.yml'
|
25
25
|
|
26
|
+
@clashfile = read_config
|
26
27
|
@tests = read_tests
|
27
28
|
end
|
28
29
|
|
29
30
|
def list
|
30
31
|
@tests.each_with_index do |options, index|
|
31
|
-
# If tests are limited, only
|
32
|
+
# If tests are limited, only show specified tests
|
32
33
|
#
|
33
34
|
next if options.nil?
|
34
35
|
list_test(options, index)
|
@@ -42,7 +43,6 @@ module Clash
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def run
|
45
|
-
|
46
46
|
Dir.chdir(@options[:path]) do
|
47
47
|
@tests.each_with_index do |options, index|
|
48
48
|
# If tests are limited, only run specified tests
|
@@ -60,6 +60,7 @@ module Clash
|
|
60
60
|
options['index'] = index + 1
|
61
61
|
options['context'] = @options[:context]
|
62
62
|
options['tasks'] = @tasks
|
63
|
+
options['build_only'] = @options[:build_only]
|
63
64
|
|
64
65
|
results = Test.new(options).run
|
65
66
|
|
@@ -72,12 +73,11 @@ module Clash
|
|
72
73
|
end
|
73
74
|
|
74
75
|
def read_tests
|
75
|
-
return [] unless File.file?(@options[:file])
|
76
|
-
tests = SafeYAML.load_file(@options[:file])
|
77
76
|
index = 0
|
78
77
|
delete_tests = []
|
78
|
+
@options[:only] = expand_list_of_numbers(@options[:only])
|
79
79
|
|
80
|
-
tests = default_array(
|
80
|
+
tests = default_array(@clashfile).map do |test|
|
81
81
|
if !test['tasks'].nil?
|
82
82
|
@tasks.merge! test['tasks']
|
83
83
|
delete_tests << test
|
@@ -100,6 +100,30 @@ module Clash
|
|
100
100
|
|
101
101
|
end
|
102
102
|
|
103
|
+
def read_config
|
104
|
+
# Find the config file (fall back to legacy filename)
|
105
|
+
if path = config_path || config_path('.clash.yml')
|
106
|
+
read_test_line_numbers(path)
|
107
|
+
SafeYAML.load_file(path)
|
108
|
+
else
|
109
|
+
# If config file still not found, complain
|
110
|
+
raise "Config file #{@options[:file]} not found."
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def config_path(file=nil)
|
115
|
+
file ||= @options[:file]
|
116
|
+
path = File.join('./', @options[:path])
|
117
|
+
paths = []
|
118
|
+
|
119
|
+
(path.count('/') + 1).times do
|
120
|
+
paths << File.join(path, file)
|
121
|
+
path.sub!(/\/[^\/]+$/, '')
|
122
|
+
end
|
123
|
+
|
124
|
+
paths.find {|p| File.file?(p) }
|
125
|
+
end
|
126
|
+
|
103
127
|
def print_results
|
104
128
|
|
105
129
|
|
data/lib/clash/version.rb
CHANGED
data/scaffold/_clash.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Test content
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Mathis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diffy
|
@@ -120,9 +120,14 @@ files:
|
|
120
120
|
- lib/clash.rb
|
121
121
|
- lib/clash/diff.rb
|
122
122
|
- lib/clash/helpers.rb
|
123
|
+
- lib/clash/scaffold.rb
|
123
124
|
- lib/clash/test.rb
|
124
125
|
- lib/clash/tests.rb
|
125
126
|
- lib/clash/version.rb
|
127
|
+
- scaffold/_clash.yml
|
128
|
+
- scaffold/site/_config.yml
|
129
|
+
- scaffold/site/_expected/index.html
|
130
|
+
- scaffold/site/index.html
|
126
131
|
homepage: https://github.com/imathis/clash
|
127
132
|
licenses:
|
128
133
|
- MIT
|