phenomenal 0.9.0 → 0.11.11.24.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/LICENSE +1 -1
  2. data/README +4 -3
  3. data/Rakefile +0 -3
  4. data/demo.rb +24 -0
  5. data/demo_age.rb +89 -0
  6. data/demo_dsl.rb +28 -0
  7. data/lib/phenomenal.rb +2 -15
  8. data/lib/phenomenal/adaptation.rb +12 -22
  9. data/lib/phenomenal/context.rb +134 -127
  10. data/lib/phenomenal/dsl.rb +14 -41
  11. data/lib/phenomenal/logger.rb +1 -0
  12. data/lib/phenomenal/manager.rb +35 -117
  13. data/phenomenal.gemspec +15 -0
  14. data/{spec → test}/test_classes.rb +0 -3
  15. data/test/test_cop_adaptation.rb +168 -0
  16. data/test/test_cop_composition.rb +84 -0
  17. data/test/test_cop_conflictpolicy.rb +177 -0
  18. data/test/test_cop_infrastructure.rb +129 -0
  19. data/test_declaration.rb +18 -0
  20. metadata +29 -70
  21. data/lib/phenomenal/feature.rb +0 -8
  22. data/lib/phenomenal/relationships/context_relationships.rb +0 -22
  23. data/lib/phenomenal/relationships/dsl.rb +0 -18
  24. data/lib/phenomenal/relationships/feature_relationships.rb +0 -42
  25. data/lib/phenomenal/relationships/implication.rb +0 -35
  26. data/lib/phenomenal/relationships/relationship.rb +0 -42
  27. data/lib/phenomenal/relationships/relationships_manager.rb +0 -63
  28. data/lib/phenomenal/relationships/relationships_store.rb +0 -73
  29. data/lib/phenomenal/relationships/requirement.rb +0 -26
  30. data/lib/phenomenal/relationships/suggestion.rb +0 -41
  31. data/lib/phenomenal/version.rb +0 -3
  32. data/spec/adaptation_spec.rb +0 -64
  33. data/spec/behavior/adaptation_spec.rb +0 -5
  34. data/spec/behavior/combined_contexts_spec.rb +0 -5
  35. data/spec/behavior/composition_spec.rb +0 -5
  36. data/spec/behavior/conflict_policy_spec.rb +0 -5
  37. data/spec/behavior/open_context.rb +0 -5
  38. data/spec/behavior/relationships_spec.rb +0 -249
  39. data/spec/context_spec.rb +0 -268
  40. data/spec/dsl_spec.rb +0 -181
  41. data/spec/feature_spec.rb +0 -5
  42. data/spec/manager_spec.rb +0 -84
  43. data/spec/proc_spec.rb +0 -20
  44. data/spec/relationships/context_relationships_spec.rb +0 -13
  45. data/spec/relationships/dsl_spec.rb +0 -13
  46. data/spec/relationships/feature_relationships_spec.rb +0 -13
  47. data/spec/relationships/relationship_spec.rb +0 -31
  48. data/spec/relationships/relationships_manager_spec.rb +0 -15
  49. data/spec/relationships/relationships_store_spec.rb +0 -19
  50. data/spec/spec_helper.rb +0 -18
