scorm2004-manifest 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. data/.document +5 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +36 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +94 -0
  6. data/Rakefile +39 -0
  7. data/VERSION +1 -0
  8. data/lib/scorm2004/manifest/adlseq_map_info.rb +17 -0
  9. data/lib/scorm2004/manifest/adlseq_objective.rb +14 -0
  10. data/lib/scorm2004/manifest/adlseq_objectives.rb +11 -0
  11. data/lib/scorm2004/manifest/attributes.rb +147 -0
  12. data/lib/scorm2004/manifest/children.rb +83 -0
  13. data/lib/scorm2004/manifest/completion_threshold.rb +13 -0
  14. data/lib/scorm2004/manifest/condition_rule.rb +12 -0
  15. data/lib/scorm2004/manifest/constrained_choice_considerations.rb +12 -0
  16. data/lib/scorm2004/manifest/control_mode.rb +16 -0
  17. data/lib/scorm2004/manifest/custom_error.rb +15 -0
  18. data/lib/scorm2004/manifest/data.rb +11 -0
  19. data/lib/scorm2004/manifest/data_from_lms.rb +21 -0
  20. data/lib/scorm2004/manifest/delivery_controls.rb +13 -0
  21. data/lib/scorm2004/manifest/dependency.rb +21 -0
  22. data/lib/scorm2004/manifest/error.rb +5 -0
  23. data/lib/scorm2004/manifest/file.rb +16 -0
  24. data/lib/scorm2004/manifest/hide_lmsui.rb +21 -0
  25. data/lib/scorm2004/manifest/href.rb +24 -0
  26. data/lib/scorm2004/manifest/item.rb +36 -0
  27. data/lib/scorm2004/manifest/limit_conditions.rb +12 -0
  28. data/lib/scorm2004/manifest/manifest.rb +26 -0
  29. data/lib/scorm2004/manifest/map.rb +13 -0
  30. data/lib/scorm2004/manifest/map_info.rb +15 -0
  31. data/lib/scorm2004/manifest/min_normalized_measure.rb +18 -0
  32. data/lib/scorm2004/manifest/navigation_interface.rb +10 -0
  33. data/lib/scorm2004/manifest/objective.rb +16 -0
  34. data/lib/scorm2004/manifest/objectives.rb +12 -0
  35. data/lib/scorm2004/manifest/organization.rb +20 -0
  36. data/lib/scorm2004/manifest/organizations.rb +24 -0
  37. data/lib/scorm2004/manifest/presentation.rb +10 -0
  38. data/lib/scorm2004/manifest/primary_objective.rb +24 -0
  39. data/lib/scorm2004/manifest/randomization_controls.rb +16 -0
  40. data/lib/scorm2004/manifest/resource.rb +18 -0
  41. data/lib/scorm2004/manifest/resources.rb +12 -0
  42. data/lib/scorm2004/manifest/rollup_action.rb +13 -0
  43. data/lib/scorm2004/manifest/rollup_condition.rb +24 -0
  44. data/lib/scorm2004/manifest/rollup_conditions.rb +14 -0
  45. data/lib/scorm2004/manifest/rollup_considerations.rb +17 -0
  46. data/lib/scorm2004/manifest/rollup_rule.rb +19 -0
  47. data/lib/scorm2004/manifest/rollup_rules.rb +16 -0
  48. data/lib/scorm2004/manifest/rule_action.rb +31 -0
  49. data/lib/scorm2004/manifest/rule_condition.rb +41 -0
  50. data/lib/scorm2004/manifest/rule_conditions.rb +14 -0
  51. data/lib/scorm2004/manifest/schema.rb +18 -0
  52. data/lib/scorm2004/manifest/schemaversion.rb +18 -0
  53. data/lib/scorm2004/manifest/sequencing.rb +24 -0
  54. data/lib/scorm2004/manifest/sequencing_collection.rb +11 -0
  55. data/lib/scorm2004/manifest/sequencing_rules.rb +13 -0
  56. data/lib/scorm2004/manifest/text_node.rb +11 -0
  57. data/lib/scorm2004/manifest/time_limit_action.rb +24 -0
  58. data/lib/scorm2004/manifest/title.rb +16 -0
  59. data/lib/scorm2004/manifest/visitor_pattern.rb +31 -0
  60. data/lib/scorm2004/manifest/xml_base.rb +38 -0
  61. data/lib/scorm2004/manifest.rb +76 -0
  62. data/lib/scorm2004-manifest.rb +1 -0
  63. data/test/functional_test.rb +45 -0
  64. data/test/helper.rb +18 -0
  65. data/test/mbce_test.rb +66 -0
  66. data/test/msce_test.rb +55 -0
  67. data/test/scorm2004/manifest/adlseq_map_info_test.rb +47 -0
  68. data/test/scorm2004/manifest/adlseq_objective_test.rb +44 -0
  69. data/test/scorm2004/manifest/adlseq_objectives_test.rb +29 -0
  70. data/test/scorm2004/manifest/any_uri_token_test.rb +40 -0
  71. data/test/scorm2004/manifest/attributes_test.rb +224 -0
  72. data/test/scorm2004/manifest/children_test.rb +330 -0
  73. data/test/scorm2004/manifest/completion_threshold_test.rb +80 -0
  74. data/test/scorm2004/manifest/condition_rule_test.rb +40 -0
  75. data/test/scorm2004/manifest/constrained_choice_considerations_test.rb +25 -0
  76. data/test/scorm2004/manifest/control_mode_test.rb +41 -0
  77. data/test/scorm2004/manifest/custom_error_test.rb +43 -0
  78. data/test/scorm2004/manifest/data_from_lms_test.rb +47 -0
  79. data/test/scorm2004/manifest/data_test.rb +31 -0
  80. data/test/scorm2004/manifest/delivery_controls_test.rb +27 -0
  81. data/test/scorm2004/manifest/dependency_test.rb +53 -0
  82. data/test/scorm2004/manifest/duration_attribute_test.rb +59 -0
  83. data/test/scorm2004/manifest/file_test.rb +40 -0
  84. data/test/scorm2004/manifest/hide_lmsui_test.rb +40 -0
  85. data/test/scorm2004/manifest/href_test.rb +43 -0
  86. data/test/scorm2004/manifest/item_test.rb +86 -0
  87. data/test/scorm2004/manifest/limit_conditions_test.rb +34 -0
  88. data/test/scorm2004/manifest/manifest_test.rb +152 -0
  89. data/test/scorm2004/manifest/map_info_test.rb +41 -0
  90. data/test/scorm2004/manifest/map_test.rb +32 -0
  91. data/test/scorm2004/manifest/min_normalized_measure_test.rb +28 -0
  92. data/test/scorm2004/manifest/navigation_interface_test.rb +29 -0
  93. data/test/scorm2004/manifest/non_negative_integer_attribute_test.rb +64 -0
  94. data/test/scorm2004/manifest/objective_test.rb +45 -0
  95. data/test/scorm2004/manifest/objectives_test.rb +37 -0
  96. data/test/scorm2004/manifest/organization_test.rb +115 -0
  97. data/test/scorm2004/manifest/organizations_test.rb +68 -0
  98. data/test/scorm2004/manifest/partial_manifest.rb +23 -0
  99. data/test/scorm2004/manifest/partial_manifest_test.rb +44 -0
  100. data/test/scorm2004/manifest/presentation_test.rb +26 -0
  101. data/test/scorm2004/manifest/primary_objective_test.rb +65 -0
  102. data/test/scorm2004/manifest/randomization_controls_test.rb +71 -0
  103. data/test/scorm2004/manifest/resource_test.rb +96 -0
  104. data/test/scorm2004/manifest/resources_test.rb +41 -0
  105. data/test/scorm2004/manifest/rollup_action_test.rb +33 -0
  106. data/test/scorm2004/manifest/rollup_condition_test.rb +42 -0
  107. data/test/scorm2004/manifest/rollup_conditions_test.rb +53 -0
  108. data/test/scorm2004/manifest/rollup_considerations_test.rb +42 -0
  109. data/test/scorm2004/manifest/rollup_rule_test.rb +87 -0
  110. data/test/scorm2004/manifest/rollup_rules_test.rb +60 -0
  111. data/test/scorm2004/manifest/rule_action_test.rb +79 -0
  112. data/test/scorm2004/manifest/rule_condition_test.rb +70 -0
  113. data/test/scorm2004/manifest/rule_conditions_test.rb +37 -0
  114. data/test/scorm2004/manifest/schema_test.rb +29 -0
  115. data/test/scorm2004/manifest/schemaversion_test.rb +29 -0
  116. data/test/scorm2004/manifest/sequencing_collection_test.rb +31 -0
  117. data/test/scorm2004/manifest/sequencing_rules_test.rb +36 -0
  118. data/test/scorm2004/manifest/sequencing_test.rb +42 -0
  119. data/test/scorm2004/manifest/string_attribute_test.rb +68 -0
  120. data/test/scorm2004/manifest/text_node_test.rb +37 -0
  121. data/test/scorm2004/manifest/time_limit_action_test.rb +51 -0
  122. data/test/scorm2004/manifest/title_test.rb +59 -0
  123. data/test/scorm2004/manifest/token_attribute_test.rb +53 -0
  124. data/test/scorm2004/manifest/visitor_pattern_test.rb +85 -0
  125. data/test/scorm2004/manifest/xml_base_test.rb +125 -0
  126. data/test/scorm2004/manifest_test.rb +33 -0
  127. data/test/scorm2004_test.rb +9 -0
  128. data/test/sece_test.rb +53 -0
  129. metadata +260 -0
