assert_dirs_equal 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +1 -1
- data/assert_dirs_equal.gemspec +1 -1
- data/lib/assert_dirs_equal/matcher.rb +20 -4
- data/lib/minitest/assert_dirs_equal.rb +34 -0
- data/test/cases/extra_file_in_target/expected/common_file +0 -0
- data/test/cases/extra_file_in_target/target/common_file +0 -0
- data/test/matcher_test.rb +18 -1
- data/test/minitest_integration_test.rb +34 -4
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 002b57d9c03d727d23f6ac8059eb6e1de156be63
|
4
|
+
data.tar.gz: ed8ebb85d512aa507f22f24269f3d2f5cbc90997
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd82b42b05ce266279c30771d5490bfee1d63e7e113a8bfcbbabd913668010701d474c759f1eef100ab39621c634d64fd737972134e8fa3ee3f82c09d15c7709
|
7
|
+
data.tar.gz: 44a8ccd5535dcca0f4a537dc259b5a98a3c6d54350da07f00be9c0512278648a06605c8bef278e45aae3813806764b03b9ad109aabb4d78e7024c64a86d61282
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
data/assert_dirs_equal.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "assert_dirs_equal"
|
3
|
-
spec.version = "0.
|
3
|
+
spec.version = "0.2.0"
|
4
4
|
spec.authors = ["Andrii Malyshko"]
|
5
5
|
spec.email = ["mail@nashbridges.me"]
|
6
6
|
spec.description = "Test assertion for directories equality by tree and content comparison"
|
@@ -14,12 +14,21 @@ module AssertDirsEqual
|
|
14
14
|
# @return [String]
|
15
15
|
attr_reader :failure_message
|
16
16
|
|
17
|
-
|
17
|
+
# @param [String] expected path to a directory which contains expected structure and content.
|
18
|
+
# @param [Hash] options
|
19
|
+
# @option options [Boolean] exact_match (true) specifies whether `expected` should mirror `target`,
|
20
|
+
# or just be a subset of it.
|
21
|
+
def initialize(expected, options = {})
|
18
22
|
@expected = expected
|
23
|
+
@exact_match = options.fetch(:exact_match, true)
|
19
24
|
end
|
20
25
|
|
21
|
-
# @
|
22
|
-
# @return [
|
26
|
+
# @param [String] target path to a directory which contains result of executing a method under test.
|
27
|
+
# @return [true] when `exact_match` is true and `target` mirrors `expected` directory.
|
28
|
+
# @return [true] when `exact_match` is false and `target` contains all files from `expected` directory.
|
29
|
+
# Extra files in `target` does not affect the result.
|
30
|
+
# @return [false] if `target` lacks some files, or has extra files (when `exact_match` is true), or any
|
31
|
+
# file in subdirectory differs from according file content.
|
23
32
|
def matches?(target)
|
24
33
|
@target = target
|
25
34
|
assert_exists(@expected) && assert_exists(@target) &&
|
@@ -28,9 +37,14 @@ module AssertDirsEqual
|
|
28
37
|
refute_extra_files_in_target
|
29
38
|
end
|
30
39
|
|
40
|
+
# @!attribute [r]
|
31
41
|
# @return [String]
|
32
42
|
def failure_message_when_negated
|
33
|
-
|
43
|
+
if @exact_match
|
44
|
+
"expected #{@target.inspect} to not be equal to #{@expected.inspect}, but they are equal"
|
45
|
+
else
|
46
|
+
"expected files from #{@target.inspect} to not be present in #{@expected.inspect}, but they are"
|
47
|
+
end
|
34
48
|
end
|
35
49
|
|
36
50
|
private
|
@@ -69,6 +83,8 @@ module AssertDirsEqual
|
|
69
83
|
end
|
70
84
|
|
71
85
|
def refute_extra_files_in_target
|
86
|
+
return true unless @exact_match
|
87
|
+
|
72
88
|
expected_files = both_paths_in(@expected, @target).map { |pair| pair[1] }
|
73
89
|
actual_expected_files = Dir.glob(File.join(@target, "**/*"))
|
74
90
|
diff = actual_expected_files - expected_files
|
@@ -12,13 +12,47 @@ module AssertDirsEqual
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class Minitest::Test
|
15
|
+
# Fails if `target` lacks some files, or has extra files, or any file in the directory differs
|
16
|
+
# from according content in `expected`.
|
17
|
+
#
|
18
|
+
# @param [String] expected path to a directory which contains expected structure and content.
|
19
|
+
# @param [String] target path to a directory which contains result of executing a method under test.
|
20
|
+
# @raise [Minitest::Assertion]
|
21
|
+
# @since 0.1.0
|
15
22
|
def assert_dirs_equal(expected, target)
|
16
23
|
matcher = AssertDirsEqual::Matcher.new(expected)
|
17
24
|
assert matcher.matches?(target), matcher.failure_message
|
18
25
|
end
|
19
26
|
|
27
|
+
# Fails if `target` has exactly the same file tree structure and content.
|
28
|
+
#
|
29
|
+
# @param (see #assert_dirs_equal)
|
30
|
+
# @raise [Minitest::Assertion]
|
31
|
+
# @since 0.1.0
|
20
32
|
def refute_dirs_equal(expected, target)
|
21
33
|
matcher = AssertDirsEqual::Matcher.new(expected)
|
22
34
|
refute matcher.matches?(target), matcher.failure_message_when_negated
|
23
35
|
end
|
36
|
+
|
37
|
+
# Fails if `target` lacks some files, or any file in the directory differs from according content
|
38
|
+
# in `expected`. Should be read as 'Content from `expected` is expected to be "included" in `target`'.
|
39
|
+
# @note Extra files in `target` are ignored.
|
40
|
+
#
|
41
|
+
# @param (see #assert_dirs_equal)
|
42
|
+
# @raise [Minitest::Assertion]
|
43
|
+
# @since 0.2.0
|
44
|
+
def assert_dir_included(expected, target)
|
45
|
+
matcher = AssertDirsEqual::Matcher.new(expected, exact_match: false)
|
46
|
+
assert matcher.matches?(target), matcher.failure_message
|
47
|
+
end
|
48
|
+
|
49
|
+
# Fails if `target` includes the same files from `expected`.
|
50
|
+
# @note Extra files in `target` are ignored.
|
51
|
+
#
|
52
|
+
# @param (see #assert_dirs_equal)
|
53
|
+
# @since 0.2.0
|
54
|
+
def refute_dir_included(expected, target)
|
55
|
+
matcher = AssertDirsEqual::Matcher.new(expected, exact_match: false)
|
56
|
+
refute matcher.matches?(target), matcher.failure_message_when_negated
|
57
|
+
end
|
24
58
|
end
|
File without changes
|
File without changes
|
data/test/matcher_test.rb
CHANGED
@@ -2,7 +2,7 @@ require "test_helper"
|
|
2
2
|
require "assert_dirs_equal/matcher"
|
3
3
|
|
4
4
|
module AssertDirsEqual
|
5
|
-
class
|
5
|
+
class MatcherEqTest < Minitest::Test
|
6
6
|
def matcher
|
7
7
|
@matcher ||= Matcher.new(expected_dir)
|
8
8
|
end
|
@@ -100,4 +100,21 @@ MSG
|
|
100
100
|
assert_equal "expected \"#{target_dir}\" to not be equal to \"#{expected_dir}\", but they are equal", matcher.failure_message_when_negated
|
101
101
|
end
|
102
102
|
end
|
103
|
+
|
104
|
+
class MatcherIncludesTest < MatcherEqTest
|
105
|
+
def matcher
|
106
|
+
@matcher ||= Matcher.new(expected_dir, exact_match: false)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_extra_file_in_target
|
110
|
+
@case_directory = "test/cases/extra_file_in_target"
|
111
|
+
assert matcher.matches?(target_dir), matcher.failure_message
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_failure_message_negated
|
115
|
+
@case_directory = "test/cases/empty_dirs_are_equal"
|
116
|
+
matcher.matches?(target_dir)
|
117
|
+
assert_equal "expected files from \"#{target_dir}\" to not be present in \"#{expected_dir}\", but they are", matcher.failure_message_when_negated
|
118
|
+
end
|
119
|
+
end
|
103
120
|
end
|
@@ -3,12 +3,12 @@ require "minitest/assert_dirs_equal"
|
|
3
3
|
|
4
4
|
module AssertDirsEqual
|
5
5
|
class MinitestIntegrationTest < Minitest::Test
|
6
|
-
def
|
6
|
+
def test_successful_assert_dirs_equal
|
7
7
|
@case_directory = "test/cases/empty_files_are_equal"
|
8
8
|
assert_dirs_equal expected_dir, target_dir
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def test_failed_assert_dirs_equal
|
12
12
|
@case_directory = "test/cases/missing_expected"
|
13
13
|
|
14
14
|
error = assert_raises(Minitest::Assertion) do
|
@@ -18,12 +18,12 @@ module AssertDirsEqual
|
|
18
18
|
assert_equal "expected \"#{expected_dir}\" to exist", error.message
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
21
|
+
def test_successful_refute_dirs_equal
|
22
22
|
@case_directory = "test/cases/missing_expected"
|
23
23
|
refute_dirs_equal expected_dir, target_dir
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def test_failed_refute_dirs_equal
|
27
27
|
@case_directory = "test/cases/empty_files_are_equal"
|
28
28
|
|
29
29
|
error = assert_raises(Minitest::Assertion) do
|
@@ -33,6 +33,36 @@ module AssertDirsEqual
|
|
33
33
|
assert_equal "expected \"#{target_dir}\" to not be equal to \"#{expected_dir}\", but they are equal", error.message
|
34
34
|
end
|
35
35
|
|
36
|
+
def test_successful_assert_dir_included
|
37
|
+
@case_directory = "test/cases/extra_file_in_target"
|
38
|
+
assert_dir_included expected_dir, target_dir
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_failed_assert_dir_included
|
42
|
+
@case_directory = "test/cases/missing_expected"
|
43
|
+
|
44
|
+
error = assert_raises(Minitest::Assertion) do
|
45
|
+
assert_dir_included expected_dir, target_dir
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_equal "expected \"#{expected_dir}\" to exist", error.message
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_successful_refute_dir_included
|
52
|
+
@case_directory = "test/cases/missing_expected"
|
53
|
+
refute_dir_included expected_dir, target_dir
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_failed_refute_dir_included
|
57
|
+
@case_directory = "test/cases/empty_files_are_equal"
|
58
|
+
|
59
|
+
error = assert_raises(Minitest::Assertion) do
|
60
|
+
refute_dir_included expected_dir, target_dir
|
61
|
+
end
|
62
|
+
|
63
|
+
assert_equal "expected files from \"#{target_dir}\" to not be present in \"#{expected_dir}\", but they are", error.message
|
64
|
+
end
|
65
|
+
|
36
66
|
def test_minitest_powered_diff
|
37
67
|
@case_directory = "test/cases/large_different_text_files"
|
38
68
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert_dirs_equal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrii Malyshko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,7 +82,9 @@ files:
|
|
82
82
|
- test/cases/expected_is_not_a_dir/expected
|
83
83
|
- test/cases/expected_is_not_a_dir/target/.keep
|
84
84
|
- test/cases/extra_file_in_target/expected/.keep
|
85
|
+
- test/cases/extra_file_in_target/expected/common_file
|
85
86
|
- test/cases/extra_file_in_target/target/.keep
|
87
|
+
- test/cases/extra_file_in_target/target/common_file
|
86
88
|
- test/cases/extra_file_in_target/target/file
|
87
89
|
- test/cases/large_different_text_files/expected/file
|
88
90
|
- test/cases/large_different_text_files/target/file
|
@@ -139,7 +141,9 @@ test_files:
|
|
139
141
|
- test/cases/expected_is_not_a_dir/expected
|
140
142
|
- test/cases/expected_is_not_a_dir/target/.keep
|
141
143
|
- test/cases/extra_file_in_target/expected/.keep
|
144
|
+
- test/cases/extra_file_in_target/expected/common_file
|
142
145
|
- test/cases/extra_file_in_target/target/.keep
|
146
|
+
- test/cases/extra_file_in_target/target/common_file
|
143
147
|
- test/cases/extra_file_in_target/target/file
|
144
148
|
- test/cases/large_different_text_files/expected/file
|
145
149
|
- test/cases/large_different_text_files/target/file
|