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,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
|