@@ -0,0 +1,84 @@
1
+ require_relative "../lib/phenomenal.rb"
2
+ require_relative "./test_classes.rb"
3
+ require "test/unit"
4
+
5
+ class TestCopComposition < Test::Unit::TestCase
6
+ def setup
7
+ phen_define_context(:screening)
8
+ phen_add_adaptation(:screening,Phone,:advertise) do |a_call|
9
+ phen_proceed(a_call)+" with screening"
10
+ end
11
+ phen_define_context(:test)
12
+ end
13
+
14
+ def teardown
15
+ while phen_context_active?(:test) do
16
+ phen_deactivate_context(:test)
17
+ end
18
+ phen_forget_context(:test)
19
+
20
+ while phen_context_active?(:screening) do
21
+ phen_deactivate_context(:screening)
22
+ end
23
+ phen_forget_context(:screening)
24
+ end
25
+
26
+ def test_invalid_proceed
27
+ assert_raise(Phenomenal::Error, %(
28
+ Proceed cannot be used outside adaptation of
29
+ other methods)) {phen_proceed}
30
+ end
31
+
32
+ def test_simple_composition_noargs
33
+ prefix = "It's a nice "
34
+ suffix = "simple composition"
35
+ composed = prefix+suffix
36
+ inst = TestClass.new(prefix)
37
+ phen_add_adaptation(:test,String,:to_s) {phen_proceed+suffix}
38
+ assert(inst.to_s==prefix,
39
+ "The base to_s method of String must have its default behaviour")
40
+ phen_activate_context(:test)
41
+ assert(inst.to_s==composed,
42
+ %(The adapted to_s method of String must had '#{suffix}'
43
+ at the end of the string))
44
+ end
45
+
46
+ def test_simple_composition_args
47
+ str="Nice String!"
48
+ inst= TestClass.new(str)
49
+ phen_add_adaptation(:test,String,:eql?) do | str |
50
+ if phen_proceed(str)
51
+ "OK"
52
+ else
53
+ "KO"
54
+ end
55
+ end
56
+ assert(inst.eql?(str),
57
+ "The base eql? method of String must have its default behaviour")
58
+ phen_activate_context(:test)
59
+ assert(inst.eql?(str)=="OK",
60
+ %(The adapted eql? method of String must return 'OK' if the two string
61
+ are equal))
62
+ assert(inst.eql?(str+str)=="KO",
63
+ %(The adapted eql? method of String must return 'KO' if the two string
64
+ are not equal))
65
+ end
66
+
67
+ def test_nested_activation
68
+ phone = Phone.new
69
+ call = Call.new("Alice")
70
+ phone.receive(call)
71
+
72
+ assert((phone.advertise(call))=="ringtone",
73
+ "Default behaviour should be expressed")
74
+ phen_activate_context(:screening)
75
+ assert((phone.advertise(call))=="ringtone with screening",
76
+ %(Screening information should be overlaid over the default ringtone
77
+ advertisement'.))
78
+ phen_deactivate_context(:screening)
79
+ assert((phone.advertise(call))=="ringtone",
80
+ "Default behaviour should be expressed")
81
+
82
+ end
83
+ end
84
+
@@ -0,0 +1,177 @@
1
+ require_relative "../lib/phenomenal.rb"
2
+ require_relative "./test_classes.rb"
3
+ require "test/unit"
4
+
5
+ class TestCopConflictPolicy < Test::Unit::TestCase
6
+ def setup
7
+ phen_define_context(:screening)
8
+ phen_add_adaptation(:screening,Phone,:advertise) do |a_call|
9
+ phen_proceed(a_call)+" with screening"
10
+ end
11
+
12
+ phen_define_context(:quiet)
13
+ phen_add_adaptation(:quiet,Phone,:advertise){|a_call| "vibrator" }
14
+
15
+ end
16
+
17
+ def teardown
18
+ while phen_context_active?(:screening) do
19
+ phen_deactivate_context(:screening)
20
+ end
21
+ phen_forget_context(:screening)
22
+
23
+ while phen_context_active?(:quiet) do
24
+ phen_deactivate_context(:quiet)
25
+ end
26
+ phen_forget_context(:quiet)
27
+ phen_change_conflict_policy { |a,b| no_resolution_conflict_policy(a,b) }
28
+ end
29
+
30
+ def test_no_resolution_policy
31
+ assert_nothing_raised(Phenomenal::Error,"The first context have to be
32
+ activated without any problem"){phen_activate_context(:screening)}
33
+ assert_raise(Phenomenal::Error,"In the default policy, a second context
34
+ that adapt the same method and is not the default one cannot
35
+ be activated"){phen_activate_context(:quiet)}
36
+ end
37
+
38
+ def test_protocol_age_policy
39
+ assert(phen_context_informations(
40
+ phen_default_context)[:activation_age].kind_of?(Fixnum),
41
+ "Contexts should have the age property")
42
+ end
43
+
44
+ def test_activation_age_policy
45
+ phen_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
46
+ puts "llll #{phen_default_context.class}"
47
+ assert(phen_context_active?(phen_default_context),
48
+ "Default context should normally be active")
49
+ assert(!phen_context_active?(:screening), "Context1 should be inactive")
50
+ assert(!phen_context_active?(:quiet),"Context2 should be inactive")
51
+
52
+ phen_activate_context(:screening)
53
+ assert(phen_context_informations(:screening)[:activation_age] <
54
+ phen_context_informations(phen_default_context)[:activation_age],
55
+ "screening context has been activated more recently than default")
56
+
57
+ phen_activate_context(:quiet)
58
+ assert(phen_context_informations(:quiet)[:activation_age] <
59
+ phen_context_informations(:screening)[:activation_age],
60
+ "quiet context has been activated more recently than screening")
61
+ assert(phen_context_informations(:screening)[:activation_age] <
62
+ phen_context_informations(phen_default_context)[:activation_age],
63
+ "quiet context has still been activated more recently than default")
64
+ phen_deactivate_context(:quiet)
65
+ phen_deactivate_context(:screening)
66
+ phen_activate_context(:screening)
67
+ assert(phen_context_informations(:screening)[:activation_age] <
68
+ phen_context_informations(:quiet)[:activation_age],
69
+ "screening context has now been activated more recently than quiet")
70
+ end
71
+
72
+ def test_conflicting_activation_age_policy
73
+ phen_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
74
+ assert_nothing_raised(Phenomenal::Error,"The first context have to be
75
+ activated without any problem"){phen_activate_context(:screening)}
76
+ assert_nothing_raised(Phenomenal::Error,"In the age policy, a second context
77
+ that adapt the same method and is not the default one should
78
+ be activated without error"){phen_activate_context(:quiet)}
79
+ end
80
+
81
+ def test_interleaved_activation_age_policy
82
+ phen_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
83
+ phone = Phone.new
84
+ call = Call.new("Alice")
85
+ phone.receive(call)
86
+
87
+ assert((phone.advertise(call))=="ringtone",
88
+ "Default behaviour should be expressed --> ringtone")
89
+
90
+ phen_activate_context(:quiet)
91
+ assert((phone.advertise(call))=="vibrator",
92
+ "Call advertisement should adapt to quiet context")
93
+
94
+ phen_activate_context(:screening)
95
+ assert((phone.advertise(call))=="vibrator with screening",
96
+ "Screening information should be overlaid over quiet context behaviour
97
+ (vibrator)")
98
+
99
+ phen_deactivate_context(:quiet)
100
+ assert((phone.advertise(call))=="ringtone with screening",
101
+ "Screening information should be overlaid over default context behaviour
102
+ (ringtone)")
103
+
104
+ phen_deactivate_context(:screening)
105
+ assert((phone.advertise(call))=="ringtone",
106
+ "Call advertisement should be reverted to the default")
107
+ end
108
+
109
+ def test_nested_activation_age_policy
110
+ phen_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
111
+ phone = Phone.new
112
+ call = Call.new("Alice")
113
+ phone.receive(call)
114
+
115
+ assert((phone.advertise(call))=="ringtone",
116
+ "Default behaviour should be expressed --> ringtone")
117
+
118
+ phen_activate_context(:quiet)
119
+ assert((phone.advertise(call))=="vibrator",
120
+ "Call advertisement should adapt to quiet context")
121
+
122
+ phen_activate_context(:screening)
123
+ assert((phone.advertise(call))=="vibrator with screening",
124
+ "Screening information should be overlaid over quiet context behaviour
125
+ (vibrator)")
126
+
127
+ phen_deactivate_context(:screening)
128
+ assert((phone.advertise(call))=="vibrator",
129
+ "Call advertisement should be reverted to that of quiet context")
130
+
131
+ phen_deactivate_context(:quiet)
132
+ assert((phone.advertise(call))=="ringtone",
133
+ "Call advertisement should be reverted to the default")
134
+ end
135
+
136
+ def test_4_level_age_policy
137
+ phen_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
138
+ phen_define_context(:level1)
139
+ phen_add_adaptation(:level1,TestClass,:print) do |arg|
140
+ phen_proceed(arg) + " 1 -> ARG1: #{arg.to_s}"
141
+ end
142
+
143
+ phen_define_context(:level2)
144
+ phen_add_adaptation(:level2,TestClass,:print) do |arg|
145
+ phen_proceed(arg) + " 2 -> ARG2: #{arg.to_s}"
146
+ end
147
+
148
+ phen_define_context(:level3)
149
+ phen_add_adaptation(:level3,TestClass,:print) do |arg|
150
+ phen_proceed(arg) + " 3 -> ARG3: #{arg.to_s}"
151
+ end
152
+
153
+ phen_define_context(:level4)
154
+ phen_add_adaptation(:level4,TestClass,:print) do |arg|
155
+ phen_proceed(arg) + " 4 -> ARG4: #{arg.to_s}"
156
+ end
157
+ t = TestClass.new("Foo")
158
+ assert(t.print("bar")=="0 -> ARG: bar",
159
+ "Default behaviour should be expressed")
160
+ phen_activate_context(:level1)
161
+ phen_activate_context(:level2)
162
+ phen_activate_context(:level3)
163
+ phen_activate_context(:level4)
164
+ assert(t.print("bar")==
165
+ "0 -> ARG: bar 1 -> ARG1: bar 2 -> ARG2: bar 3 -> ARG3: bar 4 -> ARG4: bar",
166
+ "Composed behaviour should be expressed")
167
+ phen_deactivate_context(:level1)
168
+ phen_forget_context(:level1)
169
+ phen_deactivate_context(:level2)
170
+ phen_forget_context(:level2)
171
+ phen_deactivate_context(:level3)
172
+ phen_forget_context(:level3)
173
+ phen_deactivate_context(:level4)
174
+ phen_forget_context(:level4)
175
+ end
176
+ end
177
+
@@ -0,0 +1,129 @@
1
+ require_relative "../lib/phenomenal.rb"
2
+ require "test/unit"
3
+
4
+ class TestCopInfrastructure < Test::Unit::TestCase
5
+ def setup
6
+ @cm = Phenomenal::Manager.instance
7
+ end
8
+
9
+ def test_protocol
10
+ context = Phenomenal::Context.new(:test)
11
+ assert(Phenomenal::Context, "The class Phenomenal::Context doesn't exist")
12
+ assert(@cm, "The class @cm exist")
13
+ assert_respond_to(context, :activate, "The activate method doesn't exist")
14
+ assert_respond_to(context, :deactivate,
15
+ "The deactivate method doesn't exist")
16
+ assert_respond_to(context, :active?, "The is_active method doesn't exist")
17
+ @cm.unregister_context(context)
18
+ end
19
+
20
+ def test_creation
21
+ context = Phenomenal::Context.new(:test)
22
+ assert_kind_of(Phenomenal::Context, context,
23
+ "A fresh instance should be contexts indeed")
24
+ assert(
25
+ (context.active?.is_a?(TrueClass) || context.active?.is_a?(FalseClass)),
26
+ "The context should be either active (true) or inactive (false).")
27
+ assert(!context.active?, "A fresh context should not be initially active.")
28
+ @cm.unregister_context(context)
29
+ end
30
+
31
+ def test_activation
32
+ context_name=:test
33
+ context = Phenomenal::Context.new(context_name)
34
+ assert(!context.active?, "A fresh context should not be initially active.")
35
+ assert_equal(context,context.activate,
36
+ "Phenomenal::Context activation should return the context")
37
+ assert(context.active?,
38
+ "Activation should leave the context in an active state")
39
+ assert_equal(context,context.deactivate,
40
+ "Phenomenal::Context deactivation should return the context")
41
+ assert(!context.active?,
42
+ "Deactivation should leave the context in an inactive state")
43
+ @cm.unregister_context(context)
44
+ end
45
+
46
+ def test_redundant_activation
47
+ context = Phenomenal::Context.new(:test)
48
+ assert(!context.active?, "A fresh context should not be initially active.")
49
+ 10.times { context.activate }
50
+ assert(context.active?,
51
+ "Activation should leave the context in an active state")
52
+ 9.times { context.deactivate }
53
+ assert(context.active?,
54
+ "Should stay active for fewer deactivations than activations")
55
+ context.deactivate
56
+ assert(!context.active?,
57
+ "Should become inactive after matching number of deactivations")
58
+ @cm.unregister_context(context)
59
+ end
60
+
61
+ def test_redundant_deactivation
62
+ context = Phenomenal::Context.new(:test)
63
+ assert(!context.active?, "A fresh context should not be initially active.")
64
+ 3.times { context.activate }
65
+ assert(context.active?,
66
+ "Activation should leave the context in an active state")
67
+ 9.times { context.deactivate }
68
+ assert(!context.active?,
69
+ "More deactivation than activation leave the context inactive")
70
+ context.activate
71
+ assert(context.active?,
72
+ "Deactivation does not accumulate once the context is already inactive")
73
+ context.deactivate
74
+ assert(!context.active?,
75
+ "Deactivation does not accumulate once the context is already inactive")
76
+ @cm.unregister_context(context)
77
+ end
78
+
79
+ def test_context_name
80
+ context_name = :test
81
+ context = Phenomenal::Context.new(context_name)
82
+ assert_respond_to(context, :name, "Contexts should have a name")
83
+ assert_equal(context_name,context.name,
84
+ "A fresh context should be the definition name")
85
+ @cm.unregister_context(context)
86
+ end
87
+
88
+ def test_default
89
+ assert_nothing_raised(Phenomenal::Error,"Default context should exist"){
90
+ @cm.default_context.informations[:name]}
91
+
92
+ assert(@cm.default_context.active?,
93
+ "The default context should normally be active")
94
+ end
95
+
96
+ def test_default_forget
97
+ old_informations = @cm.default_context.informations
98
+ assert_respond_to(@cm, :unregister_context,
99
+ "Method to drop unneeded contexts should exist")
100
+ assert(@cm.default_context.active?,
101
+ "The default context should be initialy active")
102
+ assert_raise(Phenomenal::Error,
103
+ "An active context cannot be thrown away"){
104
+ @cm.default_context.forget }
105
+ @cm.default_context.deactivate
106
+ assert(!@cm.default_context.active?, "Default should be inactive")
107
+ assert_nothing_raised(Phenomenal::Error,
108
+ "It should be possible to forget an inactive context"){
109
+ @cm.default_context.forget }
110
+ assert_nothing_raised(Phenomenal::Error,
111
+ %(Default context assumptions should hold for freshly
112
+ created default context)){
113
+ @cm.default_context.activate }
114
+ #TODO
115
+ #assert(old_informations[:creation_time]!=
116
+ #@cm.context_informations(:default)[:creation_time],
117
+ #"Fresh default context should not be the default context just forgotten")
118
+ assert(@cm.default_context.activate, "Default should be active")
119
+ end
120
+
121
+ def test_adaptation_api
122
+ assert_respond_to(@cm, :register_adaptation,
123
+ "Phenomenal::Context manager should allow to adapt methods")
124
+
125
+ assert_respond_to(@cm, :unregister_adaptation,
126
+ "Phenomenal::Context manager should allow to deadapt methods")
127
+ end
128
+ end
129
+
@@ -0,0 +1,18 @@
1
+ require_relative 'lib/phenomenal.rb'
2
+ class TestClass
3
+ def print(p)
4
+ end
5
+ end
6
+
7
+ class Phenomenal::TestDeclaration
8
+ act_as_context :persistent
9
+
10
+ adaptations_for TestClass
11
+ adapt :print do |p|
12
+ puts p
13
+ end
14
+ end
15
+
16
+ Phenomenal::Manager.instance.find_context("Phenomenal::TestDeclaration").activate
17
+ puts Phenomenal::Manager.instance.find_context("Phenomenal::TestDeclaration").persistent
18
+ TestClass.new.print("plop")
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: phenomenal
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.0
5
+ version: 0.11.11.24.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Loic Vigneron - Thibault Poncelet
@@ -10,21 +10,16 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-11-24 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: rspec
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: "2.5"
24
- type: :development
25
- version_requirements: *id001
26
- description: A context oriented programming framework for Ruby
27
- email: team@phenomenal-gem.com
13
+ date: 2011-10-07 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: |
17
+ Build gem command:
18
+ gem build phenomenal.gemspec
19
+ Test gem command:
20
+ rake test
21
+
22
+ email: thibault.poncelet@student.uclouvain.be - loic.vigneron@student.uclouvain.be
28
23
  executables: []
29
24
 
30
25
  extensions: []
@@ -32,48 +27,27 @@ extensions: []
32
27
  extra_rdoc_files: []
33
28
 
34
29
  files:
30
+ - test/test_cop_conflictpolicy.rb
31
+ - test/test_cop_infrastructure.rb
32
+ - test/test_classes.rb
33
+ - test/test_cop_composition.rb
34
+ - test/test_cop_adaptation.rb
35
+ - README
36
+ - phenomenal.gemspec
37
+ - LICENSE
38
+ - test_declaration.rb
39
+ - demo_dsl.rb
40
+ - demo_age.rb
41
+ - demo.rb
35
42
  - lib/phenomenal/manager.rb
36
- - lib/phenomenal/feature.rb
37
43
  - lib/phenomenal/proc.rb
38
44
  - lib/phenomenal/conflict_policies.rb
39
45
  - lib/phenomenal/dsl.rb
40
- - lib/phenomenal/version.rb
41
- - lib/phenomenal/relationships/implication.rb
42
- - lib/phenomenal/relationships/relationships_store.rb
43
- - lib/phenomenal/relationships/relationship.rb
44
- - lib/phenomenal/relationships/requirement.rb
45
- - lib/phenomenal/relationships/dsl.rb
46
- - lib/phenomenal/relationships/relationships_manager.rb
47
- - lib/phenomenal/relationships/context_relationships.rb
48
- - lib/phenomenal/relationships/suggestion.rb
49
- - lib/phenomenal/relationships/feature_relationships.rb
50
46
  - lib/phenomenal/context.rb
51
47
  - lib/phenomenal/logger.rb
52
48
  - lib/phenomenal/adaptation.rb
53
49
  - lib/phenomenal.rb
54
- - LICENSE
55
50
  - Rakefile
56
- - README
57
- - spec/spec_helper.rb
58
- - spec/feature_spec.rb
59
- - spec/context_spec.rb
60
- - spec/behavior/composition_spec.rb
61
- - spec/behavior/combined_contexts_spec.rb
62
- - spec/behavior/adaptation_spec.rb
63
- - spec/behavior/open_context.rb
64
- - spec/behavior/conflict_policy_spec.rb
65
- - spec/behavior/relationships_spec.rb
66
- - spec/test_classes.rb
67
- - spec/manager_spec.rb
68
- - spec/adaptation_spec.rb
69
- - spec/relationships/relationships_store_spec.rb
70
- - spec/relationships/relationship_spec.rb
71
- - spec/relationships/feature_relationships_spec.rb
72
- - spec/relationships/dsl_spec.rb
73
- - spec/relationships/context_relationships_spec.rb
74
- - spec/relationships/relationships_manager_spec.rb
75
- - spec/dsl_spec.rb
76
- - spec/proc_spec.rb
77
51
  homepage: http://www.phenomenal-gem.com
78
52
  licenses: []
79
53
 
@@ -100,25 +74,10 @@ rubyforge_project:
100
74
  rubygems_version: 1.8.11
101
75
  signing_key:
102
76
  specification_version: 3
103
- summary: A context oriented programming framework for Ruby
77
+ summary: A context oriented programing framework for ruby
104
78
  test_files:
105
- - spec/spec_helper.rb
106
- - spec/feature_spec.rb
107
- - spec/context_spec.rb
108
- - spec/behavior/composition_spec.rb
109
- - spec/behavior/combined_contexts_spec.rb
110
- - spec/behavior/adaptation_spec.rb
111
- - spec/behavior/open_context.rb
112
- - spec/behavior/conflict_policy_spec.rb
113
- - spec/behavior/relationships_spec.rb
114
- - spec/test_classes.rb
115
- - spec/manager_spec.rb
116
- - spec/adaptation_spec.rb
117
- - spec/relationships/relationships_store_spec.rb
118
- - spec/relationships/relationship_spec.rb
119
- - spec/relationships/feature_relationships_spec.rb
120
- - spec/relationships/dsl_spec.rb
121
- - spec/relationships/context_relationships_spec.rb
122
- - spec/relationships/relationships_manager_spec.rb
123
- - spec/dsl_spec.rb
124
- - spec/proc_spec.rb
79
+ - test/test_cop_conflictpolicy.rb
80
+ - test/test_cop_infrastructure.rb
81
+ - test/test_classes.rb
82
+ - test/test_cop_composition.rb
83
+ - test/test_cop_adaptation.rb