ronin 0.2.2 → 0.2.3
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/History.txt +53 -0
- data/Manifest.txt +26 -18
- data/README.txt +12 -19
- data/Rakefile +9 -9
- data/TODO.txt +5 -5
- data/lib/ronin/cacheable.rb +246 -0
- data/lib/ronin/database/database.rb +21 -3
- data/lib/ronin/database/exceptions/invalid_config.rb +1 -1
- data/lib/ronin/environment.rb +5 -2
- data/lib/ronin/extensions.rb +2 -0
- data/lib/ronin/{models.rb → extensions/array.rb} +19 -6
- data/lib/ronin/extensions/ip_addr.rb +127 -0
- data/lib/ronin/{objectify/exceptions/object_context_not_found.rb → extensions/kernel.rb} +14 -3
- data/lib/ronin/extensions/uri/query_params.rb +4 -2
- data/lib/ronin/formatting/extensions/binary/integer.rb +6 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +14 -12
- data/lib/ronin/formatting/extensions/text/string.rb +37 -19
- data/lib/ronin/has_license.rb +4 -2
- data/lib/ronin/model.rb +0 -1
- data/lib/ronin/network/extensions/http/net.rb +30 -3
- data/lib/ronin/network/extensions/telnet/net.rb +0 -18
- data/lib/ronin/network/http/exceptions/unknown_request.rb +1 -1
- data/lib/ronin/platform/exceptions/extension_not_found.rb +1 -1
- data/lib/ronin/platform/exceptions/overlay_cached.rb +1 -1
- data/lib/ronin/platform/exceptions/overlay_not_found.rb +1 -1
- data/lib/ronin/platform/extension.rb +18 -3
- data/lib/ronin/platform/extension_cache.rb +7 -1
- data/lib/ronin/platform/object_cache.rb +13 -12
- data/lib/ronin/platform/overlay.rb +14 -6
- data/lib/ronin/platform/overlay_cache.rb +11 -5
- data/lib/ronin/product.rb +20 -3
- data/lib/ronin/ronin.rb +0 -15
- data/lib/ronin/rpc/exceptions/response_missing.rb +1 -1
- data/lib/ronin/sessions/esmtp.rb +1 -10
- data/lib/ronin/{objectify.rb → sessions/exceptions.rb} +3 -3
- data/lib/ronin/{objectify/exceptions/unknown_object_context.rb → sessions/exceptions/variable_missing.rb} +4 -4
- data/lib/ronin/sessions/http.rb +3 -10
- data/lib/ronin/sessions/imap.rb +1 -10
- data/lib/ronin/sessions/pop3.rb +1 -9
- data/lib/ronin/sessions/session.rb +11 -21
- data/lib/ronin/sessions/smtp.rb +1 -10
- data/lib/ronin/sessions/tcp.rb +10 -13
- data/lib/ronin/sessions/telnet.rb +2 -17
- data/lib/ronin/sessions/udp.rb +6 -11
- data/lib/ronin/static/finders.rb +24 -0
- data/lib/ronin/ui/command_line/command_line.rb +41 -21
- data/lib/ronin/ui/command_line/commands/help.rb +7 -3
- data/lib/ronin/ui/command_line/commands/ls.rb +1 -1
- data/lib/ronin/ui/command_line/commands/rm.rb +1 -1
- data/lib/ronin/ui/command_line/exceptions/unknown_command.rb +1 -1
- data/lib/ronin/ui/diagnostics.rb +12 -5
- data/lib/ronin/ui/hexdump/extensions/file.rb +3 -1
- data/lib/ronin/ui/hexdump/hexdump.rb +1 -1
- data/lib/ronin/ui/verbose.rb +14 -0
- data/lib/ronin/version.rb +1 -1
- data/spec/cacheable_spec.rb +150 -0
- data/spec/classes/cacheable_model.rb +15 -0
- data/spec/classes/licensed_model.rb +12 -0
- data/spec/code/classes/thing.rb +13 -0
- data/spec/code/reference_spec.rb +1 -14
- data/spec/extensions/array_spec.rb +34 -0
- data/spec/extensions/ip_addr_spec.rb +44 -0
- data/spec/extensions/kernel_spec.rb +19 -0
- data/spec/extensions/uri/query_params_spec.rb +8 -0
- data/spec/formatting/binary/string_spec.rb +1 -1
- data/spec/formatting/digest/string_spec.rb +84 -0
- data/spec/formatting/http/string_spec.rb +84 -0
- data/spec/formatting/text/string_spec.rb +51 -0
- data/spec/has_license_spec.rb +29 -0
- data/spec/helpers/cacheable.rb +7 -0
- data/spec/helpers/contexts/ronin_cacheable_model.rb +13 -0
- data/spec/helpers/database.rb +5 -0
- data/spec/platform/helpers/overlays/hello/lib/init.rb +1 -0
- data/spec/platform/helpers/overlays/hello/lib/stuff/another_test.rb +6 -0
- data/spec/platform/helpers/overlays/hello/lib/stuff/test.rb +4 -0
- data/spec/platform/overlay_cache_spec.rb +1 -1
- data/spec/platform/overlay_spec.rb +28 -0
- data/spec/product_spec.rb +7 -0
- data/spec/sessions/classes/test_session.rb +11 -0
- data/spec/sessions/classes/uses_test_session.rb +10 -0
- data/spec/sessions/session_spec.rb +13 -44
- data/spec/spec_helper.rb +0 -5
- data/spec/static/{helpers → classes}/static_class.rb +0 -0
- data/spec/static/helpers/static.rb +0 -1
- data/spec/static/static_spec.rb +1 -0
- metadata +44 -35
- data/lib/ronin/objectify/exceptions.rb +0 -25
- data/lib/ronin/objectify/objectify.rb +0 -240
- data/lib/ronin/target.rb +0 -44
- data/lib/ronin/ui/command_line/param_parser.rb +0 -93
- data/spec/formatting/digest_spec.rb +0 -54
- data/spec/formatting/http_spec.rb +0 -53
- data/spec/formatting/text_spec.rb +0 -40
- data/spec/helpers.rb +0 -0
- data/spec/objectify/objectify_spec.rb +0 -31
- data/spec/target_spec.rb +0 -16
- data/spec/ui/command_line/helpers/example_command.rb +0 -21
- data/spec/ui/command_line/param_parser_spec.rb +0 -49
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'ronin/extensions/kernel'
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Kernel do
|
|
6
|
+
it "should provide Kernel#try" do
|
|
7
|
+
Kernel.respond_to?('try').should == true
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "try" do
|
|
11
|
+
it "should return the result of the block if nothing is raised" do
|
|
12
|
+
try { 2 + 2 }.should == 4
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should return nil if an exception is raised" do
|
|
16
|
+
try { 2 + 'a' }.should be_nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -35,4 +35,12 @@ describe URI::QueryParams do
|
|
|
35
35
|
@uri.query = 'u=3'
|
|
36
36
|
@uri.query_params['u'].should == '3'
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
it "should properly escape query param values" do
|
|
40
|
+
@uri.query_params['x'] = '1&2'
|
|
41
|
+
@uri.query_params['y'] = 'one=two'
|
|
42
|
+
@uri.query_params['z'] = '?'
|
|
43
|
+
|
|
44
|
+
@uri.to_s.should == "http://www.test.com/page.php?x=1%262&y=one%3Dtwo&z=%3F"
|
|
45
|
+
end
|
|
38
46
|
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'ronin/formatting/digest'
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe String do
|
|
6
|
+
before(:all) do
|
|
7
|
+
@string = "test"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should provide String#md5" do
|
|
11
|
+
@string.respond_to?('md5').should == true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should provide String#sha1" do
|
|
15
|
+
@string.respond_to?('sha1').should == true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should provide String#sha2" do
|
|
19
|
+
@string.respond_to?('sha2').should == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should provide String#sha256" do
|
|
23
|
+
@string.respond_to?('sha256').should == true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should provide String#sha512" do
|
|
27
|
+
@string.respond_to?('sha512').should == true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "md5" do
|
|
31
|
+
before(:all) do
|
|
32
|
+
@digest_plain_text = "test"
|
|
33
|
+
@digest_md5 = "098f6bcd4621d373cade4e832627b4f6"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should return the MD5 digest of itself" do
|
|
37
|
+
@digest_plain_text.md5.should == @digest_md5
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "sha1" do
|
|
42
|
+
before(:all) do
|
|
43
|
+
@digest_plain_text = "test"
|
|
44
|
+
@digest_sha1 = "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should return the SHA1 digest of itself" do
|
|
48
|
+
@digest_plain_text.sha1.should == @digest_sha1
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "sha2" do
|
|
53
|
+
before(:all) do
|
|
54
|
+
@digest_plain_text = "test"
|
|
55
|
+
@digest_sha2 = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should return the SHA2 digest of itself" do
|
|
59
|
+
@digest_plain_text.sha2.should == @digest_sha2
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe "sha256" do
|
|
64
|
+
before(:all) do
|
|
65
|
+
@digest_plain_text = "test"
|
|
66
|
+
@digest_sha256 = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should return the SHA256 digest of itself" do
|
|
70
|
+
@digest_plain_text.sha256.should == @digest_sha256
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "sha512" do
|
|
75
|
+
before(:all) do
|
|
76
|
+
@digest_plain_text = "test"
|
|
77
|
+
@digest_sha512 = "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should return the SHA512 digest of itself" do
|
|
81
|
+
@digest_plain_text.sha512.should == @digest_sha512
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'ronin/formatting/http'
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe String do
|
|
6
|
+
before(:all) do
|
|
7
|
+
@string = "mod % 3"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should provide String#uri_encode" do
|
|
11
|
+
@string.respond_to?('uri_encode').should == true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should provide String#uri_decode" do
|
|
15
|
+
@string.respond_to?('uri_decode').should == true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should provide String#uri_escape" do
|
|
19
|
+
@string.respond_to?('uri_escape').should == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should provide String#uri_unescape" do
|
|
23
|
+
@string.respond_to?('uri_unescape').should == true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should provide String#format_http" do
|
|
27
|
+
@string.respond_to?('format_http').should == true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "uri_encode" do
|
|
31
|
+
before(:all) do
|
|
32
|
+
@uri_unencoded = "mod % 3"
|
|
33
|
+
@uri_encoded = "mod%20%25%203"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should URI encode itself" do
|
|
37
|
+
@uri_unencoded.uri_encode.should == @uri_encoded
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "uri_decode" do
|
|
42
|
+
before(:all) do
|
|
43
|
+
@uri_unencoded = "mod % 3"
|
|
44
|
+
@uri_encoded = "mod%20%25%203"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should URI decode itself" do
|
|
48
|
+
@uri_encoded.uri_decode.should == @uri_unencoded
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "uri_escape" do
|
|
53
|
+
before(:all) do
|
|
54
|
+
@uri_unescaped = "x + y"
|
|
55
|
+
@uri_escaped = "x+%2B+y"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should URI escape itself" do
|
|
59
|
+
@uri_unescaped.uri_escape.should == @uri_escaped
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe "uri_unescape" do
|
|
64
|
+
before(:all) do
|
|
65
|
+
@uri_unescaped = "x + y"
|
|
66
|
+
@uri_escaped = "x+%2B+y"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should URI unescape itself" do
|
|
70
|
+
@uri_escaped.uri_unescape.should == @uri_unescaped
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "format_http" do
|
|
75
|
+
before(:all) do
|
|
76
|
+
@uri_unencoded = "mod % 3"
|
|
77
|
+
@uri_http_encoded = "%6d%6f%64%20%25%20%33"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should format each byte of the String" do
|
|
81
|
+
@uri_unencoded.format_http.should == @uri_http_encoded
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'ronin/formatting/text'
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe String do
|
|
6
|
+
before(:all) do
|
|
7
|
+
@string = "hello"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should provide String#format_chars" do
|
|
11
|
+
@string.respond_to?('format_chars').should == true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should provide String#format_bytes" do
|
|
15
|
+
@string.respond_to?('format_bytes').should == true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should provide String#random_case" do
|
|
19
|
+
@string.respond_to?('random_case').should == true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "format_chars" do
|
|
23
|
+
it "should format each character in the String" do
|
|
24
|
+
@string.format_chars { |c|
|
|
25
|
+
"_#{c}"
|
|
26
|
+
}.should == "_h_e_l_l_o"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "format_bytes" do
|
|
31
|
+
it "should format each byte in the String" do
|
|
32
|
+
@string.format_bytes { |b|
|
|
33
|
+
sprintf("%%%x",b)
|
|
34
|
+
}.should == "%68%65%6c%6c%6f"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "random_case" do
|
|
39
|
+
it "should capitalize each character when :probability is 1.0" do
|
|
40
|
+
new_string = @string.random_case(:probability => 1.0)
|
|
41
|
+
|
|
42
|
+
@string.upcase.should == new_string
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should not capitalize any characters when :probability is 0.0" do
|
|
46
|
+
new_string = @string.random_case(:probability => 0.0)
|
|
47
|
+
|
|
48
|
+
@string.should == new_string
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'ronin/has_license'
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'classes/licensed_model'
|
|
5
|
+
|
|
6
|
+
describe HasLicense do
|
|
7
|
+
before(:all) do
|
|
8
|
+
LicensedModel.auto_migrate!
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should have a license" do
|
|
12
|
+
model = LicensedModel.new(:content => 'bla')
|
|
13
|
+
model.license = License.gpl_2
|
|
14
|
+
model.save!
|
|
15
|
+
|
|
16
|
+
model.license.should == License.gpl_2
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should provide helper methods for querying licensed models" do
|
|
20
|
+
model = LicensedModel.new(:content => 'stuff here')
|
|
21
|
+
model.license = License.gpl_2
|
|
22
|
+
model.save!
|
|
23
|
+
model.reload
|
|
24
|
+
|
|
25
|
+
LicensedModel.all(
|
|
26
|
+
:content.like => '%stuff%'
|
|
27
|
+
).licensed_under(:gpl_2).first.should == model
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$hello_overlay_loaded = true
|
|
@@ -53,7 +53,7 @@ describe Platform::OverlayCache do
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it "should have extensions" do
|
|
56
|
-
@cache.extensions.should == ['
|
|
56
|
+
@cache.extensions.should == ['hello', 'random', 'test']
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
it "should provide the paths to specific extensions" do
|
|
@@ -32,4 +32,32 @@ describe Platform::Overlay do
|
|
|
32
32
|
@overlay.description.should == %{This is a test overlay used in Ronin's specs.}
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
|
+
|
|
36
|
+
describe "activate!" do
|
|
37
|
+
before(:all) do
|
|
38
|
+
@overlay = Platform::Overlay.new(File.join(OVERLAY_CACHE,'hello'))
|
|
39
|
+
@overlay.activate!
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should load the init.rb file if present" do
|
|
43
|
+
$hello_overlay_loaded.should == true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should make the lib directory accessible to Kernel#require" do
|
|
47
|
+
require('stuff/test').should == true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "deactivate!" do
|
|
52
|
+
before(:all) do
|
|
53
|
+
@overlay = Platform::Overlay.new(File.join(OVERLAY_CACHE,'hello'))
|
|
54
|
+
@overlay.deactivate!
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should make the lib directory unaccessible to Kernel#require" do
|
|
58
|
+
lambda {
|
|
59
|
+
require 'stuff/another_test'
|
|
60
|
+
}.should raise_error(LoadError)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
35
63
|
end
|
data/spec/product_spec.rb
CHANGED
|
@@ -13,4 +13,11 @@ describe Product do
|
|
|
13
13
|
@product.version = '0.1.0'
|
|
14
14
|
@product.should be_valid
|
|
15
15
|
end
|
|
16
|
+
|
|
17
|
+
it "should default the vendor to the name of the product" do
|
|
18
|
+
@product = Product.new(:name => 'Adobe', :version => '0.1.0')
|
|
19
|
+
@product.vendor.should == @product.name
|
|
20
|
+
|
|
21
|
+
@product.should be_valid
|
|
22
|
+
end
|
|
16
23
|
end
|
|
@@ -1,56 +1,25 @@
|
|
|
1
1
|
require 'ronin/sessions/session'
|
|
2
2
|
|
|
3
3
|
require 'spec_helper'
|
|
4
|
+
require 'sessions/classes/test_session'
|
|
5
|
+
require 'sessions/classes/uses_test_session'
|
|
4
6
|
|
|
5
7
|
describe Sessions::Session do
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
setup_session do
|
|
11
|
-
parameter :var, :default => :stuff, :description => 'Test parameter'
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_one
|
|
15
|
-
'this_is_a_test'
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
class TestSessionClass
|
|
20
|
-
include TestSession
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
class TestSessionObject
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
@session_obj = TestSessionObject.new
|
|
27
|
-
@session_obj.extend TestSession
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it "should add self.setup_session to a Module" do
|
|
31
|
-
TestSession.methods.include?('setup_session').should == true
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe "setup_session" do
|
|
35
|
-
it "should add self.included and self.extended methods once setup_session is called" do
|
|
36
|
-
TestSession.methods.include?('included').should == true
|
|
37
|
-
TestSession.methods.include?('extended').should == true
|
|
8
|
+
describe "require_variable" do
|
|
9
|
+
before(:each) do
|
|
10
|
+
@obj = UsesTestSession.new
|
|
11
|
+
@obj.host = 'www.example.com'
|
|
38
12
|
end
|
|
39
13
|
|
|
40
|
-
it "should
|
|
41
|
-
|
|
14
|
+
it "should raise a VariableMissing exception if a variable is nil" do
|
|
15
|
+
lambda {
|
|
16
|
+
@obj.host = nil
|
|
17
|
+
@obj.connect
|
|
18
|
+
}.should raise_error(Sessions::VariableMissing)
|
|
42
19
|
end
|
|
43
20
|
|
|
44
|
-
it "should
|
|
45
|
-
@
|
|
21
|
+
it "should do nothing if the variable is not nil" do
|
|
22
|
+
@obj.connect.should == @obj.host
|
|
46
23
|
end
|
|
47
24
|
end
|
|
48
|
-
|
|
49
|
-
it "should include Parameters once included" do
|
|
50
|
-
TestSessionClass.include?(Parameters).should == true
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should extend Parameters once extended" do
|
|
54
|
-
@session_obj.kind_of?(Parameters).should == true
|
|
55
|
-
end
|
|
56
25
|
end
|