scorm2004-manifest 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|