ronin-support 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +28 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -1
- data/ChangeLog.md +28 -0
- data/Gemfile +6 -7
- data/README.md +53 -32
- data/Rakefile +1 -2
- data/gemspec.yml +16 -7
- data/lib/ronin/binary.rb +5 -5
- data/lib/ronin/binary/hexdump.rb +5 -5
- data/lib/ronin/binary/hexdump/parser.rb +5 -5
- data/lib/ronin/binary/struct.rb +5 -5
- data/lib/ronin/binary/template.rb +7 -7
- data/lib/ronin/extensions.rb +5 -5
- data/lib/ronin/extensions/enumerable.rb +5 -5
- data/lib/ronin/extensions/file.rb +37 -31
- data/lib/ronin/extensions/ip_addr.rb +6 -7
- data/lib/ronin/extensions/kernel.rb +5 -5
- data/lib/ronin/extensions/meta.rb +5 -5
- data/lib/ronin/extensions/regexp.rb +5 -5
- data/lib/ronin/extensions/resolv.rb +5 -5
- data/lib/ronin/extensions/string.rb +5 -5
- data/lib/ronin/formatting.rb +5 -5
- data/lib/ronin/formatting/binary.rb +5 -5
- data/lib/ronin/formatting/digest.rb +5 -5
- data/lib/ronin/formatting/extensions.rb +5 -5
- data/lib/ronin/formatting/extensions/binary.rb +5 -5
- data/lib/ronin/formatting/extensions/binary/array.rb +6 -6
- data/lib/ronin/formatting/extensions/binary/base64.rb +5 -5
- data/lib/ronin/formatting/extensions/binary/file.rb +5 -5
- data/lib/ronin/formatting/extensions/binary/float.rb +6 -6
- data/lib/ronin/formatting/extensions/binary/integer.rb +6 -6
- data/lib/ronin/formatting/extensions/binary/string.rb +6 -6
- data/lib/ronin/formatting/extensions/digest.rb +5 -5
- data/lib/ronin/formatting/extensions/digest/file.rb +5 -5
- data/lib/ronin/formatting/extensions/digest/string.rb +5 -5
- data/lib/ronin/formatting/extensions/html.rb +5 -5
- data/lib/ronin/formatting/extensions/html/integer.rb +5 -5
- data/lib/ronin/formatting/extensions/html/string.rb +7 -7
- data/lib/ronin/formatting/extensions/http.rb +5 -5
- data/lib/ronin/formatting/extensions/http/integer.rb +6 -6
- data/lib/ronin/formatting/extensions/http/string.rb +7 -7
- data/lib/ronin/formatting/extensions/sql.rb +5 -5
- data/lib/ronin/formatting/extensions/sql/string.rb +15 -13
- data/lib/ronin/formatting/extensions/text.rb +5 -5
- data/lib/ronin/formatting/extensions/text/array.rb +5 -5
- data/lib/ronin/formatting/extensions/text/string.rb +5 -5
- data/lib/ronin/formatting/html.rb +5 -5
- data/lib/ronin/formatting/http.rb +5 -5
- data/lib/ronin/formatting/sql.rb +5 -5
- data/lib/ronin/formatting/text.rb +5 -5
- data/lib/ronin/fuzzing.rb +5 -5
- data/lib/ronin/fuzzing/extensions.rb +5 -5
- data/lib/ronin/fuzzing/extensions/string.rb +5 -5
- data/lib/ronin/fuzzing/fuzzer.rb +5 -5
- data/lib/ronin/fuzzing/fuzzing.rb +7 -7
- data/lib/ronin/fuzzing/mutator.rb +5 -5
- data/lib/ronin/fuzzing/repeater.rb +5 -5
- data/lib/ronin/fuzzing/template.rb +5 -5
- data/lib/ronin/mixin.rb +2 -2
- data/lib/ronin/network.rb +5 -5
- data/lib/ronin/network/dns.rb +5 -5
- data/lib/ronin/network/esmtp.rb +5 -5
- data/lib/ronin/network/extensions.rb +5 -5
- data/lib/ronin/network/extensions/dns.rb +5 -5
- data/lib/ronin/network/extensions/dns/net.rb +5 -5
- data/lib/ronin/network/extensions/esmtp.rb +5 -5
- data/lib/ronin/network/extensions/esmtp/net.rb +5 -5
- data/lib/ronin/network/extensions/http.rb +5 -5
- data/lib/ronin/network/extensions/http/net.rb +5 -5
- data/lib/ronin/network/extensions/http/uri/http.rb +5 -5
- data/lib/ronin/network/extensions/imap.rb +5 -5
- data/lib/ronin/network/extensions/imap/net.rb +5 -5
- data/lib/ronin/network/extensions/pop3.rb +5 -5
- data/lib/ronin/network/extensions/pop3/net.rb +5 -5
- data/lib/ronin/network/extensions/smtp.rb +5 -5
- data/lib/ronin/network/extensions/smtp/net.rb +5 -5
- data/lib/ronin/network/extensions/ssl.rb +5 -5
- data/lib/ronin/network/extensions/ssl/net.rb +5 -5
- data/lib/ronin/network/extensions/tcp.rb +5 -5
- data/lib/ronin/network/extensions/tcp/net.rb +5 -5
- data/lib/ronin/network/extensions/telnet.rb +5 -5
- data/lib/ronin/network/extensions/telnet/net.rb +5 -5
- data/lib/ronin/network/extensions/udp.rb +5 -5
- data/lib/ronin/network/extensions/udp/net.rb +5 -5
- data/lib/ronin/network/ftp.rb +5 -5
- data/lib/ronin/network/http.rb +5 -5
- data/lib/ronin/network/http/exceptions.rb +5 -5
- data/lib/ronin/network/http/exceptions/unknown_request.rb +5 -5
- data/lib/ronin/network/http/http.rb +52 -57
- data/lib/ronin/network/http/proxy.rb +5 -5
- data/lib/ronin/network/imap.rb +5 -5
- data/lib/ronin/network/mixins.rb +5 -5
- data/lib/ronin/network/mixins/dns.rb +5 -5
- data/lib/ronin/network/mixins/esmtp.rb +5 -5
- data/lib/ronin/network/mixins/ftp.rb +5 -5
- data/lib/ronin/network/mixins/http.rb +7 -7
- data/lib/ronin/network/mixins/imap.rb +5 -5
- data/lib/ronin/network/mixins/mixin.rb +5 -5
- data/lib/ronin/network/mixins/pop3.rb +5 -5
- data/lib/ronin/network/mixins/smtp.rb +5 -5
- data/lib/ronin/network/mixins/ssl.rb +5 -5
- data/lib/ronin/network/mixins/tcp.rb +5 -5
- data/lib/ronin/network/mixins/telnet.rb +5 -5
- data/lib/ronin/network/mixins/udp.rb +5 -5
- data/lib/ronin/network/mixins/unix.rb +5 -5
- data/lib/ronin/network/network.rb +5 -5
- data/lib/ronin/network/pop3.rb +5 -5
- data/lib/ronin/network/proxy.rb +5 -5
- data/lib/ronin/network/smtp.rb +5 -5
- data/lib/ronin/network/smtp/email.rb +6 -6
- data/lib/ronin/network/smtp/smtp.rb +5 -5
- data/lib/ronin/network/ssl.rb +7 -7
- data/lib/ronin/network/tcp.rb +5 -5
- data/lib/ronin/network/tcp/proxy.rb +5 -5
- data/lib/ronin/network/tcp/tcp.rb +32 -23
- data/lib/ronin/network/telnet.rb +7 -5
- data/lib/ronin/network/udp.rb +5 -5
- data/lib/ronin/network/udp/proxy.rb +5 -5
- data/lib/ronin/network/udp/udp.rb +28 -26
- data/lib/ronin/network/unix.rb +7 -7
- data/lib/ronin/path.rb +32 -36
- data/lib/ronin/spec/ui/output.rb +5 -5
- data/lib/ronin/support.rb +5 -5
- data/lib/ronin/support/inflector.rb +5 -5
- data/lib/ronin/support/support.rb +5 -5
- data/lib/ronin/support/version.rb +6 -6
- data/lib/ronin/templates.rb +5 -5
- data/lib/ronin/templates/erb.rb +5 -5
- data/lib/ronin/templates/template.rb +5 -5
- data/lib/ronin/ui/output.rb +5 -5
- data/lib/ronin/ui/output/helpers.rb +5 -5
- data/lib/ronin/ui/output/output.rb +17 -21
- data/lib/ronin/ui/output/terminal.rb +5 -5
- data/lib/ronin/ui/output/terminal/color.rb +5 -5
- data/lib/ronin/ui/output/terminal/raw.rb +5 -5
- data/lib/ronin/ui/shell.rb +5 -5
- data/lib/ronin/wordlist.rb +7 -7
- data/ronin-support.gemspec +1 -0
- data/spec/binary/hexdump/parser_spec.rb +22 -22
- data/spec/binary/struct_spec.rb +56 -56
- data/spec/binary/template_spec.rb +106 -104
- data/spec/extensions/enumerable_spec.rb +4 -4
- data/spec/extensions/file_spec.rb +12 -14
- data/spec/extensions/ip_addr_spec.rb +30 -30
- data/spec/extensions/kernel_spec.rb +7 -7
- data/spec/extensions/regexp_spec.rb +69 -69
- data/spec/extensions/resolv_spec.rb +2 -2
- data/spec/extensions/string_spec.rb +30 -29
- data/spec/formatting/binary/array_spec.rb +2 -2
- data/spec/formatting/binary/base64_spec.rb +8 -8
- data/spec/formatting/binary/float_spec.rb +6 -4
- data/spec/formatting/binary/integer_spec.rb +25 -25
- data/spec/formatting/binary/string_spec.rb +32 -30
- data/spec/formatting/digest/string_spec.rb +5 -5
- data/spec/formatting/html/integer_spec.rb +6 -6
- data/spec/formatting/html/string_spec.rb +10 -10
- data/spec/formatting/http/integer_spec.rb +3 -3
- data/spec/formatting/http/string_spec.rb +5 -5
- data/spec/formatting/sql/string_spec.rb +21 -19
- data/spec/formatting/text/array_spec.rb +15 -15
- data/spec/formatting/text/string_spec.rb +33 -33
- data/spec/fuzzing/extensions/string_spec.rb +11 -11
- data/spec/fuzzing/fuzzer_spec.rb +15 -15
- data/spec/fuzzing/fuzzing_spec.rb +5 -5
- data/spec/fuzzing/mutator_spec.rb +15 -15
- data/spec/fuzzing/repeater_spec.rb +7 -7
- data/spec/fuzzing/template_spec.rb +11 -11
- data/spec/mixin_spec.rb +10 -12
- data/spec/network/dns_spec.rb +34 -32
- data/spec/network/ftp_spec.rb +9 -9
- data/spec/network/http/http_spec.rb +237 -144
- data/spec/network/http/proxy_spec.rb +37 -37
- data/spec/network/network_spec.rb +1 -1
- data/spec/network/proxy_spec.rb +19 -19
- data/spec/network/smtp/email_spec.rb +14 -14
- data/spec/network/ssl_spec.rb +9 -9
- data/spec/network/tcp/proxy_spec.rb +9 -7
- data/spec/network/tcp/tcp_spec.rb +161 -118
- data/spec/network/telnet_spec.rb +5 -5
- data/spec/network/udp/udp_spec.rb +123 -96
- data/spec/network/unix_spec.rb +24 -25
- data/spec/path_spec.rb +43 -18
- data/spec/spec_helper.rb +0 -1
- data/spec/support/inflector_spec.rb +4 -4
- data/spec/support_spec.rb +1 -1
- data/spec/templates/erb_spec.rb +3 -3
- data/spec/templates/template_spec.rb +10 -10
- data/spec/ui/shell_spec.rb +15 -15
- data/spec/wordlist_spec.rb +19 -19
- metadata +408 -366
- data/.gemtest +0 -0
@@ -3,19 +3,19 @@ require 'ronin/fuzzing/extensions/string'
|
|
3
3
|
|
4
4
|
describe String do
|
5
5
|
it "should provide String.generate" do
|
6
|
-
described_class.
|
6
|
+
expect(described_class).to respond_to(:generate)
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should provide String#repeating" do
|
10
|
-
subject.
|
10
|
+
expect(subject).to respond_to(:repeating)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should provide String#fuzz" do
|
14
|
-
subject.
|
14
|
+
expect(subject).to respond_to(:fuzz)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should provide String#mutate" do
|
18
|
-
subject.
|
18
|
+
expect(subject).to respond_to(:mutate)
|
19
19
|
end
|
20
20
|
|
21
21
|
describe "generate" do
|
@@ -24,7 +24,7 @@ describe String do
|
|
24
24
|
it "should generate Strings from a template" do
|
25
25
|
strings = subject.generate([:numeric, 2]).to_a
|
26
26
|
|
27
|
-
strings.grep(/^[0-9]{2}$/).
|
27
|
+
expect(strings.grep(/^[0-9]{2}$/)).to eq(strings)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -35,7 +35,7 @@ describe String do
|
|
35
35
|
let(:n) { 100 }
|
36
36
|
|
37
37
|
it "should multiply the String by n" do
|
38
|
-
subject.repeating(n).
|
38
|
+
expect(subject.repeating(n)).to eq(subject * n)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -45,7 +45,7 @@ describe String do
|
|
45
45
|
it "should repeat the String by each length" do
|
46
46
|
strings = subject.repeating(n).to_a
|
47
47
|
|
48
|
-
strings.
|
48
|
+
expect(strings).to eq(n.map { |length| subject * length })
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -56,14 +56,14 @@ describe String do
|
|
56
56
|
it "should apply each fuzzing rule individually" do
|
57
57
|
strings = subject.fuzz(/o/ => ['O', '0'], /a/ => ['A', '@']).to_a
|
58
58
|
|
59
|
-
strings.
|
59
|
+
expect(strings).to match_array([
|
60
60
|
"fOo bar",
|
61
61
|
"f0o bar",
|
62
62
|
"foO bar",
|
63
63
|
"fo0 bar",
|
64
64
|
"foo bAr",
|
65
65
|
"foo b@r"
|
66
|
-
]
|
66
|
+
])
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -73,7 +73,7 @@ describe String do
|
|
73
73
|
it "should apply every combination of mutation rules" do
|
74
74
|
strings = subject.mutate(/o/ => ['0'], /a/ => ['@']).to_a
|
75
75
|
|
76
|
-
strings.
|
76
|
+
expect(strings).to match_array([
|
77
77
|
"f0o bar",
|
78
78
|
"fo0 bar",
|
79
79
|
"f00 bar",
|
@@ -81,7 +81,7 @@ describe String do
|
|
81
81
|
"f0o b@r",
|
82
82
|
"fo0 b@r",
|
83
83
|
"f00 b@r"
|
84
|
-
]
|
84
|
+
])
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
data/spec/fuzzing/fuzzer_spec.rb
CHANGED
@@ -13,14 +13,14 @@ describe Fuzzing::Fuzzer do
|
|
13
13
|
it "should accept Regexps" do
|
14
14
|
fuzzer = subject.new(/foo/ => substitutions)
|
15
15
|
|
16
|
-
fuzzer.rules.
|
16
|
+
expect(fuzzer.rules).to have_key(/foo/)
|
17
17
|
end
|
18
18
|
|
19
19
|
context "when given Strings" do
|
20
20
|
subject { described_class.new('foo' => substitutions) }
|
21
21
|
|
22
22
|
it "should convert to Regexp" do
|
23
|
-
subject.rules.
|
23
|
+
expect(subject.rules).to have_key(/foo/)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -28,15 +28,15 @@ describe Fuzzing::Fuzzer do
|
|
28
28
|
subject { described_class.new(:word => substitutions) }
|
29
29
|
|
30
30
|
it "should lookup the Regexp constant" do
|
31
|
-
subject.rules.
|
31
|
+
expect(subject.rules).to have_key(Regexp::WORD)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
context "otherwise" do
|
36
36
|
it "should raise a TypeError" do
|
37
|
-
|
37
|
+
expect {
|
38
38
|
subject.new(Object.new => substitutions)
|
39
|
-
}.
|
39
|
+
}.to raise_error(TypeError)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -47,22 +47,22 @@ describe Fuzzing::Fuzzer do
|
|
47
47
|
it "should accept Enumerable values" do
|
48
48
|
fuzzer = subject.new(pattern => ['bar'])
|
49
49
|
|
50
|
-
fuzzer.rules[pattern].
|
50
|
+
expect(fuzzer.rules[pattern]).to eq(['bar'])
|
51
51
|
end
|
52
52
|
|
53
53
|
context "when given Symbols" do
|
54
54
|
subject { described_class.new(pattern => :bad_strings) }
|
55
55
|
|
56
56
|
it "should map to an Enumerator for a Fuzzing method" do
|
57
|
-
subject.rules[pattern].
|
57
|
+
expect(subject.rules[pattern]).to be_kind_of(Enumerable)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
context "otherwise" do
|
62
62
|
it "should raise a TypeError" do
|
63
|
-
|
63
|
+
expect {
|
64
64
|
subject.new(pattern => Object.new)
|
65
|
-
}.
|
65
|
+
}.to raise_error(TypeError)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -74,24 +74,24 @@ describe Fuzzing::Fuzzer do
|
|
74
74
|
subject { described_class.new(/o/ => ['O', '0'], /a/ => ['A', '@']) }
|
75
75
|
|
76
76
|
it "should apply each fuzzing rule individually" do
|
77
|
-
subject.each(string).to_a.
|
77
|
+
expect(subject.each(string).to_a).to match_array([
|
78
78
|
"fOo bar",
|
79
79
|
"f0o bar",
|
80
80
|
"foO bar",
|
81
81
|
"fo0 bar",
|
82
82
|
"foo bAr",
|
83
83
|
"foo b@r"
|
84
|
-
]
|
84
|
+
])
|
85
85
|
end
|
86
86
|
|
87
87
|
context "when mutations contain Integers" do
|
88
88
|
subject { described_class.new(/o/ => [48]) }
|
89
89
|
|
90
90
|
it "should convert them to characters" do
|
91
|
-
subject.each(string).to_a.
|
91
|
+
expect(subject.each(string).to_a).to match_array([
|
92
92
|
"f0o bar",
|
93
93
|
"fo0 bar"
|
94
|
-
]
|
94
|
+
])
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
@@ -99,10 +99,10 @@ describe Fuzzing::Fuzzer do
|
|
99
99
|
subject { described_class.new(/o/ => [lambda { |str| str.upcase }]) }
|
100
100
|
|
101
101
|
it "should call them with the matched String" do
|
102
|
-
subject.each(string).to_a.
|
102
|
+
expect(subject.each(string).to_a).to match_array([
|
103
103
|
"fOo bar",
|
104
104
|
"foO bar"
|
105
|
-
]
|
105
|
+
])
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
@@ -6,19 +6,19 @@ describe Fuzzing do
|
|
6
6
|
let(:method) { :bad_strings }
|
7
7
|
|
8
8
|
it "should return Enumerators for fuzzing methods" do
|
9
|
-
subject[method].
|
9
|
+
expect(subject[method]).to be_kind_of(Enumerable)
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should raise NoMethodError for unknown methods" do
|
13
|
-
|
13
|
+
expect {
|
14
14
|
subject[:foo]
|
15
|
-
}.
|
15
|
+
}.to raise_error(NoMethodError)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should not allow accessing inherited methods" do
|
19
|
-
|
19
|
+
expect {
|
20
20
|
subject[:instance_eval]
|
21
|
-
}.
|
21
|
+
}.to raise_error(NoMethodError)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -13,14 +13,14 @@ describe Fuzzing::Mutator do
|
|
13
13
|
it "should accept Regexps" do
|
14
14
|
fuzzer = subject.new(/foo/ => substitutions)
|
15
15
|
|
16
|
-
fuzzer.rules.
|
16
|
+
expect(fuzzer.rules).to have_key(/foo/)
|
17
17
|
end
|
18
18
|
|
19
19
|
context "when given Strings" do
|
20
20
|
subject { described_class.new('foo' => substitutions) }
|
21
21
|
|
22
22
|
it "should convert to Regexp" do
|
23
|
-
subject.rules.
|
23
|
+
expect(subject.rules).to have_key(/foo/)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -28,15 +28,15 @@ describe Fuzzing::Mutator do
|
|
28
28
|
subject { described_class.new(:word => substitutions) }
|
29
29
|
|
30
30
|
it "should lookup the Regexp constant" do
|
31
|
-
subject.rules.
|
31
|
+
expect(subject.rules).to have_key(Regexp::WORD)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
context "otherwise" do
|
36
36
|
it "should raise a TypeError" do
|
37
|
-
|
37
|
+
expect {
|
38
38
|
subject.new(Object.new => substitutions)
|
39
|
-
}.
|
39
|
+
}.to raise_error(TypeError)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -47,22 +47,22 @@ describe Fuzzing::Mutator do
|
|
47
47
|
it "should accept Enumerable values" do
|
48
48
|
fuzzer = subject.new(pattern => ['bar'])
|
49
49
|
|
50
|
-
fuzzer.rules[pattern].
|
50
|
+
expect(fuzzer.rules[pattern]).to eq(['bar'])
|
51
51
|
end
|
52
52
|
|
53
53
|
context "when given Symbols" do
|
54
54
|
subject { described_class.new(pattern => :bad_strings) }
|
55
55
|
|
56
56
|
it "should map to an Enumerator for a Fuzzing method" do
|
57
|
-
subject.rules[pattern].
|
57
|
+
expect(subject.rules[pattern]).to be_kind_of(Enumerable)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
context "otherwise" do
|
62
62
|
it "should raise a TypeError" do
|
63
|
-
|
63
|
+
expect {
|
64
64
|
subject.new(pattern => Object.new)
|
65
|
-
}.
|
65
|
+
}.to raise_error(TypeError)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -74,7 +74,7 @@ describe Fuzzing::Mutator do
|
|
74
74
|
subject { described_class.new(/o/ => ['0'], /a/ => ['@']) }
|
75
75
|
|
76
76
|
it "should apply every combination of mutation rules" do
|
77
|
-
subject.each(string).to_a.
|
77
|
+
expect(subject.each(string).to_a).to match_array([
|
78
78
|
"f0o bar",
|
79
79
|
"fo0 bar",
|
80
80
|
"f00 bar",
|
@@ -82,18 +82,18 @@ describe Fuzzing::Mutator do
|
|
82
82
|
"f0o b@r",
|
83
83
|
"fo0 b@r",
|
84
84
|
"f00 b@r"
|
85
|
-
]
|
85
|
+
])
|
86
86
|
end
|
87
87
|
|
88
88
|
context "when mutations contain Integers" do
|
89
89
|
subject { described_class.new(/o/ => [48]) }
|
90
90
|
|
91
91
|
it "should convert them to characters" do
|
92
|
-
subject.each(string).to_a.
|
92
|
+
expect(subject.each(string).to_a).to match_array([
|
93
93
|
"f0o bar",
|
94
94
|
"fo0 bar",
|
95
95
|
"f00 bar"
|
96
|
-
]
|
96
|
+
])
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -101,11 +101,11 @@ describe Fuzzing::Mutator do
|
|
101
101
|
subject { described_class.new(/o/ => [lambda { |str| str.upcase }]) }
|
102
102
|
|
103
103
|
it "should call them with the matched String" do
|
104
|
-
subject.each(string).to_a.
|
104
|
+
expect(subject.each(string).to_a).to match_array([
|
105
105
|
"fOo bar",
|
106
106
|
"foO bar",
|
107
107
|
"fOO bar"
|
108
|
-
]
|
108
|
+
])
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
@@ -9,15 +9,15 @@ describe Fuzzing::Repeater do
|
|
9
9
|
it "should coerce lengths to an Enumerable" do
|
10
10
|
repeator = subject.new(10)
|
11
11
|
|
12
|
-
repeator.lengths.
|
12
|
+
expect(repeator.lengths).to be_kind_of(Enumerable)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
context "when lengths is not Enumerable or an Integer" do
|
17
17
|
it "should raise a TypeError" do
|
18
|
-
|
18
|
+
expect {
|
19
19
|
subject.new(Object.new)
|
20
|
-
}.
|
20
|
+
}.to raise_error(TypeError)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -33,7 +33,7 @@ describe Fuzzing::Repeater do
|
|
33
33
|
it "should yield one repeated value" do
|
34
34
|
values = subject.each(repeatable).to_a
|
35
35
|
|
36
|
-
values.
|
36
|
+
expect(values).to eq([repeatable * length])
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -43,14 +43,14 @@ describe Fuzzing::Repeater do
|
|
43
43
|
subject { described_class.new(lengths) }
|
44
44
|
|
45
45
|
it "should yield repeated values for each length" do
|
46
|
-
values = subject.each(repeatable).to_a
|
46
|
+
values = subject.each(repeatable).to_a
|
47
47
|
|
48
|
-
values.
|
48
|
+
expect(values).to eq([
|
49
49
|
repeatable * 1,
|
50
50
|
repeatable * 2,
|
51
51
|
repeatable * 3,
|
52
52
|
repeatable * 4
|
53
|
-
]
|
53
|
+
])
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -7,48 +7,48 @@ describe Fuzzing::Template do
|
|
7
7
|
it "should generate Strings from CharSets" do
|
8
8
|
strings = subject.new([:lowercase_hexadecimal, :numeric]).to_a
|
9
9
|
|
10
|
-
strings.grep(/^[0-9a-f][0-9]$/).
|
10
|
+
expect(strings.grep(/^[0-9a-f][0-9]$/)).to eq(strings)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should generate Strings from lengths of CharSets" do
|
14
14
|
strings = subject.new([[:numeric, 2]]).to_a
|
15
15
|
|
16
|
-
strings.grep(/^[0-9]{2}$/).
|
16
|
+
expect(strings.grep(/^[0-9]{2}$/)).to eq(strings)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should generate Strings from varying lengths of CharSets" do
|
20
20
|
strings = subject.new([[:numeric, 1..2]]).to_a
|
21
21
|
|
22
|
-
strings.grep(/^[0-9]{1,2}$/).
|
22
|
+
expect(strings.grep(/^[0-9]{1,2}$/)).to eq(strings)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should generate Strings from custom CharSets" do
|
26
26
|
strings = subject.new([[%w[a b c], 2]]).to_a
|
27
27
|
|
28
|
-
strings.grep(/^[abc]{2}$/).
|
28
|
+
expect(strings.grep(/^[abc]{2}$/)).to eq(strings)
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should generate Strings containing known Strings" do
|
32
32
|
strings = subject.new(['foo', [%w[a b c], 2]]).to_a
|
33
33
|
|
34
|
-
strings.grep(/^foo[abc]{2}$/).
|
34
|
+
expect(strings.grep(/^foo[abc]{2}$/)).to eq(strings)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should raise a TypeError for non String, Symbol, Enumerable CharSets" do
|
38
|
-
|
38
|
+
expect {
|
39
39
|
subject.new([[Object.new, 2]]).to_a
|
40
|
-
}.
|
40
|
+
}.to raise_error(TypeError)
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should raise an ArgumentError for unknown CharSets" do
|
44
|
-
|
44
|
+
expect {
|
45
45
|
subject.new([[:foo_bar, 2]]).to_a
|
46
|
-
}.
|
46
|
+
}.to raise_error(ArgumentError)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should raise a TypeError for non Integer,Array,Range lengths" do
|
50
|
-
|
50
|
+
expect {
|
51
51
|
subject.new([[:numeric, 'foo']]).to_a
|
52
|
-
}.
|
52
|
+
}.to raise_error(TypeError)
|
53
53
|
end
|
54
54
|
end
|
data/spec/mixin_spec.rb
CHANGED
@@ -20,34 +20,32 @@ describe Mixin do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
context "when included" do
|
23
|
-
|
24
|
-
|
25
|
-
@base.send :include, subject
|
23
|
+
let(:klass) do
|
24
|
+
Class.new.tap { |klass| klass.send :include, subject }
|
26
25
|
end
|
27
26
|
|
28
27
|
it "should include the mixed in modules" do
|
29
|
-
|
30
|
-
|
28
|
+
expect(klass).to include(Mixins::Test1)
|
29
|
+
expect(klass).to include(Mixins::Test2)
|
31
30
|
end
|
32
31
|
|
33
32
|
it "should evaluate the mixin block" do
|
34
|
-
|
33
|
+
expect(klass.instance_variable_get("@var")).to eq(1)
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
37
|
context "when extended" do
|
39
|
-
|
40
|
-
|
41
|
-
@base.send :extend, subject
|
38
|
+
let(:object) do
|
39
|
+
Object.new.tap { |obj| obj.extend(subject) }
|
42
40
|
end
|
43
41
|
|
44
42
|
it "should extend the mixed in modules" do
|
45
|
-
|
46
|
-
|
43
|
+
expect(object).to be_kind_of(Mixins::Test1)
|
44
|
+
expect(object).to be_kind_of(Mixins::Test2)
|
47
45
|
end
|
48
46
|
|
49
47
|
it "should evaluate the mixin block" do
|
50
|
-
|
48
|
+
expect(object.instance_variable_get("@var")).to eq(1)
|
51
49
|
end
|
52
50
|
end
|
53
51
|
end
|