caricature 0.7.5 → 0.7.6
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/README.rdoc +97 -97
- data/Rakefile +309 -310
- data/caricature.gemspec +123 -110
- data/lib/caricature/bacon/integration.rb +75 -75
- data/lib/caricature/bacon.rb +2 -2
- data/lib/caricature/clr/descriptor.rb +159 -159
- data/lib/caricature/clr/event_verification.rb +56 -56
- data/lib/caricature/clr/expectation.rb +100 -100
- data/lib/caricature/clr/isolation.rb +78 -78
- data/lib/caricature/clr/isolator.rb +252 -252
- data/lib/caricature/clr/messenger.rb +51 -49
- data/lib/caricature/clr/method_call_recorder.rb +96 -96
- data/lib/caricature/expectation.rb +1 -1
- data/lib/caricature/method_call_recorder.rb +3 -3
- data/lib/caricature/rspec/integration.rb +118 -118
- data/lib/caricature/version.rb +5 -5
- data/lib/caricature.rb +25 -25
- data/spec/bacon/integration/callback_spec.rb +156 -156
- data/spec/bacon/integration/clr_to_clr_spec.rb +325 -253
- data/spec/bacon/integration/event_spec.rb +97 -97
- data/spec/bacon/integration/indexer_spec.rb +27 -27
- data/spec/bacon/spec_helper.rb +4 -4
- data/spec/bacon/unit/descriptor_spec.rb +212 -212
- data/spec/bacon/unit/sword_spec.rb +39 -39
- data/spec/bacon/unit/verification_spec.rb +103 -103
- data/spec/bin/ClrModels.dll +0 -0
- data/spec/bin/ClrModels.dll.mdb +0 -0
- data/spec/fixtures/ExplodingCar.cs +56 -0
- data/spec/fixtures/ExposedChangedSubscriber.cs +26 -0
- data/spec/fixtures/ExposingWarrior.cs +58 -0
- data/spec/fixtures/IExplodingWarrior.cs +10 -0
- data/spec/fixtures/IExposing.cs +9 -0
- data/spec/fixtures/IExposingBridge.cs +9 -0
- data/spec/fixtures/IExposingWarrior.cs +8 -0
- data/spec/fixtures/IHaveAnIndexer.cs +8 -0
- data/spec/fixtures/IWarrior.cs +13 -0
- data/spec/fixtures/IWeapon.cs +9 -0
- data/spec/fixtures/IndexerCaller.cs +17 -0
- data/spec/fixtures/IndexerContained.cs +20 -0
- data/spec/fixtures/MyClassWithAStatic.cs +16 -0
- data/spec/fixtures/Ninja.cs +34 -0
- data/spec/fixtures/Samurai.cs +29 -0
- data/spec/fixtures/StaticCaller.cs +12 -0
- data/spec/fixtures/Sword.cs +16 -0
- data/spec/fixtures/SwordWithStatics.cs +19 -0
- data/spec/fixtures/clr_interaction.rb +61 -0
- data/spec/fixtures/dagger.rb +11 -0
- data/spec/fixtures/dagger_with_class_members.rb +11 -0
- data/spec/fixtures/sheath.rb +19 -0
- data/spec/fixtures/soldier.rb +29 -0
- data/spec/fixtures/soldier_with_class_members.rb +7 -0
- data/spec/fixtures/swift_cleanup_crew.rb +21 -0
- data/spec/fixtures/with_class_methods.rb +11 -0
- data/spec/{models → models.notused}/ClrModels.cs +241 -241
- data/spec/{models → models.notused}/ruby_models.rb +150 -150
- data/spec/rspec/integration/callback_spec.rb +156 -156
- data/spec/rspec/integration/clr_to_clr_spec.rb +254 -254
- data/spec/rspec/integration/clr_to_ruby_spec.rb +227 -227
- data/spec/rspec/integration/indexer_spec.rb +27 -27
- data/spec/rspec/integration/ruby_to_ruby_spec.rb +271 -271
- data/spec/rspec/spec_helper.rb +12 -12
- data/spec/rspec/unit/core_ext_spec.rb +87 -87
- data/spec/rspec/unit/descriptor_spec.rb +210 -210
- data/spec/rspec/unit/event_spec.rb +16 -16
- data/spec/rspec/unit/expectation_spec.rb +300 -300
- data/spec/rspec/unit/interop_spec.rb +29 -29
- data/spec/rspec/unit/isolation_spec.rb +86 -86
- data/spec/rspec/unit/isolator_spec.rb +219 -219
- data/spec/rspec/unit/messaging_spec.rb +310 -310
- data/spec/rspec/unit/method_call_spec.rb +342 -342
- data/spec/rspec/unit/sword_spec.rb +39 -39
- data/spec/rspec/unit/verification_spec.rb +103 -103
- data/spec/spec_helper.rb +16 -15
- metadata +42 -11
@@ -1,104 +1,104 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
-
|
3
|
-
describe "Caricature::Verification" do
|
4
|
-
|
5
|
-
describe "Matching" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@rec = Caricature::MethodCallRecorder.new
|
9
|
-
@ver = Caricature::Verification.new(:my_method, @rec)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "Default initialisation" do
|
13
|
-
|
14
|
-
it "should allow any arguments" do
|
15
|
-
@ver.any_args?.should.be.true?
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should match the provided method name when no arguments have been given" do
|
19
|
-
@ver.matches?(:my_method).should.be.true?
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should match the method name when arguments have been given" do
|
23
|
-
@ver.matches?(:my_method, 1, 3, 4).should.be.true?
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "when initialized with and constrained by arguments" do
|
29
|
-
|
30
|
-
before do
|
31
|
-
@ver.with(1, 3, 6)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should match the provided method name when the correct arguments are given" do
|
35
|
-
@ver.matches?(:my_method, 1, 3, 6).should.be.true?
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should not match the method name when the arguments are not correct" do
|
39
|
-
@ver.matches?(:my_method, 1, 3, 3).should.be.false?
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should not match the method name when no arguments have been given" do
|
43
|
-
@ver.matches?(:my_method).should.be.false?
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "when initialized with and not constrained by arguments" do
|
49
|
-
|
50
|
-
before do
|
51
|
-
@ver.with(1, 3, 6).allow_any_arguments
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should match the provided method name when the correct arguments are given" do
|
55
|
-
@ver.matches?(:my_method, 1, 3, 6).should.be.true?
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should match the method name when the arguments are not correct" do
|
59
|
-
@ver.matches?(:my_method, 1, 3, 3).should.be.true?
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should match the method name when no arguments have been given" do
|
63
|
-
@ver.matches?(:my_method).should.be.true?
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "Verifying" do
|
71
|
-
|
72
|
-
before do
|
73
|
-
@rec = Caricature::MethodCallRecorder.new
|
74
|
-
@rec.record_call :my_method
|
75
|
-
@rec.record_call :my_method, :instance, nil, 1, 2, 3
|
76
|
-
@rec.record_call :another_method
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should be successful with any arguments allowed" do
|
81
|
-
ver = Caricature::Verification.new(:my_method, @rec)
|
82
|
-
ver.should.be.successful
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should be successful with a correct set of arguments provided for my_method" do
|
86
|
-
ver = Caricature::Verification.new(:my_method, @rec)
|
87
|
-
ver.with 1, 2, 3
|
88
|
-
ver.should.be.successful
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should be unsuccessful when a wrong set of arguments is provided" do
|
92
|
-
ver = Caricature::Verification.new(:my_method, @rec)
|
93
|
-
ver.with 1, 5, 7
|
94
|
-
ver.should.not.be.successful
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should be unsuccessful when the wrong method name is provided" do
|
98
|
-
ver = Caricature::Verification.new(:some_method, @rec)
|
99
|
-
ver.should.not.be.successful
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe "Caricature::Verification" do
|
4
|
+
|
5
|
+
describe "Matching" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@rec = Caricature::MethodCallRecorder.new
|
9
|
+
@ver = Caricature::Verification.new(:my_method, @rec)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "Default initialisation" do
|
13
|
+
|
14
|
+
it "should allow any arguments" do
|
15
|
+
@ver.any_args?.should.be.true?
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should match the provided method name when no arguments have been given" do
|
19
|
+
@ver.matches?(:my_method).should.be.true?
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should match the method name when arguments have been given" do
|
23
|
+
@ver.matches?(:my_method, 1, 3, 4).should.be.true?
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "when initialized with and constrained by arguments" do
|
29
|
+
|
30
|
+
before do
|
31
|
+
@ver.with(1, 3, 6)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should match the provided method name when the correct arguments are given" do
|
35
|
+
@ver.matches?(:my_method, 1, 3, 6).should.be.true?
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not match the method name when the arguments are not correct" do
|
39
|
+
@ver.matches?(:my_method, 1, 3, 3).should.be.false?
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not match the method name when no arguments have been given" do
|
43
|
+
@ver.matches?(:my_method).should.be.false?
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "when initialized with and not constrained by arguments" do
|
49
|
+
|
50
|
+
before do
|
51
|
+
@ver.with(1, 3, 6).allow_any_arguments
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should match the provided method name when the correct arguments are given" do
|
55
|
+
@ver.matches?(:my_method, 1, 3, 6).should.be.true?
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should match the method name when the arguments are not correct" do
|
59
|
+
@ver.matches?(:my_method, 1, 3, 3).should.be.true?
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should match the method name when no arguments have been given" do
|
63
|
+
@ver.matches?(:my_method).should.be.true?
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "Verifying" do
|
71
|
+
|
72
|
+
before do
|
73
|
+
@rec = Caricature::MethodCallRecorder.new
|
74
|
+
@rec.record_call :my_method
|
75
|
+
@rec.record_call :my_method, :instance, nil, 1, 2, 3
|
76
|
+
@rec.record_call :another_method
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should be successful with any arguments allowed" do
|
81
|
+
ver = Caricature::Verification.new(:my_method, @rec)
|
82
|
+
ver.should.be.successful
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should be successful with a correct set of arguments provided for my_method" do
|
86
|
+
ver = Caricature::Verification.new(:my_method, @rec)
|
87
|
+
ver.with 1, 2, 3
|
88
|
+
ver.should.be.successful
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should be unsuccessful when a wrong set of arguments is provided" do
|
92
|
+
ver = Caricature::Verification.new(:my_method, @rec)
|
93
|
+
ver.with 1, 5, 7
|
94
|
+
ver.should.not.be.successful
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should be unsuccessful when the wrong method name is provided" do
|
98
|
+
ver = Caricature::Verification.new(:some_method, @rec)
|
99
|
+
ver.should.not.be.successful
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
104
|
end
|
data/spec/bin/ClrModels.dll
CHANGED
Binary file
|
Binary file
|
@@ -0,0 +1,56 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class ExplodingCar {
|
6
|
+
|
7
|
+
public virtual event EventHandler<EventArgs> OnExploded;
|
8
|
+
|
9
|
+
public void Explode(){
|
10
|
+
// do logic here to make car explode
|
11
|
+
TriggerOnExploded();
|
12
|
+
}
|
13
|
+
|
14
|
+
protected virtual void TriggerOnExploded(){
|
15
|
+
var handler = OnExploded;
|
16
|
+
if(handler != null){
|
17
|
+
handler.Invoke(this, EventArgs.Empty);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
public class CleanupCrew : IDisposable{
|
23
|
+
private bool _isDisposed = false;
|
24
|
+
private ExplodingCar _car;
|
25
|
+
|
26
|
+
public CleanupCrew(ExplodingCar car){
|
27
|
+
_car = car;
|
28
|
+
//don't use anonymous delegates or lambda's
|
29
|
+
_car.OnExploded += Handle_carOnExploded;
|
30
|
+
}
|
31
|
+
|
32
|
+
void Handle_carOnExploded (object sender, EventArgs e)
|
33
|
+
{
|
34
|
+
// Do logic here when car exploded. Clean street, repair buildings etc.
|
35
|
+
}
|
36
|
+
|
37
|
+
public void Dispose(){
|
38
|
+
Dispose(true);
|
39
|
+
// Keep this here for subclasses that may use unmanaged resources
|
40
|
+
GC.SuppressFinalize(this);
|
41
|
+
}
|
42
|
+
|
43
|
+
protected virtual void Dispose(bool isDisposing){
|
44
|
+
if(!_isDisposed){
|
45
|
+
if(isDisposing){
|
46
|
+
// detach event handlers here etc.
|
47
|
+
_car.OnExploded -= Handle_carOnExploded;
|
48
|
+
|
49
|
+
}
|
50
|
+
_isDisposed = true;
|
51
|
+
// unmanaged resources here.
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
}
|
56
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class ExposedChangedSubscriber{
|
6
|
+
|
7
|
+
private readonly IExposingBridge _warrior;
|
8
|
+
|
9
|
+
public ExposedChangedSubscriber(IExposingBridge warrior){
|
10
|
+
_warrior = warrior;
|
11
|
+
_warrior.OnIsExposedChanged += OnExposedChanged;
|
12
|
+
}
|
13
|
+
|
14
|
+
public int Counter { get; set; }
|
15
|
+
public object Sender {get; set; }
|
16
|
+
public EventArgs Args { get; set; }
|
17
|
+
|
18
|
+
private void OnExposedChanged(object sender, EventArgs args){
|
19
|
+
Counter++;
|
20
|
+
Sender = sender;
|
21
|
+
Args = args;
|
22
|
+
}
|
23
|
+
|
24
|
+
}
|
25
|
+
|
26
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class ExposingWarrior : IExposingWarrior{
|
6
|
+
private readonly int _id;
|
7
|
+
|
8
|
+
public string Name { get; set; }
|
9
|
+
public int Id { get { return _id; } }
|
10
|
+
|
11
|
+
public int Attack(IWarrior target, IWeapon weapon){
|
12
|
+
return weapon.Attack(target);
|
13
|
+
}
|
14
|
+
|
15
|
+
public bool IsKilledBy(IWeapon weapon)
|
16
|
+
{
|
17
|
+
return weapon.Damage() > 3;
|
18
|
+
}
|
19
|
+
|
20
|
+
public virtual event EventHandler<EventArgs> OnIsExposedChanged;
|
21
|
+
public bool IsExposed {get; set; }
|
22
|
+
|
23
|
+
|
24
|
+
public event EventHandler<EventArgs> OnIsAliveChanged;
|
25
|
+
|
26
|
+
public void Die(){
|
27
|
+
OnIsAliveChanged(this, EventArgs.Empty);
|
28
|
+
}
|
29
|
+
|
30
|
+
public static event EventHandler<EventArgs> OnCountChanged;
|
31
|
+
|
32
|
+
public static void ChangeCount(){
|
33
|
+
OnCountChanged(null, EventArgs.Empty);
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
public void SomeMethod(){}
|
38
|
+
public void OwnMethod(){
|
39
|
+
|
40
|
+
}
|
41
|
+
|
42
|
+
private int _life = 10;
|
43
|
+
public int SurviveAttackWith(IWeapon weapon){
|
44
|
+
return _life - weapon.Damage();
|
45
|
+
}
|
46
|
+
|
47
|
+
public void Explode(){
|
48
|
+
IsExposed = !IsExposed;
|
49
|
+
var handler = OnIsExposedChanged;
|
50
|
+
if(handler != null){
|
51
|
+
handler(this, EventArgs.Empty);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
public bool HasEventSubscriptions{ get { return OnIsExposedChanged != null; } }
|
56
|
+
}
|
57
|
+
|
58
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public interface IWarrior
|
6
|
+
{
|
7
|
+
int Id { get; }
|
8
|
+
string Name { get; set; }
|
9
|
+
bool IsKilledBy(IWeapon weapon);
|
10
|
+
int Attack(IWarrior target, IWeapon weapon);
|
11
|
+
int SurviveAttackWith(IWeapon weapon);
|
12
|
+
}
|
13
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class IndexerCaller{
|
6
|
+
|
7
|
+
public string CallIndexOnClass(IndexerContained klass, string name){
|
8
|
+
return klass[name];
|
9
|
+
}
|
10
|
+
|
11
|
+
public string CallIndexOnInterface(IHaveAnIndexer klass, string name){
|
12
|
+
return klass[name];
|
13
|
+
}
|
14
|
+
|
15
|
+
}
|
16
|
+
|
17
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class IndexerContained{
|
6
|
+
|
7
|
+
private Dictionary<string, string> _inner = new Dictionary<string, string>{
|
8
|
+
{ "key1", "value1" },
|
9
|
+
{ "key2", "value2" },
|
10
|
+
{ "key3", "value3" },
|
11
|
+
{ "key4", "value4" }
|
12
|
+
};
|
13
|
+
|
14
|
+
public virtual string this[string name]{
|
15
|
+
get { return _inner[name]; }
|
16
|
+
set { _inner[name] = value; }
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class MyClassWithAStatic{
|
6
|
+
|
7
|
+
public string HelloWorld(){
|
8
|
+
return "Hello World!";
|
9
|
+
}
|
10
|
+
|
11
|
+
public static string GoodByeWorld(){
|
12
|
+
return "Goodbye world!";
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class Ninja : IWarrior{
|
6
|
+
|
7
|
+
public Ninja(){
|
8
|
+
Name = "Tony the Ninja";
|
9
|
+
_id = 1;
|
10
|
+
}
|
11
|
+
|
12
|
+
private readonly int _id;
|
13
|
+
|
14
|
+
public string Name { get; set; }
|
15
|
+
public int Id { get { return _id; } }
|
16
|
+
|
17
|
+
public int Attack(IWarrior target, IWeapon weapon){
|
18
|
+
return weapon.Attack(target);
|
19
|
+
}
|
20
|
+
|
21
|
+
public bool IsKilledBy(IWeapon weapon)
|
22
|
+
{
|
23
|
+
return weapon.Damage() > 3;
|
24
|
+
}
|
25
|
+
|
26
|
+
private int _life = 10;
|
27
|
+
public virtual int SurviveAttackWith(IWeapon weapon){
|
28
|
+
return _life - weapon.Damage();
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
}
|
33
|
+
|
34
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public sealed class Samurai : IWarrior{
|
6
|
+
|
7
|
+
private readonly int _id;
|
8
|
+
|
9
|
+
public string Name { get; set; }
|
10
|
+
public int Id { get { return _id; } }
|
11
|
+
|
12
|
+
public int Attack(IWarrior target, IWeapon weapon){
|
13
|
+
return weapon.Attack(target);
|
14
|
+
}
|
15
|
+
|
16
|
+
public bool IsKilledBy(IWeapon weapon)
|
17
|
+
{
|
18
|
+
return weapon.Damage() > 5;
|
19
|
+
}
|
20
|
+
|
21
|
+
private int _life = 10;
|
22
|
+
public int SurviveAttackWith(IWeapon weapon){
|
23
|
+
return _life - weapon.Damage();
|
24
|
+
}
|
25
|
+
|
26
|
+
|
27
|
+
}
|
28
|
+
|
29
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class Sword : IWeapon {
|
6
|
+
|
7
|
+
public virtual int Attack(IWarrior warrior){
|
8
|
+
return warrior.SurviveAttackWith(this);
|
9
|
+
}
|
10
|
+
|
11
|
+
public int Damage(){
|
12
|
+
return 4;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
|
4
|
+
namespace ClrModels {
|
5
|
+
public class SwordWithStatics : Sword{
|
6
|
+
|
7
|
+
static SwordWithStatics(){
|
8
|
+
ClassNaming = "Sword with statics";
|
9
|
+
}
|
10
|
+
|
11
|
+
public SwordWithStatics(){ SwordName = "Sword name for statics"; }
|
12
|
+
|
13
|
+
public void AnotherMethod(){}
|
14
|
+
public static void AStaticMethod(){}
|
15
|
+
public static string ClassNaming { get; set; }
|
16
|
+
public string SwordName{get; set;}
|
17
|
+
}
|
18
|
+
|
19
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module PureRubyModule
|
2
|
+
|
3
|
+
end
|
4
|
+
|
5
|
+
module RubyModuleIncludingModule
|
6
|
+
include PureRubyModule
|
7
|
+
end
|
8
|
+
|
9
|
+
class SubclassingRubyClass < Soldier
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
class ModuleIncludingClass
|
14
|
+
include RubyModuleIncludingModule
|
15
|
+
end
|
16
|
+
|
17
|
+
if defined? IRONRUBY_VERSION
|
18
|
+
|
19
|
+
module Caricature
|
20
|
+
|
21
|
+
module InterfaceIncludingModule
|
22
|
+
include ClrModels::IWarrior
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
module InterfaceUpTheWazoo
|
27
|
+
include InterfaceIncludingModule
|
28
|
+
end
|
29
|
+
|
30
|
+
class InterfaceIncludingClass
|
31
|
+
include ClrModels::IWarrior
|
32
|
+
|
33
|
+
attr_reader :id
|
34
|
+
attr_accessor :name
|
35
|
+
|
36
|
+
def is_killed_by(weapon)
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def attack(target, weapon)
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def survive_attack_with(weapon)
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
class SubClassingClrClass < ClrModels::Ninja
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class InterfaceUpTheWazooClass
|
55
|
+
include InterfaceUpTheWazoo
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|