phenomenal 0.9.0 → 0.11.11.24.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.
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