dradis-mediawiki 3.6.0
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/.rspec +2 -0
- data/CHANGELOG.md +3 -0
- data/CONTRIBUTING.md +3 -0
- data/Gemfile +23 -0
- data/LICENSE +339 -0
- data/README.md +32 -0
- data/Rakefile +1 -0
- data/dradis-mediawiki.gemspec +31 -0
- data/lib/dradis/plugins/mediawiki/engine.rb +18 -0
- data/lib/dradis/plugins/mediawiki/filters.rb +65 -0
- data/lib/dradis/plugins/mediawiki/gem_version.rb +21 -0
- data/lib/dradis/plugins/mediawiki/version.rb +9 -0
- data/lib/dradis/plugins/mediawiki.rb +10 -0
- data/lib/dradis-mediawiki.rb +1 -0
- data/lib/tasks/thorfile.rb +17 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/wiki_import_spec.rb +18 -0
- data/test/vendor/mocha-0.9.5/COPYING +3 -0
- data/test/vendor/mocha-0.9.5/MIT-LICENSE +7 -0
- data/test/vendor/mocha-0.9.5/README +37 -0
- data/test/vendor/mocha-0.9.5/README.dradis +4 -0
- data/test/vendor/mocha-0.9.5/RELEASE +269 -0
- data/test/vendor/mocha-0.9.5/Rakefile +207 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/any_instance_method.rb +55 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/argument_iterator.rb +21 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/backtrace_filter.rb +17 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/cardinality.rb +95 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/central.rb +27 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/change_state_side_effect.rb +19 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/class_method.rb +87 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/configuration.rb +60 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/deprecation.rb +22 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/exception_raiser.rb +17 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/expectation.rb +476 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/expectation_error.rb +15 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/expectation_list.rb +50 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/in_state_ordering_constraint.rb +19 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/inspect.rb +67 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/instance_method.rb +16 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/is_a.rb +9 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/logger.rb +15 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/metaclass.rb +13 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/method_matcher.rb +21 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/mini_test_adapter.rb +50 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/mock.rb +200 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/mockery.rb +181 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/module_method.rb +16 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/multiple_yields.rb +20 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/names.rb +53 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/no_yields.rb +11 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/object.rb +187 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/all_of.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/any_of.rb +47 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/anything.rb +33 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/base.rb +15 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/equals.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_entries.rb +45 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_entry.rb +56 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_key.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/has_value.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/includes.rb +40 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/instance_of.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/is_a.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/kind_of.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/not.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/object.rb +15 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/optionally.rb +55 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameter_matchers.rb +27 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/parameters_matcher.rb +37 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/pretty_parameters.rb +28 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/return_values.rb +31 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/sequence.rb +42 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/single_return_value.rb +17 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/single_yield.rb +18 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/standalone.rb +166 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/state_machine.rb +91 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/stubbing_error.rb +16 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/test_case_adapter.rb +103 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/unexpected_invocation.rb +18 -0
- data/test/vendor/mocha-0.9.5/lib/mocha/yield_parameters.rb +31 -0
- data/test/vendor/mocha-0.9.5/lib/mocha.rb +49 -0
- data/test/vendor/mocha-0.9.5/lib/mocha_standalone.rb +2 -0
- data/test/vendor/mocha-0.9.5/lib/stubba.rb +4 -0
- data/test/wiki_import_test.rb +106 -0
- metadata +248 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
require 'mocha/parameter_matchers'
|
|
2
|
+
require 'mocha/mockery'
|
|
3
|
+
require 'mocha/sequence'
|
|
4
|
+
|
|
5
|
+
module Mocha # :nodoc:
|
|
6
|
+
|
|
7
|
+
# Methods added to Test::Unit::TestCase or equivalent.
|
|
8
|
+
module Standalone
|
|
9
|
+
|
|
10
|
+
include ParameterMatchers
|
|
11
|
+
|
|
12
|
+
# :call-seq: mock(name, &block) -> mock object
|
|
13
|
+
# mock(expected_methods = {}, &block) -> mock object
|
|
14
|
+
# mock(name, expected_methods = {}, &block) -> mock object
|
|
15
|
+
#
|
|
16
|
+
# Creates a mock object.
|
|
17
|
+
#
|
|
18
|
+
# +name+ is a +String+ identifier for the mock object.
|
|
19
|
+
#
|
|
20
|
+
# +expected_methods+ is a +Hash+ with expected method name symbols as keys and corresponding return values as values.
|
|
21
|
+
#
|
|
22
|
+
# Note that (contrary to expectations set up by #stub) these expectations <b>must</b> be fulfilled during the test.
|
|
23
|
+
# def test_product
|
|
24
|
+
# product = mock('ipod_product', :manufacturer => 'ipod', :price => 100)
|
|
25
|
+
# assert_equal 'ipod', product.manufacturer
|
|
26
|
+
# assert_equal 100, product.price
|
|
27
|
+
# # an error will be raised unless both Product#manufacturer and Product#price have been called
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# +block+ is an optional block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
|
|
31
|
+
# def test_product
|
|
32
|
+
# product = mock('ipod_product') do
|
|
33
|
+
# expects(:manufacturer).returns('ipod')
|
|
34
|
+
# expects(:price).returns(100)
|
|
35
|
+
# end
|
|
36
|
+
# assert_equal 'ipod', product.manufacturer
|
|
37
|
+
# assert_equal 100, product.price
|
|
38
|
+
# # an error will be raised unless both Product#manufacturer and Product#price have been called
|
|
39
|
+
# end
|
|
40
|
+
def mock(*arguments, &block)
|
|
41
|
+
name = arguments.shift if arguments.first.is_a?(String)
|
|
42
|
+
expectations = arguments.shift || {}
|
|
43
|
+
mock = name ? Mockery.instance.named_mock(name, &block) : Mockery.instance.unnamed_mock(&block)
|
|
44
|
+
mock.expects(expectations)
|
|
45
|
+
mock
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# :call-seq: stub(name, &block) -> mock object
|
|
49
|
+
# stub(stubbed_methods = {}, &block) -> mock object
|
|
50
|
+
# stub(name, stubbed_methods = {}, &block) -> mock object
|
|
51
|
+
#
|
|
52
|
+
# Creates a mock object.
|
|
53
|
+
#
|
|
54
|
+
# +name+ is a +String+ identifier for the mock object.
|
|
55
|
+
#
|
|
56
|
+
# +stubbed_methods+ is a +Hash+ with stubbed method name symbols as keys and corresponding return values as values.
|
|
57
|
+
# Note that (contrary to expectations set up by #mock) these expectations <b>need not</b> be fulfilled during the test.
|
|
58
|
+
# def test_product
|
|
59
|
+
# product = stub('ipod_product', :manufacturer => 'ipod', :price => 100)
|
|
60
|
+
# assert_equal 'ipod', product.manufacturer
|
|
61
|
+
# assert_equal 100, product.price
|
|
62
|
+
# # an error will not be raised even if Product#manufacturer and Product#price have not been called
|
|
63
|
+
# end
|
|
64
|
+
#
|
|
65
|
+
# +block+ is an optional block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
|
|
66
|
+
# def test_product
|
|
67
|
+
# product = stub('ipod_product') do
|
|
68
|
+
# stubs(:manufacturer).returns('ipod')
|
|
69
|
+
# stubs(:price).returns(100)
|
|
70
|
+
# end
|
|
71
|
+
# assert_equal 'ipod', product.manufacturer
|
|
72
|
+
# assert_equal 100, product.price
|
|
73
|
+
# # an error will not be raised even if Product#manufacturer and Product#price have not been called
|
|
74
|
+
# end
|
|
75
|
+
def stub(*arguments, &block)
|
|
76
|
+
name = arguments.shift if arguments.first.is_a?(String)
|
|
77
|
+
expectations = arguments.shift || {}
|
|
78
|
+
stub = name ? Mockery.instance.named_mock(name, &block) : Mockery.instance.unnamed_mock(&block)
|
|
79
|
+
stub.stubs(expectations)
|
|
80
|
+
stub
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# :call-seq: stub_everything(name, &block) -> mock object
|
|
84
|
+
# stub_everything(stubbed_methods = {}, &block) -> mock object
|
|
85
|
+
# stub_everything(name, stubbed_methods = {}, &block) -> mock object
|
|
86
|
+
#
|
|
87
|
+
# Creates a mock object that accepts calls to any method.
|
|
88
|
+
#
|
|
89
|
+
# By default it will return +nil+ for any method call.
|
|
90
|
+
#
|
|
91
|
+
# +block+ is a block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
|
|
92
|
+
#
|
|
93
|
+
# +name+ and +stubbed_methods+ work in the same way as for #stub.
|
|
94
|
+
# def test_product
|
|
95
|
+
# product = stub_everything('ipod_product', :price => 100)
|
|
96
|
+
# assert_nil product.manufacturer
|
|
97
|
+
# assert_nil product.any_old_method
|
|
98
|
+
# assert_equal 100, product.price
|
|
99
|
+
# end
|
|
100
|
+
def stub_everything(*arguments, &block)
|
|
101
|
+
name = arguments.shift if arguments.first.is_a?(String)
|
|
102
|
+
expectations = arguments.shift || {}
|
|
103
|
+
stub = name ? Mockery.instance.named_mock(name, &block) : Mockery.instance.unnamed_mock(&block)
|
|
104
|
+
stub.stub_everything
|
|
105
|
+
stub.stubs(expectations)
|
|
106
|
+
stub
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# :call-seq: sequence(name) -> sequence
|
|
110
|
+
#
|
|
111
|
+
# Returns a new sequence that is used to constrain the order in which expectations can occur.
|
|
112
|
+
#
|
|
113
|
+
# Specify that an expected invocation must occur in within a named +sequence+ by using Expectation#in_sequence.
|
|
114
|
+
#
|
|
115
|
+
# See also Expectation#in_sequence.
|
|
116
|
+
# breakfast = sequence('breakfast')
|
|
117
|
+
#
|
|
118
|
+
# egg = mock('egg')
|
|
119
|
+
# egg.expects(:crack).in_sequence(breakfast)
|
|
120
|
+
# egg.expects(:fry).in_sequence(breakfast)
|
|
121
|
+
# egg.expects(:eat).in_sequence(breakfast)
|
|
122
|
+
def sequence(name)
|
|
123
|
+
Sequence.new(name)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# :call-seq: states(name) -> state_machine
|
|
127
|
+
#
|
|
128
|
+
# Returns a new +state_machine+ that is used to constrain the order in which expectations can occur.
|
|
129
|
+
#
|
|
130
|
+
# Specify the initial +state+ of the +state_machine+ by using StateMachine#starts_as.
|
|
131
|
+
#
|
|
132
|
+
# Specify that an expected invocation should change the +state+ of the +state_machine+ by using Expectation#then.
|
|
133
|
+
#
|
|
134
|
+
# Specify that an expected invocation should be constrained to occur within a particular +state+ by using Expectation#when.
|
|
135
|
+
#
|
|
136
|
+
# A test can contain multiple +state_machines+.
|
|
137
|
+
#
|
|
138
|
+
# See also Expectation#then, Expectation#when and StateMachine.
|
|
139
|
+
# power = states('power').starts_as('off')
|
|
140
|
+
#
|
|
141
|
+
# radio = mock('radio')
|
|
142
|
+
# radio.expects(:switch_on).then(power.is('on'))
|
|
143
|
+
# radio.expects(:select_channel).with('BBC Radio 4').when(power.is('on'))
|
|
144
|
+
# radio.expects(:adjust_volume).with(+5).when(power.is('on'))
|
|
145
|
+
# radio.expects(:select_channel).with('BBC World Service').when(power.is('on'))
|
|
146
|
+
# radio.expects(:adjust_volume).with(-5).when(power.is('on'))
|
|
147
|
+
# radio.expects(:switch_off).then(power.is('off'))
|
|
148
|
+
def states(name)
|
|
149
|
+
Mockery.instance.new_state_machine(name)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def mocha_setup # :nodoc:
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def mocha_verify(assertion_counter = nil) # :nodoc:
|
|
156
|
+
Mockery.instance.verify(assertion_counter)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def mocha_teardown # :nodoc:
|
|
160
|
+
Mockery.instance.teardown
|
|
161
|
+
Mockery.reset_instance
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
module Mocha # :nodoc:
|
|
2
|
+
|
|
3
|
+
# A state machine that is used to constrain the order of invocations.
|
|
4
|
+
# An invocation can be constrained to occur when a state is, or is_not, active.
|
|
5
|
+
class StateMachine
|
|
6
|
+
|
|
7
|
+
class State # :nodoc:
|
|
8
|
+
|
|
9
|
+
def initialize(state_machine, state)
|
|
10
|
+
@state_machine, @state = state_machine, state
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def activate
|
|
14
|
+
@state_machine.current_state = @state
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def active?
|
|
18
|
+
@state_machine.current_state == @state
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def mocha_inspect
|
|
22
|
+
"#{@state_machine.name} is #{@state.mocha_inspect}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class StatePredicate # :nodoc:
|
|
28
|
+
|
|
29
|
+
def initialize(state_machine, state)
|
|
30
|
+
@state_machine, @state = state_machine, state
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def active?
|
|
34
|
+
@state_machine.current_state != @state
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def mocha_inspect
|
|
38
|
+
"#{@state_machine.name} is not #{@state.mocha_inspect}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
attr_reader :name # :nodoc:
|
|
44
|
+
|
|
45
|
+
attr_accessor :current_state # :nodoc:
|
|
46
|
+
|
|
47
|
+
def initialize(name) # :nodoc:
|
|
48
|
+
@name = name
|
|
49
|
+
@current_state = nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# :call-seq: starts_as(initial_state) -> state_machine
|
|
53
|
+
#
|
|
54
|
+
# Put the +state_machine+ into the +initial_state+.
|
|
55
|
+
def starts_as(initial_state)
|
|
56
|
+
become(initial_state)
|
|
57
|
+
self
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# :call-seq: become(next_state)
|
|
61
|
+
#
|
|
62
|
+
# Put the +state_machine+ into the +next_state+.
|
|
63
|
+
def become(next_state)
|
|
64
|
+
@current_state = next_state
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# :call-seq: is(state)
|
|
68
|
+
#
|
|
69
|
+
# Determines whether the +state_machine+ is in the specified +state+.
|
|
70
|
+
def is(state)
|
|
71
|
+
State.new(self, state)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# :call-seq: is_not(state)
|
|
75
|
+
#
|
|
76
|
+
# Determines whether the +state_machine+ is not in the specified +state+.
|
|
77
|
+
def is_not(state)
|
|
78
|
+
StatePredicate.new(self, state)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def mocha_inspect # :nodoc:
|
|
82
|
+
if @current_state
|
|
83
|
+
"#{@name} is #{@current_state.mocha_inspect}"
|
|
84
|
+
else
|
|
85
|
+
"#{@name} has no current state"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'mocha/backtrace_filter'
|
|
2
|
+
|
|
3
|
+
module Mocha # :nodoc:
|
|
4
|
+
|
|
5
|
+
# Exception raised when an action prevented by Configuration#prevent is attempted.
|
|
6
|
+
class StubbingError < StandardError
|
|
7
|
+
|
|
8
|
+
def initialize(message = nil, backtrace = []) # :nodoc:
|
|
9
|
+
super(message)
|
|
10
|
+
filter = BacktraceFilter.new
|
|
11
|
+
set_backtrace(filter.filtered(backtrace))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require 'mocha/expectation_error'
|
|
2
|
+
|
|
3
|
+
module Mocha
|
|
4
|
+
|
|
5
|
+
module TestCaseAdapter
|
|
6
|
+
|
|
7
|
+
class AssertionCounter
|
|
8
|
+
|
|
9
|
+
def initialize(test_result)
|
|
10
|
+
@test_result = test_result
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def increment
|
|
14
|
+
@test_result.add_assertion
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.included(base)
|
|
20
|
+
if RUBY_VERSION < '1.8.6'
|
|
21
|
+
base.class_eval do
|
|
22
|
+
|
|
23
|
+
alias_method :run_before_mocha_test_case_adapter, :run
|
|
24
|
+
|
|
25
|
+
def run(result)
|
|
26
|
+
assertion_counter = AssertionCounter.new(result)
|
|
27
|
+
yield(Test::Unit::TestCase::STARTED, name)
|
|
28
|
+
@_result = result
|
|
29
|
+
begin
|
|
30
|
+
begin
|
|
31
|
+
setup
|
|
32
|
+
__send__(@method_name)
|
|
33
|
+
mocha_verify(assertion_counter)
|
|
34
|
+
rescue Mocha::ExpectationError => e
|
|
35
|
+
add_failure(e.message, e.backtrace)
|
|
36
|
+
rescue Test::Unit::AssertionFailedError => e
|
|
37
|
+
add_failure(e.message, e.backtrace)
|
|
38
|
+
rescue StandardError, ScriptError
|
|
39
|
+
add_error($!)
|
|
40
|
+
ensure
|
|
41
|
+
begin
|
|
42
|
+
teardown
|
|
43
|
+
rescue Test::Unit::AssertionFailedError => e
|
|
44
|
+
add_failure(e.message, e.backtrace)
|
|
45
|
+
rescue StandardError, ScriptError
|
|
46
|
+
add_error($!)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
ensure
|
|
50
|
+
mocha_teardown
|
|
51
|
+
end
|
|
52
|
+
result.add_run
|
|
53
|
+
yield(Test::Unit::TestCase::FINISHED, name)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
else
|
|
58
|
+
base.class_eval do
|
|
59
|
+
|
|
60
|
+
alias_method :run_before_mocha_test_case_adapter, :run
|
|
61
|
+
|
|
62
|
+
def run(result)
|
|
63
|
+
assertion_counter = AssertionCounter.new(result)
|
|
64
|
+
yield(Test::Unit::TestCase::STARTED, name)
|
|
65
|
+
@_result = result
|
|
66
|
+
begin
|
|
67
|
+
begin
|
|
68
|
+
setup
|
|
69
|
+
__send__(@method_name)
|
|
70
|
+
mocha_verify(assertion_counter)
|
|
71
|
+
rescue Mocha::ExpectationError => e
|
|
72
|
+
add_failure(e.message, e.backtrace)
|
|
73
|
+
rescue Test::Unit::AssertionFailedError => e
|
|
74
|
+
add_failure(e.message, e.backtrace)
|
|
75
|
+
rescue Exception
|
|
76
|
+
raise if Test::Unit::TestCase::PASSTHROUGH_EXCEPTIONS.include? $!.class
|
|
77
|
+
add_error($!)
|
|
78
|
+
ensure
|
|
79
|
+
begin
|
|
80
|
+
teardown
|
|
81
|
+
rescue Test::Unit::AssertionFailedError => e
|
|
82
|
+
add_failure(e.message, e.backtrace)
|
|
83
|
+
rescue Exception
|
|
84
|
+
raise if Test::Unit::TestCase::PASSTHROUGH_EXCEPTIONS.include? $!.class
|
|
85
|
+
add_error($!)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
ensure
|
|
89
|
+
mocha_teardown
|
|
90
|
+
end
|
|
91
|
+
result.add_run
|
|
92
|
+
yield(Test::Unit::TestCase::FINISHED, name)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Mocha # :nodoc:
|
|
2
|
+
|
|
3
|
+
class UnexpectedInvocation
|
|
4
|
+
|
|
5
|
+
def initialize(mock, symbol, *arguments)
|
|
6
|
+
@mock = mock
|
|
7
|
+
@method_matcher = MethodMatcher.new(symbol)
|
|
8
|
+
@parameters_matcher = ParametersMatcher.new(arguments)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def to_s
|
|
12
|
+
method_signature = "#{@mock.mocha_inspect}.#{@method_matcher.mocha_inspect}#{@parameters_matcher.mocha_inspect}"
|
|
13
|
+
"unexpected invocation: #{method_signature}\n"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'mocha/no_yields'
|
|
2
|
+
require 'mocha/single_yield'
|
|
3
|
+
require 'mocha/multiple_yields'
|
|
4
|
+
|
|
5
|
+
module Mocha # :nodoc:
|
|
6
|
+
|
|
7
|
+
class YieldParameters # :nodoc:
|
|
8
|
+
|
|
9
|
+
def initialize
|
|
10
|
+
@parameter_groups = []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def next_invocation
|
|
14
|
+
case @parameter_groups.length
|
|
15
|
+
when 0 then NoYields.new
|
|
16
|
+
when 1 then @parameter_groups.first
|
|
17
|
+
else @parameter_groups.shift
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def add(*parameters)
|
|
22
|
+
@parameter_groups << SingleYield.new(*parameters)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def multiple_add(*parameter_groups)
|
|
26
|
+
@parameter_groups << MultipleYields.new(*parameter_groups)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'mocha_standalone'
|
|
2
|
+
require 'mocha/configuration'
|
|
3
|
+
|
|
4
|
+
if RUBY_VERSION < '1.9'
|
|
5
|
+
begin
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
begin
|
|
8
|
+
gem 'minitest', '>=1.3'
|
|
9
|
+
require 'minitest/unit'
|
|
10
|
+
rescue Gem::LoadError
|
|
11
|
+
# Compatible version of MiniTest gem not available
|
|
12
|
+
end
|
|
13
|
+
rescue LoadError
|
|
14
|
+
# RubyGems not available
|
|
15
|
+
end
|
|
16
|
+
else
|
|
17
|
+
begin
|
|
18
|
+
require 'minitest/unit'
|
|
19
|
+
rescue LoadError
|
|
20
|
+
# MiniTest not available
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if defined?(MiniTest)
|
|
25
|
+
require 'mocha/mini_test_adapter'
|
|
26
|
+
|
|
27
|
+
module MiniTest
|
|
28
|
+
class Unit
|
|
29
|
+
class TestCase
|
|
30
|
+
include Mocha::Standalone
|
|
31
|
+
include Mocha::MiniTestCaseAdapter
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
require 'mocha/test_case_adapter'
|
|
38
|
+
require 'test/unit/testcase'
|
|
39
|
+
|
|
40
|
+
unless Test::Unit::TestCase.ancestors.include?(Mocha::Standalone)
|
|
41
|
+
module Test
|
|
42
|
+
module Unit
|
|
43
|
+
class TestCase
|
|
44
|
+
include Mocha::Standalone
|
|
45
|
+
include Mocha::TestCaseAdapter
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
|
|
3
|
+
# require Rails testing framework
|
|
4
|
+
require File.dirname(__FILE__) + '/../../../../test/test_helper'
|
|
5
|
+
|
|
6
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
|
7
|
+
require File.dirname(__FILE__) + '/../init'
|
|
8
|
+
|
|
9
|
+
# We need mocha (http://mocha.rubyforge.org/) to stub out Net::HTTP in the test
|
|
10
|
+
# otherwise people testing this library would need to install a MediaWiki on
|
|
11
|
+
# their own!
|
|
12
|
+
$:.unshift File.dirname(__FILE__) + '/vendor/mocha-0.9.5/lib'
|
|
13
|
+
require 'mocha'
|
|
14
|
+
|
|
15
|
+
# This class contains test cases for the WikiMedia import plugin
|
|
16
|
+
class WikiImportTest < Test::Unit::TestCase
|
|
17
|
+
# Reference strings for assertions
|
|
18
|
+
WIKI_PAGE=<<EOW#nodoc
|
|
19
|
+
=Title=
|
|
20
|
+
Directory Listings
|
|
21
|
+
|
|
22
|
+
=Impact=
|
|
23
|
+
Low
|
|
24
|
+
|
|
25
|
+
=Probability=
|
|
26
|
+
Low
|
|
27
|
+
|
|
28
|
+
=Description=
|
|
29
|
+
Some directories on the server were configured with directory listing enabled.
|
|
30
|
+
|
|
31
|
+
This may leak information about the website by revealing files that it uses
|
|
32
|
+
without requiring the application context in which they are accessed.
|
|
33
|
+
|
|
34
|
+
=Recommendation=
|
|
35
|
+
|
|
36
|
+
Disable directory listings if possible.
|
|
37
|
+
EOW
|
|
38
|
+
DRADIS_NOTE=<<EON#nodoc
|
|
39
|
+
#[Title]#
|
|
40
|
+
Directory Listings
|
|
41
|
+
|
|
42
|
+
#[Impact]#
|
|
43
|
+
Low
|
|
44
|
+
|
|
45
|
+
#[Probability]#
|
|
46
|
+
Low
|
|
47
|
+
|
|
48
|
+
#[Description]#
|
|
49
|
+
Some directories on the server were configured with directory listing enabled.
|
|
50
|
+
|
|
51
|
+
This may leak information about the website by revealing files that it uses
|
|
52
|
+
without requiring the application context in which they are accessed.
|
|
53
|
+
|
|
54
|
+
#[Recommendation]#
|
|
55
|
+
|
|
56
|
+
Disable directory listings if possible.
|
|
57
|
+
EON
|
|
58
|
+
|
|
59
|
+
WIKI_API_RESPONSE=<<EOX
|
|
60
|
+
<?xml version="1.0"?><api><query><pages><page pageid="2" ns="0" title="Directory Listings"><revisions><rev>=Title=
|
|
61
|
+
Directory Listings
|
|
62
|
+
|
|
63
|
+
=Impact=
|
|
64
|
+
Low
|
|
65
|
+
|
|
66
|
+
=Probability=
|
|
67
|
+
Low
|
|
68
|
+
|
|
69
|
+
=Description=
|
|
70
|
+
Some directories on the server were configured with directory listing enabled.
|
|
71
|
+
|
|
72
|
+
This may leak information about the website by revealing files that it uses
|
|
73
|
+
without requiring the application context in which they are accessed.
|
|
74
|
+
|
|
75
|
+
=Recommendation=
|
|
76
|
+
|
|
77
|
+
Disable directory listings if possible.
|
|
78
|
+
</rev></revisions></page></pages></query></api>
|
|
79
|
+
EOX
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# At some point in the import process we need to translate from
|
|
83
|
+
# wiki-formatted text into our standard format for notes (see
|
|
84
|
+
# Note#fields).
|
|
85
|
+
def test_wiki_to_dradis_fields
|
|
86
|
+
assert_equal( DRADIS_NOTE, WikiImport::fields_from_wikitext(WIKI_PAGE) )
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Connect to a remote wiki, search for a specific string and parse the output
|
|
90
|
+
# into the format expected by the framework.
|
|
91
|
+
def test_pull_from_wiki
|
|
92
|
+
params = { :query => 'directory' }
|
|
93
|
+
|
|
94
|
+
# mocha stubs for Net::HTTP. WIKI_API_RESPONSE contains a fictional
|
|
95
|
+
# response by a MediaWiki server. This will be parsed by the filter to
|
|
96
|
+
# produce a dradis-formated note
|
|
97
|
+
response = mock
|
|
98
|
+
response.expects(:body).returns(WIKI_API_RESPONSE)
|
|
99
|
+
http = mock
|
|
100
|
+
http.expects(:get).returns(response)
|
|
101
|
+
Net::HTTP.stubs(:start).yields( http )
|
|
102
|
+
|
|
103
|
+
expected = [ {:title => 'Directory Listings', :description => DRADIS_NOTE} ]
|
|
104
|
+
assert_equal( expected, WikiImport::Filters::FullTextSearch.run(params) )
|
|
105
|
+
end
|
|
106
|
+
end
|