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.
- data/.document +5 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +36 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +94 -0
- data/Rakefile +39 -0
- data/VERSION +1 -0
- data/lib/scorm2004/manifest/adlseq_map_info.rb +17 -0
- data/lib/scorm2004/manifest/adlseq_objective.rb +14 -0
- data/lib/scorm2004/manifest/adlseq_objectives.rb +11 -0
- data/lib/scorm2004/manifest/attributes.rb +147 -0
- data/lib/scorm2004/manifest/children.rb +83 -0
- data/lib/scorm2004/manifest/completion_threshold.rb +13 -0
- data/lib/scorm2004/manifest/condition_rule.rb +12 -0
- data/lib/scorm2004/manifest/constrained_choice_considerations.rb +12 -0
- data/lib/scorm2004/manifest/control_mode.rb +16 -0
- data/lib/scorm2004/manifest/custom_error.rb +15 -0
- data/lib/scorm2004/manifest/data.rb +11 -0
- data/lib/scorm2004/manifest/data_from_lms.rb +21 -0
- data/lib/scorm2004/manifest/delivery_controls.rb +13 -0
- data/lib/scorm2004/manifest/dependency.rb +21 -0
- data/lib/scorm2004/manifest/error.rb +5 -0
- data/lib/scorm2004/manifest/file.rb +16 -0
- data/lib/scorm2004/manifest/hide_lmsui.rb +21 -0
- data/lib/scorm2004/manifest/href.rb +24 -0
- data/lib/scorm2004/manifest/item.rb +36 -0
- data/lib/scorm2004/manifest/limit_conditions.rb +12 -0
- data/lib/scorm2004/manifest/manifest.rb +26 -0
- data/lib/scorm2004/manifest/map.rb +13 -0
- data/lib/scorm2004/manifest/map_info.rb +15 -0
- data/lib/scorm2004/manifest/min_normalized_measure.rb +18 -0
- data/lib/scorm2004/manifest/navigation_interface.rb +10 -0
- data/lib/scorm2004/manifest/objective.rb +16 -0
- data/lib/scorm2004/manifest/objectives.rb +12 -0
- data/lib/scorm2004/manifest/organization.rb +20 -0
- data/lib/scorm2004/manifest/organizations.rb +24 -0
- data/lib/scorm2004/manifest/presentation.rb +10 -0
- data/lib/scorm2004/manifest/primary_objective.rb +24 -0
- data/lib/scorm2004/manifest/randomization_controls.rb +16 -0
- data/lib/scorm2004/manifest/resource.rb +18 -0
- data/lib/scorm2004/manifest/resources.rb +12 -0
- data/lib/scorm2004/manifest/rollup_action.rb +13 -0
- data/lib/scorm2004/manifest/rollup_condition.rb +24 -0
- data/lib/scorm2004/manifest/rollup_conditions.rb +14 -0
- data/lib/scorm2004/manifest/rollup_considerations.rb +17 -0
- data/lib/scorm2004/manifest/rollup_rule.rb +19 -0
- data/lib/scorm2004/manifest/rollup_rules.rb +16 -0
- data/lib/scorm2004/manifest/rule_action.rb +31 -0
- data/lib/scorm2004/manifest/rule_condition.rb +41 -0
- data/lib/scorm2004/manifest/rule_conditions.rb +14 -0
- data/lib/scorm2004/manifest/schema.rb +18 -0
- data/lib/scorm2004/manifest/schemaversion.rb +18 -0
- data/lib/scorm2004/manifest/sequencing.rb +24 -0
- data/lib/scorm2004/manifest/sequencing_collection.rb +11 -0
- data/lib/scorm2004/manifest/sequencing_rules.rb +13 -0
- data/lib/scorm2004/manifest/text_node.rb +11 -0
- data/lib/scorm2004/manifest/time_limit_action.rb +24 -0
- data/lib/scorm2004/manifest/title.rb +16 -0
- data/lib/scorm2004/manifest/visitor_pattern.rb +31 -0
- data/lib/scorm2004/manifest/xml_base.rb +38 -0
- data/lib/scorm2004/manifest.rb +76 -0
- data/lib/scorm2004-manifest.rb +1 -0
- data/test/functional_test.rb +45 -0
- data/test/helper.rb +18 -0
- data/test/mbce_test.rb +66 -0
- data/test/msce_test.rb +55 -0
- data/test/scorm2004/manifest/adlseq_map_info_test.rb +47 -0
- data/test/scorm2004/manifest/adlseq_objective_test.rb +44 -0
- data/test/scorm2004/manifest/adlseq_objectives_test.rb +29 -0
- data/test/scorm2004/manifest/any_uri_token_test.rb +40 -0
- data/test/scorm2004/manifest/attributes_test.rb +224 -0
- data/test/scorm2004/manifest/children_test.rb +330 -0
- data/test/scorm2004/manifest/completion_threshold_test.rb +80 -0
- data/test/scorm2004/manifest/condition_rule_test.rb +40 -0
- data/test/scorm2004/manifest/constrained_choice_considerations_test.rb +25 -0
- data/test/scorm2004/manifest/control_mode_test.rb +41 -0
- data/test/scorm2004/manifest/custom_error_test.rb +43 -0
- data/test/scorm2004/manifest/data_from_lms_test.rb +47 -0
- data/test/scorm2004/manifest/data_test.rb +31 -0
- data/test/scorm2004/manifest/delivery_controls_test.rb +27 -0
- data/test/scorm2004/manifest/dependency_test.rb +53 -0
- data/test/scorm2004/manifest/duration_attribute_test.rb +59 -0
- data/test/scorm2004/manifest/file_test.rb +40 -0
- data/test/scorm2004/manifest/hide_lmsui_test.rb +40 -0
- data/test/scorm2004/manifest/href_test.rb +43 -0
- data/test/scorm2004/manifest/item_test.rb +86 -0
- data/test/scorm2004/manifest/limit_conditions_test.rb +34 -0
- data/test/scorm2004/manifest/manifest_test.rb +152 -0
- data/test/scorm2004/manifest/map_info_test.rb +41 -0
- data/test/scorm2004/manifest/map_test.rb +32 -0
- data/test/scorm2004/manifest/min_normalized_measure_test.rb +28 -0
- data/test/scorm2004/manifest/navigation_interface_test.rb +29 -0
- data/test/scorm2004/manifest/non_negative_integer_attribute_test.rb +64 -0
- data/test/scorm2004/manifest/objective_test.rb +45 -0
- data/test/scorm2004/manifest/objectives_test.rb +37 -0
- data/test/scorm2004/manifest/organization_test.rb +115 -0
- data/test/scorm2004/manifest/organizations_test.rb +68 -0
- data/test/scorm2004/manifest/partial_manifest.rb +23 -0
- data/test/scorm2004/manifest/partial_manifest_test.rb +44 -0
- data/test/scorm2004/manifest/presentation_test.rb +26 -0
- data/test/scorm2004/manifest/primary_objective_test.rb +65 -0
- data/test/scorm2004/manifest/randomization_controls_test.rb +71 -0
- data/test/scorm2004/manifest/resource_test.rb +96 -0
- data/test/scorm2004/manifest/resources_test.rb +41 -0
- data/test/scorm2004/manifest/rollup_action_test.rb +33 -0
- data/test/scorm2004/manifest/rollup_condition_test.rb +42 -0
- data/test/scorm2004/manifest/rollup_conditions_test.rb +53 -0
- data/test/scorm2004/manifest/rollup_considerations_test.rb +42 -0
- data/test/scorm2004/manifest/rollup_rule_test.rb +87 -0
- data/test/scorm2004/manifest/rollup_rules_test.rb +60 -0
- data/test/scorm2004/manifest/rule_action_test.rb +79 -0
- data/test/scorm2004/manifest/rule_condition_test.rb +70 -0
- data/test/scorm2004/manifest/rule_conditions_test.rb +37 -0
- data/test/scorm2004/manifest/schema_test.rb +29 -0
- data/test/scorm2004/manifest/schemaversion_test.rb +29 -0
- data/test/scorm2004/manifest/sequencing_collection_test.rb +31 -0
- data/test/scorm2004/manifest/sequencing_rules_test.rb +36 -0
- data/test/scorm2004/manifest/sequencing_test.rb +42 -0
- data/test/scorm2004/manifest/string_attribute_test.rb +68 -0
- data/test/scorm2004/manifest/text_node_test.rb +37 -0
- data/test/scorm2004/manifest/time_limit_action_test.rb +51 -0
- data/test/scorm2004/manifest/title_test.rb +59 -0
- data/test/scorm2004/manifest/token_attribute_test.rb +53 -0
- data/test/scorm2004/manifest/visitor_pattern_test.rb +85 -0
- data/test/scorm2004/manifest/xml_base_test.rb +125 -0
- data/test/scorm2004/manifest_test.rb +33 -0
- data/test/scorm2004_test.rb +9 -0
- data/test/sece_test.rb +53 -0
- 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
|