scorm2004-manifest 0.1.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.
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