ronin-support 0.1.0.pre1
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.
- data/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +504 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +23 -0
- data/README.md +98 -0
- data/Rakefile +29 -0
- data/gemspec.yml +20 -0
- data/lib/ronin/extensions.rb +28 -0
- data/lib/ronin/extensions/file.rb +63 -0
- data/lib/ronin/extensions/ip_addr.rb +220 -0
- data/lib/ronin/extensions/kernel.rb +45 -0
- data/lib/ronin/extensions/meta.rb +22 -0
- data/lib/ronin/extensions/meta/object.rb +24 -0
- data/lib/ronin/extensions/string.rb +200 -0
- data/lib/ronin/formatting.rb +26 -0
- data/lib/ronin/formatting/binary.rb +22 -0
- data/lib/ronin/formatting/digest.rb +22 -0
- data/lib/ronin/formatting/extensions.rb +25 -0
- data/lib/ronin/formatting/extensions/binary.rb +24 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
- data/lib/ronin/formatting/extensions/digest.rb +23 -0
- data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
- data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
- data/lib/ronin/formatting/extensions/http.rb +23 -0
- data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
- data/lib/ronin/formatting/extensions/http/string.rb +102 -0
- data/lib/ronin/formatting/extensions/text.rb +23 -0
- data/lib/ronin/formatting/extensions/text/array.rb +125 -0
- data/lib/ronin/formatting/extensions/text/string.rb +206 -0
- data/lib/ronin/formatting/http.rb +22 -0
- data/lib/ronin/formatting/text.rb +22 -0
- data/lib/ronin/network.rb +29 -0
- data/lib/ronin/network/esmtp.rb +22 -0
- data/lib/ronin/network/extensions.rb +29 -0
- data/lib/ronin/network/extensions/esmtp.rb +22 -0
- data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
- data/lib/ronin/network/extensions/http.rb +22 -0
- data/lib/ronin/network/extensions/http/net.rb +661 -0
- data/lib/ronin/network/extensions/imap.rb +22 -0
- data/lib/ronin/network/extensions/imap/net.rb +124 -0
- data/lib/ronin/network/extensions/pop3.rb +22 -0
- data/lib/ronin/network/extensions/pop3/net.rb +92 -0
- data/lib/ronin/network/extensions/smtp.rb +22 -0
- data/lib/ronin/network/extensions/smtp/net.rb +110 -0
- data/lib/ronin/network/extensions/ssl.rb +22 -0
- data/lib/ronin/network/extensions/ssl/net.rb +147 -0
- data/lib/ronin/network/extensions/tcp.rb +22 -0
- data/lib/ronin/network/extensions/tcp/net.rb +304 -0
- data/lib/ronin/network/extensions/telnet.rb +22 -0
- data/lib/ronin/network/extensions/telnet/net.rb +156 -0
- data/lib/ronin/network/extensions/udp.rb +22 -0
- data/lib/ronin/network/extensions/udp/net.rb +226 -0
- data/lib/ronin/network/http.rb +24 -0
- data/lib/ronin/network/http/exceptions.rb +22 -0
- data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
- data/lib/ronin/network/http/http.rb +290 -0
- data/lib/ronin/network/http/proxy.rb +307 -0
- data/lib/ronin/network/imap.rb +49 -0
- data/lib/ronin/network/network.rb +41 -0
- data/lib/ronin/network/pop3.rb +49 -0
- data/lib/ronin/network/smtp.rb +24 -0
- data/lib/ronin/network/smtp/email.rb +143 -0
- data/lib/ronin/network/smtp/smtp.rb +68 -0
- data/lib/ronin/network/ssl.rb +47 -0
- data/lib/ronin/network/tcp.rb +22 -0
- data/lib/ronin/network/telnet.rb +109 -0
- data/lib/ronin/network/udp.rb +22 -0
- data/lib/ronin/path.rb +132 -0
- data/lib/ronin/support.rb +28 -0
- data/lib/ronin/support/inflector.rb +40 -0
- data/lib/ronin/support/version.rb +27 -0
- data/lib/ronin/templates.rb +23 -0
- data/lib/ronin/templates/erb.rb +75 -0
- data/lib/ronin/templates/template.rb +161 -0
- data/ronin-support.gemspec +10 -0
- data/spec/extensions/file_spec.rb +24 -0
- data/spec/extensions/ip_addr_spec.rb +171 -0
- data/spec/extensions/kernel_spec.rb +30 -0
- data/spec/extensions/string_spec.rb +177 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
- data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
- data/spec/formatting/binary/integer_spec.rb +140 -0
- data/spec/formatting/binary/string_spec.rb +306 -0
- data/spec/formatting/digest/string_spec.rb +82 -0
- data/spec/formatting/http/integer_spec.rb +42 -0
- data/spec/formatting/http/string_spec.rb +76 -0
- data/spec/formatting/text/array_spec.rb +105 -0
- data/spec/formatting/text/string_spec.rb +180 -0
- data/spec/network/http/http_spec.rb +280 -0
- data/spec/network/http/proxy_spec.rb +150 -0
- data/spec/network/network_spec.rb +8 -0
- data/spec/network/ssl_spec.rb +14 -0
- data/spec/path_spec.rb +84 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support_spec.rb +8 -0
- data/spec/templates/classes/example_erb.rb +11 -0
- data/spec/templates/classes/example_template.rb +35 -0
- data/spec/templates/erb_spec.rb +21 -0
- data/spec/templates/helpers/data.rb +9 -0
- data/spec/templates/helpers/data/includes/_relative.erb +1 -0
- data/spec/templates/helpers/data/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +54 -0
- metadata +286 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/formatting/digest'
|
|
3
|
+
|
|
4
|
+
describe String do
|
|
5
|
+
subject { "hello" }
|
|
6
|
+
|
|
7
|
+
it "should provide String#md5" do
|
|
8
|
+
should respond_to(:md5)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should provide String#sha1" do
|
|
12
|
+
should respond_to(:sha1)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should provide String#sha2" do
|
|
16
|
+
should respond_to(:sha2)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should provide String#sha256" do
|
|
20
|
+
should respond_to(:sha256)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should provide String#sha512" do
|
|
24
|
+
should respond_to(:sha512)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "md5" do
|
|
28
|
+
subject { "test" }
|
|
29
|
+
|
|
30
|
+
let(:digest_md5) { "098f6bcd4621d373cade4e832627b4f6" }
|
|
31
|
+
|
|
32
|
+
it "should return the MD5 digest of itself" do
|
|
33
|
+
subject.md5.should == digest_md5
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "sha1" do
|
|
38
|
+
subject { "test" }
|
|
39
|
+
|
|
40
|
+
let(:digest_sha1) { "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3" }
|
|
41
|
+
|
|
42
|
+
it "should return the SHA1 digest of itself" do
|
|
43
|
+
subject.sha1.should == digest_sha1
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "sha2" do
|
|
48
|
+
subject { "test" }
|
|
49
|
+
|
|
50
|
+
let(:digest_sha2) do
|
|
51
|
+
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should return the SHA2 digest of itself" do
|
|
55
|
+
subject.sha2.should == digest_sha2
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "sha256" do
|
|
60
|
+
subject { "test" }
|
|
61
|
+
|
|
62
|
+
let(:digest_sha256) do
|
|
63
|
+
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should return the SHA256 digest of itself" do
|
|
67
|
+
subject.sha256.should == digest_sha256
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe "sha512" do
|
|
72
|
+
subject { "test" }
|
|
73
|
+
|
|
74
|
+
let(:digest_sha512) do
|
|
75
|
+
"ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should return the SHA512 digest of itself" do
|
|
79
|
+
subject.sha512.should == digest_sha512
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/formatting/extensions/http/integer'
|
|
3
|
+
|
|
4
|
+
describe Integer do
|
|
5
|
+
subject { 0x20 }
|
|
6
|
+
|
|
7
|
+
it "should provide String#uri_encode" do
|
|
8
|
+
should respond_to(:uri_encode)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should provide String#uri_escape" do
|
|
12
|
+
should respond_to(:uri_escape)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should provide String#format_http" do
|
|
16
|
+
should respond_to(:format_http)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "uri_encode" do
|
|
20
|
+
let(:uri_encoded) { '%20' }
|
|
21
|
+
|
|
22
|
+
it "should URI encode itself" do
|
|
23
|
+
subject.uri_encode.should == uri_encoded
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "uri_escape" do
|
|
28
|
+
let(:uri_escaped) { '+' }
|
|
29
|
+
|
|
30
|
+
it "should URI escape itself" do
|
|
31
|
+
subject.uri_escape.should == uri_escaped
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "format_http" do
|
|
36
|
+
let(:http_formatted) { '%20' }
|
|
37
|
+
|
|
38
|
+
it "should format the byte" do
|
|
39
|
+
subject.format_http.should == http_formatted
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/formatting/extensions/http/string'
|
|
3
|
+
|
|
4
|
+
describe String do
|
|
5
|
+
subject { "hello" }
|
|
6
|
+
|
|
7
|
+
it "should provide String#uri_encode" do
|
|
8
|
+
should respond_to(:uri_encode)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should provide String#uri_decode" do
|
|
12
|
+
should respond_to(:uri_decode)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should provide String#uri_escape" do
|
|
16
|
+
should respond_to(:uri_escape)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should provide String#uri_unescape" do
|
|
20
|
+
should respond_to(:uri_unescape)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should provide String#format_http" do
|
|
24
|
+
should respond_to(:format_http)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "uri_encode" do
|
|
28
|
+
subject { "mod % 3" }
|
|
29
|
+
|
|
30
|
+
let(:uri_encoded) { "mod%20%25%203" }
|
|
31
|
+
|
|
32
|
+
it "should URI encode itself" do
|
|
33
|
+
subject.uri_encode.should == uri_encoded
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "uri_decode" do
|
|
38
|
+
subject { "mod%20%25%203" }
|
|
39
|
+
|
|
40
|
+
let(:uri_decoded) { "mod % 3" }
|
|
41
|
+
|
|
42
|
+
it "should URI decode itself" do
|
|
43
|
+
subject.uri_decode.should == uri_decoded
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "uri_escape" do
|
|
48
|
+
subject { "x + y" }
|
|
49
|
+
|
|
50
|
+
let(:uri_escaped) { "x+%2B+y" }
|
|
51
|
+
|
|
52
|
+
it "should URI escape itself" do
|
|
53
|
+
subject.uri_escape.should == uri_escaped
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "uri_unescape" do
|
|
58
|
+
subject { "x+%2B+y" }
|
|
59
|
+
|
|
60
|
+
let(:uri_unescaped) { "x + y" }
|
|
61
|
+
|
|
62
|
+
it "should URI unescape itself" do
|
|
63
|
+
subject.uri_unescape.should == uri_unescaped
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe "format_http" do
|
|
68
|
+
subject { "mod % 3" }
|
|
69
|
+
|
|
70
|
+
let(:http_formatted) { "%6d%6f%64%20%25%20%33" }
|
|
71
|
+
|
|
72
|
+
it "should format each byte of the String" do
|
|
73
|
+
subject.format_http.should == http_formatted
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/formatting/text'
|
|
3
|
+
|
|
4
|
+
describe Array do
|
|
5
|
+
subject { [] }
|
|
6
|
+
|
|
7
|
+
let(:byte_array) { [0x41, 0x41, 0x20] }
|
|
8
|
+
let(:char_array) { ['A', 'A', ' '] }
|
|
9
|
+
let(:mixed_array) { ['AA', 0x20] }
|
|
10
|
+
let(:string) { 'AA ' }
|
|
11
|
+
|
|
12
|
+
it "should provide Array#bytes" do
|
|
13
|
+
should respond_to(:bytes)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should provide Array#chars" do
|
|
17
|
+
should respond_to(:chars)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should provide Array#char_string" do
|
|
21
|
+
should respond_to(:char_string)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should provide Array#hex_chars" do
|
|
25
|
+
should respond_to(:hex_chars)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should provide Array#hex_integers" do
|
|
29
|
+
should respond_to(:hex_integers)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "bytes" do
|
|
33
|
+
it "should convert an Array of bytes to an Array of bytes" do
|
|
34
|
+
byte_array.bytes.should == byte_array
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should convert an Array of chars to an Array of bytes" do
|
|
38
|
+
char_array.bytes.should == byte_array
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should safely handle mixed byte/char/string Arrays" do
|
|
42
|
+
mixed_array.bytes.should == byte_array
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "chars" do
|
|
47
|
+
it "should convert an Array of bytes to an Array of chars" do
|
|
48
|
+
byte_array.chars.should == char_array
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should safely convert an Array of chars to an Array of chars" do
|
|
52
|
+
char_array.chars.should == char_array
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should safely handle mixed byte/char/string Arrays" do
|
|
56
|
+
mixed_array.chars.should == char_array
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "char_string" do
|
|
61
|
+
it "should convert an Array of bytes to a String" do
|
|
62
|
+
byte_array.char_string.should == string
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should convert an Array of chars to a String" do
|
|
66
|
+
char_array.char_string.should == string
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should safely handle mixed byte/char/string Arrays" do
|
|
70
|
+
mixed_array.char_string.should == string
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "hex_chars" do
|
|
75
|
+
let(:hex_chars) { ['\x41', '\x41', '\x20'] }
|
|
76
|
+
|
|
77
|
+
it "should convert an Array of bytes into hexadecimal chars" do
|
|
78
|
+
byte_array.hex_chars.should == hex_chars
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should convert an Array of chars into hexadecimal chars" do
|
|
82
|
+
char_array.hex_chars.should == hex_chars
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should safely handle mixed byte/char/string Arrays" do
|
|
86
|
+
mixed_array.hex_chars.should == hex_chars
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "hex_integers" do
|
|
91
|
+
let(:hex_integers) { ['0x41', '0x41', '0x20'] }
|
|
92
|
+
|
|
93
|
+
it "should convert an Array of bytes into hexadecimal integers" do
|
|
94
|
+
byte_array.hex_integers.should == hex_integers
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should convert an Array of chars into hexadecimal integers" do
|
|
98
|
+
char_array.hex_integers.should == hex_integers
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should safely handle mixed byte/char/string Arrays" do
|
|
102
|
+
mixed_array.hex_integers.should == hex_integers
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/formatting/text'
|
|
3
|
+
|
|
4
|
+
describe String do
|
|
5
|
+
subject { "hello" }
|
|
6
|
+
|
|
7
|
+
it "should provide String#format_chars" do
|
|
8
|
+
should respond_to(:format_chars)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should provide String#format_bytes" do
|
|
12
|
+
should respond_to(:format_bytes)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should provide String#random_case" do
|
|
16
|
+
should respond_to(:random_case)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should provide String#insert_before" do
|
|
20
|
+
should respond_to(:insert_before)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should provide String#insert_after" do
|
|
24
|
+
should respond_to(:insert_after)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "format_chars" do
|
|
28
|
+
it "should format each character in the String" do
|
|
29
|
+
subject.format_chars { |c|
|
|
30
|
+
"_#{c}"
|
|
31
|
+
}.should == "_h_e_l_l_o"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should format specific bytes in a String" do
|
|
35
|
+
subject.format_chars(:include => [104, 108]) { |c|
|
|
36
|
+
c.upcase
|
|
37
|
+
}.should == 'HeLLo'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should not format specific bytes in a String" do
|
|
41
|
+
subject.format_chars(:exclude => [101, 111]) { |c|
|
|
42
|
+
c.upcase
|
|
43
|
+
}.should == 'HeLLo'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should format ranges of bytes in a String" do
|
|
47
|
+
subject.format_chars(:include => (104..108)) { |c|
|
|
48
|
+
c.upcase
|
|
49
|
+
}.should == 'HeLLo'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should not format ranges of bytes in a String" do
|
|
53
|
+
subject.format_chars(:exclude => (104..108)) { |c|
|
|
54
|
+
c.upcase
|
|
55
|
+
}.should == 'hEllO'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should format specific chars in a String" do
|
|
59
|
+
subject.format_chars(:include => ['h', 'l']) { |c|
|
|
60
|
+
c.upcase
|
|
61
|
+
}.should == 'HeLLo'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should not format specific bytes in a String" do
|
|
65
|
+
subject.format_chars(:exclude => ['e', 'o']) { |c|
|
|
66
|
+
c.upcase
|
|
67
|
+
}.should == 'HeLLo'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should format ranges of chars in a String" do
|
|
71
|
+
subject.format_chars(:include => ('h'..'l')) { |c|
|
|
72
|
+
c.upcase
|
|
73
|
+
}.should == 'HeLLo'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should not format ranges of chars in a String" do
|
|
77
|
+
subject.format_chars(:exclude => ('h'..'l')) { |c|
|
|
78
|
+
c.upcase
|
|
79
|
+
}.should == 'hEllO'
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe "format_bytes" do
|
|
84
|
+
it "should format each byte in the String" do
|
|
85
|
+
subject.format_bytes { |b|
|
|
86
|
+
sprintf("%%%x",b)
|
|
87
|
+
}.should == "%68%65%6c%6c%6f"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should format specific bytes in a String" do
|
|
91
|
+
subject.format_bytes(:include => [104, 108]) { |b|
|
|
92
|
+
b - 32
|
|
93
|
+
}.should == 'HeLLo'
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should not format specific bytes in a String" do
|
|
97
|
+
subject.format_bytes(:exclude => [101, 111]) { |b|
|
|
98
|
+
b - 32
|
|
99
|
+
}.should == 'HeLLo'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should format ranges of bytes in a String" do
|
|
103
|
+
subject.format_bytes(:include => (104..108)) { |b|
|
|
104
|
+
b - 32
|
|
105
|
+
}.should == 'HeLLo'
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "should not format ranges of bytes in a String" do
|
|
109
|
+
subject.format_bytes(:exclude => (104..108)) { |b|
|
|
110
|
+
b - 32
|
|
111
|
+
}.should == 'hEllO'
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should format specific chars in a String" do
|
|
115
|
+
subject.format_bytes(:include => ['h', 'l']) { |b|
|
|
116
|
+
b - 32
|
|
117
|
+
}.should == 'HeLLo'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should not format specific bytes in a String" do
|
|
121
|
+
subject.format_bytes(:exclude => ['e', 'o']) { |b|
|
|
122
|
+
b - 32
|
|
123
|
+
}.should == 'HeLLo'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should format ranges of chars in a String" do
|
|
127
|
+
subject.format_bytes(:include => ('h'..'l')) { |b|
|
|
128
|
+
b - 32
|
|
129
|
+
}.should == 'HeLLo'
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "should not format ranges of chars in a String" do
|
|
133
|
+
subject.format_bytes(:exclude => ('h'..'l')) { |b|
|
|
134
|
+
b - 32
|
|
135
|
+
}.should == 'hEllO'
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
describe "random_case" do
|
|
140
|
+
it "should capitalize each character when :probability is 1.0" do
|
|
141
|
+
new_string = subject.random_case(:probability => 1.0)
|
|
142
|
+
|
|
143
|
+
subject.upcase.should == new_string
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "should not capitalize any characters when :probability is 0.0" do
|
|
147
|
+
new_string = subject.random_case(:probability => 0.0)
|
|
148
|
+
|
|
149
|
+
subject.should == new_string
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
describe "insert_before" do
|
|
154
|
+
it "should inject data before a matched String" do
|
|
155
|
+
subject.insert_before('ll','x').should == "hexllo"
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "should inject data before a matched Regexp" do
|
|
159
|
+
subject.insert_before(/l+/,'x').should == "hexllo"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should not inject data if no matches are found" do
|
|
163
|
+
subject.insert_before(/x/,'x').should == subject
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
describe "insert_after" do
|
|
168
|
+
it "should inject data after a matched String" do
|
|
169
|
+
subject.insert_after('ll','x').should == "hellxo"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should inject data after a matched Regexp" do
|
|
173
|
+
subject.insert_after(/l+/,'x').should == "hellxo"
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
it "should not inject data if no matches are found" do
|
|
177
|
+
subject.insert_after(/x/,'x').should == subject
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|