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,79 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class RuleActionTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = RuleAction.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empty element causes error' do
|
13
|
+
assert_error do
|
14
|
+
el('<dummy />').accept(@v)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Scorm2004::Manifest::RuleAction::PRE.each do |token|
|
19
|
+
tag = "<imsss:ruleAction action='#{token}' />"
|
20
|
+
context tag do
|
21
|
+
should 'be accepted if it is within <preConditionRule>.' do
|
22
|
+
assert pre_el(tag).accept(@v)
|
23
|
+
end
|
24
|
+
|
25
|
+
should 'cause error if it is within either <postConditionRule> or <exitConditionRule>' do
|
26
|
+
assert_error { post_el(tag).accept(@v) }
|
27
|
+
assert_error { exit_el(tag).accept(@v) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Scorm2004::Manifest::RuleAction::POST.each do |token|
|
33
|
+
tag = "<imsss:ruleAction action='#{token}' />"
|
34
|
+
context tag do
|
35
|
+
should 'be accepted if it is within <postConditionRule>.' do
|
36
|
+
assert post_el(tag).accept(@v)
|
37
|
+
end
|
38
|
+
|
39
|
+
should 'cause error if it is within either <preConditionRule> or <exitConditionRule>' do
|
40
|
+
assert_error { pre_el(tag).accept(@v) }
|
41
|
+
assert_error { exit_el(tag).accept(@v) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
Scorm2004::Manifest::RuleAction::EXIT.each do |token|
|
47
|
+
tag = "<imsss:ruleAction action='#{token}' />"
|
48
|
+
context tag do
|
49
|
+
should 'be accepted if it is within <exitConditionRule>.' do
|
50
|
+
assert exit_el(tag).accept(@v)
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'cause error if it is within either <preConditionRule> or <postConditionRule>' do
|
54
|
+
assert_error { pre_el(tag).accept(@v) }
|
55
|
+
assert_error { post_el(tag).accept(@v) }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def assert_error(&block)
|
63
|
+
assert_raise RuleAction::Error, &block
|
64
|
+
end
|
65
|
+
|
66
|
+
def pre_el(xml)
|
67
|
+
el("<imsss:preConditionRule>#{xml}</imsss:preConditionRule").at('./*')
|
68
|
+
end
|
69
|
+
|
70
|
+
def post_el(xml)
|
71
|
+
el("<imsss:postConditionRule>#{xml}</imsss:postConditionRule").at('./*')
|
72
|
+
end
|
73
|
+
|
74
|
+
def exit_el(xml)
|
75
|
+
el("<imsss:exitConditionRule>#{xml}</imsss:exitConditionRule").at('./*')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class RuleConditionTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = RuleCondition.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empty element causes error' do
|
13
|
+
assert_error do
|
14
|
+
el('<dummy />').accept(@v)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'a visitor sets default operator value' do
|
19
|
+
el('<dummy condition="always" />').accept(@v)
|
20
|
+
assert_equal 'noOp', @v.operator
|
21
|
+
end
|
22
|
+
|
23
|
+
[-1.0, 0.0, 1.0].each do |valid_measure_threshold|
|
24
|
+
test "valid measure threshold: #{valid_measure_threshold}" do
|
25
|
+
el("<dummy measureThreshold='#{valid_measure_threshold}' condition='always' />").accept(@v)
|
26
|
+
assert_equal valid_measure_threshold, @v.measure_threshold
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
[-1.0001, 1.0001].each do |invalid_measure_threshold|
|
31
|
+
test "invalid measure threshold: #{invalid_measure_threshold}" do
|
32
|
+
assert_error do
|
33
|
+
el("<dummy measureThreshold='#{invalid_measure_threshold}' condition='always' />").accept(@v)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Scorm2004::Manifest::RuleCondition::CONDITIONS.each do |token|
|
39
|
+
test "valid condition token: #{token}" do
|
40
|
+
el("<dummy condition='#{token}' />").accept(@v)
|
41
|
+
assert_equal token, @v.condition
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
test 'invalid condition token causes error' do
|
46
|
+
assert_error do
|
47
|
+
el('<dummy condition="invalid" />').accept(@v)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
test 'The referencedObjective attribute cannot be an empty string' do
|
52
|
+
assert_error do
|
53
|
+
el('<dummy referencedObjective="" condition="always" />').accept(@v)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
[" ", "\t", "\n", "\r" ].each do |whitespace|
|
58
|
+
test "The referencedObjective cannot contain #{whitespace.dump}" do
|
59
|
+
assert_error do
|
60
|
+
el("<dummy referencedObjective='foo#{whitespace}bar' condition='always' />").accept(@v)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def assert_error(&block)
|
66
|
+
assert_raise RuleCondition::Error, &block
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class RuleConditionsTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = RuleConditions.new
|
10
|
+
@v.stubs(:rule_condition_visitor).returns(stub(:visit))
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'a visitor set the default value as its attribute' do
|
14
|
+
el('<dummy><imsss:ruleCondition /></dummy>').accept(@v)
|
15
|
+
assert_equal 'all', @v.condition_combination
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'a visitor visits its children' do
|
19
|
+
rule_condition_visitor = mock()
|
20
|
+
rule_condition_visitor.expects(:visit).twice
|
21
|
+
@v.expects(:rule_condition_visitor).twice.returns(rule_condition_visitor)
|
22
|
+
assert el(<<-XML).accept(@v)
|
23
|
+
<dummy>
|
24
|
+
<imsss:ruleCondition />
|
25
|
+
<imsss:ruleCondition />
|
26
|
+
</dummy>
|
27
|
+
XML
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'an element without any <ruleCondition>s causes error' do
|
31
|
+
assert_raise RuleConditions::Error do
|
32
|
+
el('<dummy />').accept(@v)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class SchemaTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = Schema.new
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'a schema visitor visiting a valid element' do
|
13
|
+
should 'not raise exception' do
|
14
|
+
assert_nothing_raised do
|
15
|
+
el('<dummy>ADL SCORM</dummy>').accept(@v)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'a schema visitor visiting an element with invalid schema' do
|
21
|
+
should 'raise exception' do
|
22
|
+
assert_raise Schema::Error do
|
23
|
+
el('<dummy>SCORM</dummy>').accept(@v)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class SchemaversionTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = Schemaversion.new
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'a schemaversion visitor visiting a valid element' do
|
13
|
+
should 'not raise exceptoin' do
|
14
|
+
assert_nothing_raised do
|
15
|
+
el('<dummy>2004 4th Edition</dummy>').accept(@v)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'a schemaversion visitor visiting an element with invalid schemaversion' do
|
21
|
+
should 'raise exception' do
|
22
|
+
assert_raise Schemaversion::Error do
|
23
|
+
el('<dummy>2004 3rd Edition</dummy>').accept(@v)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class SequencingCollectionTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = SequencingCollection.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empety element' do
|
13
|
+
assert_raise SequencingCollection::Error do
|
14
|
+
el('<dummy />').accept(@v)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'an elemeent with two sequencings' do
|
19
|
+
sequencing_visitor = mock()
|
20
|
+
sequencing_visitor.expects(:visit).twice
|
21
|
+
@v.expects(:sequencing_visitor).twice.returns(sequencing_visitor)
|
22
|
+
assert el(<<-XML).accept(@v)
|
23
|
+
<dummy>
|
24
|
+
<imsss:sequencing />
|
25
|
+
<imsss:sequencing />
|
26
|
+
</dummy>
|
27
|
+
XML
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class SequencingRulesTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = SequencingRules.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empty element' do
|
13
|
+
assert el('<dummy />').accept(@v)
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'an element with children' do
|
17
|
+
condition_rule_visitor = mock()
|
18
|
+
condition_rule_visitor.expects(:visit).times(6)
|
19
|
+
@v.expects(:condition_rule_visitor).times(6).returns(condition_rule_visitor)
|
20
|
+
el(<<-XML).accept(@v)
|
21
|
+
<dummy>
|
22
|
+
<imsss:preConditionRule /><imsss:preConditionRule />
|
23
|
+
<imsss:postConditionRule /><imsss:postConditionRule />
|
24
|
+
<imsss:exitConditionRule /><imsss:exitConditionRule />
|
25
|
+
</dummy>
|
26
|
+
XML
|
27
|
+
end
|
28
|
+
|
29
|
+
%w( pre_condition_rules post_condition_rules exit_condition_rules ).each do |children|
|
30
|
+
test "a visitor responds to :#{children}" do
|
31
|
+
assert @v.respond_to? children.intern
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class SequencingTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = Sequencing.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empty element' do
|
13
|
+
assert el('<dummy />').accept(@v)
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'ID attribute' do
|
17
|
+
el('<dummy ID="foo" />').accept(@v)
|
18
|
+
assert_equal 'foo', @v.id
|
19
|
+
end
|
20
|
+
|
21
|
+
test 'an element with children' do
|
22
|
+
%w( control_mode sequencing_rules limit_conditions rollup_rules objectives randomization_controls delivery_controls constrained_choice_considerations rollup_considerations adlseq_objectives ).each do |child|
|
23
|
+
@v.expects("#{child}_visitor".intern).once.returns(mock(:visit))
|
24
|
+
end
|
25
|
+
assert el(<<-XML).accept(@v)
|
26
|
+
<dummy>
|
27
|
+
<imsss:controlMode />
|
28
|
+
<imsss:sequencingRules />
|
29
|
+
<imsss:limitConditions />
|
30
|
+
<imsss:rollupRules />
|
31
|
+
<imsss:objectives />
|
32
|
+
<imsss:randomizationControls />
|
33
|
+
<imsss:deliveryControls />
|
34
|
+
<adlseq:constrainedChoiceConsiderations />
|
35
|
+
<adlseq:rollupConsiderations />
|
36
|
+
<adlseq:objectives />
|
37
|
+
</dummy>
|
38
|
+
XML
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class StringAttributeTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
context 'a visitor for an element with a string attribute' do
|
9
|
+
class SimpleVisitor
|
10
|
+
include VisitorPattern
|
11
|
+
include CustomError
|
12
|
+
include Attributes
|
13
|
+
|
14
|
+
attribute :string, 'foo'
|
15
|
+
end
|
16
|
+
|
17
|
+
setup do
|
18
|
+
@v = SimpleVisitor.new
|
19
|
+
end
|
20
|
+
|
21
|
+
should 'set the string value as its attribute' do
|
22
|
+
el('<dummy foo="bar baz" />').accept(@v)
|
23
|
+
assert_equal 'bar baz', @v.foo
|
24
|
+
end
|
25
|
+
|
26
|
+
should 'raise exception if the attribute does not exist' do
|
27
|
+
assert_raise SimpleVisitor::Error do
|
28
|
+
el('<dummy />').accept(@v)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'a visitor having SPM' do
|
34
|
+
class SpmVisitor
|
35
|
+
include VisitorPattern
|
36
|
+
include CustomError
|
37
|
+
include Attributes
|
38
|
+
|
39
|
+
attribute :string, 'foo', spm: 10
|
40
|
+
end
|
41
|
+
|
42
|
+
should 'raise exception if the value exceeds the SPM' do
|
43
|
+
@v = SpmVisitor.new
|
44
|
+
assert_raise SpmVisitor::Error do
|
45
|
+
el('<dummy foo="' + 'x' * 11 + '" />').accept(@v)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'a visitor for an element with a string attribute optional' do
|
51
|
+
class OptionalVisitor
|
52
|
+
include VisitorPattern
|
53
|
+
include CustomError
|
54
|
+
include Attributes
|
55
|
+
|
56
|
+
attribute :string, 'foo', allow_nil: true
|
57
|
+
end
|
58
|
+
|
59
|
+
should 'not raise exception' do
|
60
|
+
@v = OptionalVisitor.new
|
61
|
+
assert_nothing_raised do
|
62
|
+
el('<dummy />').accept(@v)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class TextNodeTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
class Visitor
|
9
|
+
include VisitorPattern
|
10
|
+
include TextNode
|
11
|
+
end
|
12
|
+
|
13
|
+
setup do
|
14
|
+
@v = Visitor.new
|
15
|
+
el('<dummy>hello world</dummy>').accept(@v)
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'a visitor that includes the TextNode module' do
|
19
|
+
should 'respond_to :content' do
|
20
|
+
assert @v.respond_to? :content
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'respond_to :to_s' do
|
24
|
+
assert @v.respond_to? :to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
should 'alias :to_s :content' do
|
28
|
+
assert_equal @v.to_s, @v.content
|
29
|
+
end
|
30
|
+
|
31
|
+
should 'alias :to_str :content'do
|
32
|
+
assert_equal @v.to_str, @v.content
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class TimeLimitActionTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = TimeLimitAction.new
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'a <adlcp:timeLimitAction> visitor' do
|
13
|
+
should 'respond to :content' do
|
14
|
+
@v.respond_to? :content
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'respond to :to_s' do
|
18
|
+
@v.respond_to? :to_s
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
TimeLimitAction.vocabulary.each do |token|
|
23
|
+
test "<adlcp:timeLimitAction>#{token}</adlcp:timieLimitAction>" do
|
24
|
+
assert_nothing_raised do
|
25
|
+
el("<dummy>#{token}</dummy").accept(@v)
|
26
|
+
end
|
27
|
+
assert_equal token, @v.content
|
28
|
+
assert_equal @v.content, @v.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'an empty element causes error' do
|
33
|
+
assert_error do
|
34
|
+
el('<dummy />').accept(@v)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
test 'an invalid token causes error' do
|
39
|
+
assert_error do
|
40
|
+
el('<dummy>invalid token, error</dummy>').accept(@v)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def assert_error(&block)
|
47
|
+
assert_raise TimeLimitAction::Error, &block
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class TitleTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
context 'a title visitor' do
|
9
|
+
setup do
|
10
|
+
@v = Title.new
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'visiting a title' do
|
14
|
+
setup do
|
15
|
+
@title_content = 'a sample title'
|
16
|
+
el("<title>#{@title_content}</title>").accept(@v)
|
17
|
+
end
|
18
|
+
|
19
|
+
should 'respond to content' do
|
20
|
+
assert @v.respond_to? :content
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'also respond to to_s that aliases content' do
|
24
|
+
assert @v.respond_to? :to_s
|
25
|
+
assert_equal @v.content, @v.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'set a content as its attribute' do
|
29
|
+
assert_equal @title_content, @v.content
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'visiting a too long title' do
|
34
|
+
should 'raise exception' do
|
35
|
+
assert_error do
|
36
|
+
el('<title>' + 'x' * 201 + '</title').accept(@v)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'visiting an empty title element' do
|
42
|
+
should 'raise exception' do
|
43
|
+
assert_error do
|
44
|
+
el('<title />').accept(@v)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def assert_error(&block)
|
53
|
+
assert_raise Title::Error, &block
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# LocalWords: TitleTest PartialManifest el
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class TokenAttributeTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
context 'visitor having a token attribute' do
|
9
|
+
class VisitorHavingTokenAttribute
|
10
|
+
include VisitorPattern
|
11
|
+
include CustomError
|
12
|
+
include Attributes
|
13
|
+
|
14
|
+
attribute :token, 'foo', vocabulary: ['foo', 'bar', 'foo bar']
|
15
|
+
end
|
16
|
+
|
17
|
+
setup do
|
18
|
+
@v = VisitorHavingTokenAttribute.new
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'visiting an element without the attribute' do
|
22
|
+
should 'raise exception' do
|
23
|
+
assert_raise VisitorHavingTokenAttribute::Error do
|
24
|
+
el('<dummy />').accept(@v)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'visiting an element with a valid token attribute' do
|
30
|
+
should 'set the token as the value of the attribute' do
|
31
|
+
el('<dummy foo="bar" />').accept(@v)
|
32
|
+
assert_equal 'bar', @v.foo
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'visiting an element with an invalid token attribute' do
|
37
|
+
should 'raise exception' do
|
38
|
+
assert_raise VisitorHavingTokenAttribute::Error do
|
39
|
+
el('<dummy foo="hoge" />').accept(@v)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'visiting an element with token attribute having leading and trailing spaces' do
|
45
|
+
should 'remove these spaces' do
|
46
|
+
el('<dummy foo=" foo bar " />').accept(@v)
|
47
|
+
assert_equal 'foo bar', @v.foo
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|