@@ -0,0 +1,26 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class PresentationTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = Presentation.new
10
+ end
11
+
12
+ test 'an empty element' do
13
+ assert el('<dummy />').accept(@v)
14
+ end
15
+
16
+ test 'an element with child' do
17
+ @v.expects(:navigation_interface_visitor).once.returns(mock(:visit))
18
+ assert el(<<-XML).accept(@v)
19
+ <dummy>
20
+ <adlnav:navigationInterface />
21
+ </dummy>
22
+ XML
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,65 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class PrimaryObjectiveTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = PrimaryObjective.new
10
+ @v.stubs(:map_info_visitor).returns(stub(:visit))
11
+ end
12
+
13
+ test 'default satisfiedByMeasure' do
14
+ el.accept(@v)
15
+ assert_equal false, @v.satisfied_by_measure
16
+ end
17
+
18
+ test 'a visitor visits <minNormalizedMeasure>' do
19
+ @v.expects(:min_normalized_measure_visitor).once.returns(mock(:visit))
20
+ el('<dummy><imsss:minNormalizedMeasure /></dummy>').accept(@v)
21
+ end
22
+
23
+ test 'the objectiveID attribute' do
24
+ el('<dummy objectiveID="foo" />').accept(@v)
25
+ assert_equal 'foo', @v.objective_id
26
+ end
27
+
28
+ test 'a visitor visits multiple <mapInfo>s' do
29
+ map_info_visitor = mock()
30
+ map_info_visitor.expects(:visit).twice
31
+ @v.expects(:map_info_visitor).twice.returns(map_info_visitor)
32
+ el(<<-XML).accept(@v)
33
+ <dummy objectiveID="dummy">
34
+ <imsss:mapInfo />
35
+ <imsss:mapInfo />
36
+ </dummy>
37
+ XML
38
+ end
39
+
40
+ test 'If an element contains an objective map, then the objectiveID attribute is required.' do
41
+ assert_error do
42
+ el(<<-XML).accept(@v)
43
+ <dummy>
44
+ <imsss:mapInfo />
45
+ </dummy>
46
+ XML
47
+ end
48
+ end
49
+
50
+ test 'an element with both objectiveID and <mapInfo> does not cause error' do
51
+ assert_nothing_raised do
52
+ el(<<-XML).accept(@v)
53
+ <dummy objectiveID="dummy">
54
+ <imsss:mapInfo />
55
+ </dummy>
56
+ XML
57
+ end
58
+ end
59
+
60
+ def assert_error(&block)
61
+ assert_raise PrimaryObjective::Error, &block
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RandomizationControlsTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = RandomizationControls.new
10
+ end
11
+
12
+ test 'default values' do
13
+ el.accept(@v)
14
+ assert_equal 'never', @v.randomization_timing
15
+ assert_equal false, @v.reorder_children
16
+ assert_equal 'never', @v.selection_timing
17
+ end
18
+
19
+ RandomizationControls::TIMINGS.each do |timing|
20
+ tag = "<dummy randomizationTiming='#{timing}' />"
21
+ test tag do
22
+ el(tag).accept(@v)
23
+ assert_equal timing, @v.randomization_timing
24
+ end
25
+ end
26
+
27
+ RandomizationControls::TIMINGS.each do |timing|
28
+ tag = "<dummy selectionTiming='#{timing}' />"
29
+ test tag do
30
+ el(tag).accept(@v)
31
+ assert_equal timing, @v.selection_timing
32
+ end
33
+ end
34
+
35
+ test 'invalid randomizationTiming' do
36
+ assert_error { el('<dummy randomizationTiming="invalid" />').accept(@v) }
37
+ end
38
+
39
+ test 'invalid selectionTiming' do
40
+ assert_error { el('<dummy selectionTiming="invalid" />').accept(@v) }
41
+ end
42
+
43
+ 1.upto(10) do |n|
44
+ tag = "<dummy selectCount='#{n}' />"
45
+ test tag do
46
+ el(tag).accept(@v)
47
+ assert_equal n, @v.select_count
48
+ end
49
+ end
50
+
51
+ [-1, 1.000, 0.001].each do |invalid_value|
52
+ tag = "<dummy selectCount='#{invalid_value}' />"
53
+ test tag do
54
+ assert_error { el(tag).accept(@v) }
55
+ end
56
+ end
57
+
58
+ [true, false].each do |boolean|
59
+ tag = "<dummy reorderChildren='#{boolean}' />"
60
+ test tag do
61
+ el(tag).accept(@v)
62
+ assert_equal boolean, @v.reorder_children
63
+ end
64
+ end
65
+
66
+ def assert_error(&block)
67
+ assert_raise RandomizationControls::Error, &block
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,96 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class ResourceTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ VALID_RESOURCE_ELEMENT =<<-XML
9
+ <resource identifier="a12"
10
+ href="path/to/file.html"
11
+ adlcp:scormType="sco" />
12
+ XML
13
+
14
+ context 'a resource visitor' do
15
+ setup do
16
+ @v = Resource.new(base: Pathname('path/to/base'))
17
+ end
18
+
19
+ context 'visiting a valid element' do
20
+ should 'set its attribute properly' do
21
+ el(VALID_RESOURCE_ELEMENT).accept(@v)
22
+ assert_equal 'a12', @v.identifier
23
+ assert_equal 'path/to/base/path/to/file.html', @v.href
24
+ assert_equal 'sco', @v.scorm_type
25
+ end
26
+ end
27
+
28
+ context 'visiting a valid element without href' do
29
+ should 'raise nothing' do
30
+ assert_nothing_raised do
31
+ el('<resource identifier="a12" adlcp:scormType="sco" />').accept(@v)
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'visiting an element without identifier' do
37
+ should 'raise exception' do
38
+ assert_error do
39
+ el('<resource href="x" adlcp:scormType="sco" />').accept(@v)
40
+ end
41
+ end
42
+ end
43
+
44
+ context 'visiting an element without scormType' do
45
+ should 'raise exceptoin' do
46
+ assert_error do
47
+ el('<resource identifier="b34" />').accept(@v)
48
+ end
49
+ end
50
+ end
51
+
52
+ context 'visiting an element with its scormType invalid' do
53
+ should 'raise exception' do
54
+ assert_error do
55
+ el('<resource identifier="c56" adlcp:scormType="file" />').accept(@v)
56
+ end
57
+ end
58
+ end
59
+
60
+ context 'visiting an element with files' do
61
+ should 'visit the files' do
62
+ file_visitor = mock()
63
+ file_visitor.expects(:visit).twice
64
+ @v.expects(:file_visitor).twice.returns(file_visitor)
65
+ el(<<-XML).accept(@v)
66
+ <resource identifier="x01" adlcp:scormType="asset">
67
+ <file />
68
+ <file />
69
+ </resource>
70
+ XML
71
+ end
72
+ end
73
+
74
+ context 'visiting an element with dependencies' do
75
+ should 'visit the dependencies' do
76
+ dependency_visitor = mock()
77
+ dependency_visitor.expects(:visit).twice
78
+ @v.expects(:dependency_visitor).twice.returns(dependency_visitor)
79
+ el(<<-XML).accept(@v)
80
+ <resource identifier="x01" adlcp:scormType="asset">
81
+ <dependency />
82
+ <dependency />
83
+ </resource>
84
+ XML
85
+ end
86
+ end
87
+ end
88
+
89
+ private
90
+
91
+ def assert_error(&block)
92
+ assert_raise Resource::Error, &block
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,41 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class ResourcesTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = Resources.new
10
+ end
11
+
12
+ context 'a resources visitor' do
13
+ should 'support xml:base' do
14
+ assert @v.respond_to? :base
15
+ end
16
+ end
17
+
18
+ context 'a resources visitor visiting an empty element' do
19
+ should 'not raise exceptoin' do
20
+ assert_nothing_raised do
21
+ el('<dummy />').accept(@v)
22
+ end
23
+ end
24
+ end
25
+
26
+ context 'a resources visitor visiting an element with resource elements' do
27
+ should 'visit these elements' do
28
+ v = mock()
29
+ v.expects(:visit).twice
30
+ @v.expects(:resource_visitor).twice.returns(v)
31
+ el(<<-XML).accept(@v)
32
+ <dummy>
33
+ <resource />
34
+ <resource />
35
+ </dummy>
36
+ XML
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RollupActionTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = RollupAction.new
10
+ end
11
+
12
+ test 'an empty element causes error' do
13
+ assert_error { el.accept(@v) }
14
+ end
15
+
16
+ RollupAction::ACTIONS.each do |action|
17
+ tag = "<dummy action='#{action}' />"
18
+ test tag do
19
+ el(tag).accept(@v)
20
+ assert_equal action, @v.action
21
+ end
22
+ end
23
+
24
+ test 'invalid action' do
25
+ assert_error { el('<dummy action="invalid" />').accept(@v) }
26
+ end
27
+
28
+ def assert_error(&block)
29
+ assert_raise RollupAction::Error, &block
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,42 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RollupConditionTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = RollupCondition.new
10
+ end
11
+
12
+ test 'an empty element causes error' do
13
+ assert_error { el.accept(@v) }
14
+ end
15
+
16
+ test 'the operator attribute defaults noOp' do
17
+ el('<dummy condition="satisfied" />').accept(@v)
18
+ assert_equal 'noOp', @v.operator
19
+ end
20
+
21
+ RollupCondition::CONDITIONS.each do |condition|
22
+ tag = "<dummy condition='#{condition}' />"
23
+ test tag do
24
+ el(tag).accept(@v)
25
+ assert_equal condition, @v.condition
26
+ end
27
+ end
28
+
29
+ test 'an invalid operator causes error' do
30
+ assert_error { el('<dummy condition="satisfied" operator="invalid" />').accept(@v) }
31
+ end
32
+
33
+ test 'an invalid condition causes error' do
34
+ assert_error { el('<dummy condition="invalid" />').accept(@v) }
35
+ end
36
+
37
+ def assert_error(&block)
38
+ assert_raise RollupCondition::Error, &block
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,53 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RollupConditionsTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = RollupConditions.new
10
+ @v.stubs(:rollup_condition_visitor).returns(stub(:visit))
11
+ end
12
+
13
+ test 'an empty element causes error' do
14
+ assert_error { el.accept(@v) }
15
+ end
16
+
17
+ test 'default conditionCombination' do
18
+ el('<dummy><imsss:rollupCondition /></dummy>').accept(@v)
19
+ assert_equal 'any', @v.condition_combination
20
+ end
21
+
22
+ %w( all any ).each do |valid_condition_combination|
23
+ tag = "<dummy conditionCombination='#{valid_condition_combination}'><imsss:rollupCondition /></dummy>"
24
+ test tag do
25
+ el(tag).accept(@v)
26
+ assert_equal valid_condition_combination, @v.condition_combination
27
+ end
28
+ end
29
+
30
+ test 'invalid conditionCombination' do
31
+ assert_error do
32
+ el('<dummy conditionCombination="invalid"><imsss:rollupCondition /></dummy>').accept(@v)
33
+ end
34
+ end
35
+
36
+ test 'a visitor visit multiple children' do
37
+ rollup_condition_visitor = mock()
38
+ rollup_condition_visitor.expects(:visit).twice
39
+ @v.expects(:rollup_condition_visitor).twice.returns(rollup_condition_visitor)
40
+ el(<<-XML).accept(@v)
41
+ <dummy>
42
+ <imsss:rollupCondition />
43
+ <imsss:rollupCondition />
44
+ </dummy>
45
+ XML
46
+ end
47
+
48
+ def assert_error(&block)
49
+ assert_raise RollupConditions::Error, &block
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,42 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RollupConsiderationsTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ def self.token_attributes
9
+ RollupConsiderations.attributes - [:measure_satisfaction_if_active]
10
+ end
11
+
12
+ setup do
13
+ @v = RollupConsiderations.new
14
+ end
15
+
16
+ test 'default value of measureSatisfactionIfActive' do
17
+ el.accept @v
18
+ assert_equal true, @v.measure_satisfaction_if_active
19
+ end
20
+
21
+ token_attributes.each do |attr|
22
+ test "default value of #{attr}" do
23
+ el.accept @v
24
+ assert_equal 'always', @v.send(attr)
25
+ end
26
+ end
27
+
28
+ token_attributes.product(RollupConsiderations::CONDITIONS).each do |attr, condition|
29
+ tag = "<dummy #{attr.to_s.camelize :lower}='#{condition}' />"
30
+ test tag do
31
+ el(tag).accept @v
32
+ assert_equal condition, @v.send(attr)
33
+ end
34
+ end
35
+
36
+ test 'false measureSatisfactionIfActive' do
37
+ el('<dummy measureSatisfactionIfActive="0" />').accept @v
38
+ assert_equal false, @v.measure_satisfaction_if_active
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,87 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RollupRuleTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = RollupRule.new
10
+ @v.stubs(:rollup_conditions_visitor).returns(stub(:visit))
11
+ @v.stubs(:rollup_action_visitor).returns(stub(:visit))
12
+ end
13
+
14
+ test 'an empty element causes error' do
15
+ assert_error { el.accept @v }
16
+ end
17
+
18
+ test 'a visitor should visit children' do
19
+ @v = RollupRule.new
20
+ rollup_conditions_visitor = mock()
21
+ rollup_conditions_visitor.expects(:visit)
22
+ @v.expects(:rollup_conditions_visitor).returns(rollup_conditions_visitor)
23
+ rollup_action_visitor = mock()
24
+ rollup_action_visitor.expects(:visit)
25
+ @v.expects(:rollup_action_visitor).returns(rollup_action_visitor)
26
+ el(<<-XML).accept @v
27
+ <dummy>
28
+ <imsss:rollupConditions />
29
+ <imsss:rollupAction />
30
+ </dummy>
31
+ XML
32
+ end
33
+
34
+ test 'a visitor sets default values' do
35
+ el(<<-XML).accept @v
36
+ <dummy>
37
+ <imsss:rollupConditions />
38
+ <imsss:rollupAction />
39
+ </dummy>
40
+ XML
41
+ assert_equal 'all', @v.child_activity_set
42
+ assert_equal 0, @v.minimum_count
43
+ assert_equal 0.0, @v.minimum_percent
44
+ end
45
+
46
+ RollupRule::CONDITIONS.each do |token|
47
+ test "childActivitySet = '#{token}'" do
48
+ el(<<-XML).accept @v
49
+ <dummy childActivitySet='#{token}'>
50
+ <imsss:rollupConditions />
51
+ <imsss:rollupAction />
52
+ </dummy>
53
+ XML
54
+ assert_equal token, @v.child_activity_set
55
+ end
56
+ end
57
+
58
+ 0.upto(10) do |n|
59
+ test "minimumCount = '#{n}'" do
60
+ el(<<-XML).accept @v
61
+ <dummy minimumCount='#{n}'>
62
+ <imsss:rollupConditions />
63
+ <imsss:rollupAction />
64
+ </dummy>
65
+ XML
66
+ assert_equal n, @v.minimum_count
67
+ end
68
+ end
69
+
70
+ [0.0, 0.5, 1.0].each do |percent|
71
+ test "minimumPercent = '#{percent}'" do
72
+ el(<<-XML).accept @v
73
+ <dummy minimumPercent='#{percent}'>
74
+ <imsss:rollupConditions />
75
+ <imsss:rollupAction />
76
+ </dummy>
77
+ XML
78
+ assert_equal percent, @v.minimum_percent
79
+ end
80
+ end
81
+
82
+ def assert_error(&block)
83
+ assert_raise RollupRule::Error, &block
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,60 @@
1
+ require_relative '../../helper'
2
+
3
+ module Scorm2004
4
+ module Manifest
5
+ class RollupRulesTest < ActiveSupport::TestCase
6
+ include PartialManifest
7
+
8
+ setup do
9
+ @v = RollupRules.new
10
+ @v.stubs(:rollup_rule_visitor).returns(stub(:visit))
11
+ end
12
+
13
+ test 'a visitor sets default values as its attribute' do
14
+ el.accept @v
15
+ assert_equal true, @v.rollup_objective_satisfied
16
+ assert_equal true, @v.rollup_progress_completion
17
+ assert_equal 1.0, @v.objective_measure_weight
18
+ end
19
+
20
+ test 'a fully-equipped element' do
21
+ rollup_rule_visitor = mock()
22
+ rollup_rule_visitor.expects(:visit).twice
23
+ @v.expects(:rollup_rule_visitor).twice.returns(rollup_rule_visitor)
24
+ el(<<-XML).accept(@v)
25
+ <dummy>
26
+ <imsss:rollupRule />
27
+ <imsss:rollupRule />
28
+ </dummy>
29
+ XML
30
+ end
31
+
32
+ [0.0, 0.5, 1.0].each do |valid_objective_measure_weight|
33
+ tag = <<-XML
34
+ <dummy objectiveMeasureWeight="#{valid_objective_measure_weight}">
35
+ <imsss:rollupRule />
36
+ </dummy>
37
+ XML
38
+ test tag do
39
+ el(tag).accept(@v)
40
+ assert_equal valid_objective_measure_weight, @v.objective_measure_weight
41
+ end
42
+ end
43
+
44
+ [-0.0001, 1.0001].each do |invalid_objective_measure_weight|
45
+ tag = <<-XML
46
+ <dummy objectiveMeasureWeight="#{invalid_objective_measure_weight}">
47
+ <imsss:rollupRule />
48
+ </dummy>
49
+ XML
50
+ test tag do
51
+ assert_error { el(tag).accept(@v) }
52
+ end
53
+ end
54
+
55
+ def assert_error &block
56
+ assert_raise RollupRules::Error, &block
57
+ end
58
+ end
59
+ end
60
+ end