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,41 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class ControlModeTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = ControlMode.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'default values' do
|
13
|
+
el('<dummy />').accept(@v)
|
14
|
+
assert_equal true, @v.choice
|
15
|
+
assert_equal true, @v.choice_exit
|
16
|
+
assert_equal false, @v.flow
|
17
|
+
assert_equal false, @v.forward_only
|
18
|
+
assert_equal true, @v.use_current_attempt_objective_info
|
19
|
+
assert_equal true, @v.use_current_attempt_progress_info
|
20
|
+
end
|
21
|
+
|
22
|
+
test 'attributes' do
|
23
|
+
el(<<-XML).accept(@v)
|
24
|
+
<dummy
|
25
|
+
choice="0"
|
26
|
+
choiceExit="0"
|
27
|
+
flow="1"
|
28
|
+
forwardOnly="1"
|
29
|
+
useCurrentAttemptProgressInfo="0"
|
30
|
+
useCurrentAttemptObjectiveInfo="0" />
|
31
|
+
XML
|
32
|
+
assert_equal false, @v.choice
|
33
|
+
assert_equal false, @v.choice_exit
|
34
|
+
assert_equal true, @v.flow
|
35
|
+
assert_equal true, @v.forward_only
|
36
|
+
assert_equal false, @v.use_current_attempt_objective_info
|
37
|
+
assert_equal false, @v.use_current_attempt_progress_info
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class CustomErrorTest < ActiveSupport::TestCase
|
6
|
+
context 'Visitor including the CustomError module' do
|
7
|
+
class Visitor
|
8
|
+
include VisitorPattern
|
9
|
+
include CustomError
|
10
|
+
end
|
11
|
+
|
12
|
+
setup do
|
13
|
+
@v = Visitor.new
|
14
|
+
end
|
15
|
+
|
16
|
+
should 'have its own error class' do
|
17
|
+
assert_kind_of Scorm2004::Manifest::Error, "#{@v.class}::Error".constantize.new
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'have its own error method' do
|
21
|
+
assert @v.respond_to? :error
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'error method' do
|
25
|
+
should 'raise its own exceptoin' do
|
26
|
+
assert_raise "#{@v.class}::Error".constantize do
|
27
|
+
@v.error('dummy message')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
should 'set message' do
|
32
|
+
begin
|
33
|
+
message = 'something wrong'
|
34
|
+
@v.error(message)
|
35
|
+
rescue "#{@v.class}::Error".constantize => e
|
36
|
+
assert_equal message, e.message
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class DataFromLmsTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = DataFromLms.new
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'an <adlcp:dataFromLMS> visitor' do
|
13
|
+
should 'respond to :content' do
|
14
|
+
assert @v.respond_to? :content
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'respond to :to_s' do
|
18
|
+
assert @v.respond_to? :to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'visiting an empty element' do
|
22
|
+
should 'return a blank string as its content' do
|
23
|
+
el('<dummy />').accept(@v)
|
24
|
+
assert_equal '', @v.content
|
25
|
+
assert_equal @v.to_s, @v.content
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'visiting an element' do
|
30
|
+
should 'return the content as its content' do
|
31
|
+
el('<dummy>a sample content</dummy>').accept(@v)
|
32
|
+
assert_equal 'a sample content', @v.content
|
33
|
+
assert_equal @v.to_s, @v.content
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'visitng an element whose content is too large' do
|
38
|
+
should 'raise exception' do
|
39
|
+
assert_raise DataFromLms::Error do
|
40
|
+
el('<dummy>' + 'x' * (DataFromLms.spm + 1) + '</dummy>').accept(@v)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class DataTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = Scorm2004::Manifest::Data.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empty element' do
|
13
|
+
assert_raise Data::Error do
|
14
|
+
el('<dummy />').accept(@v)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'an element with children' do
|
19
|
+
map_visitor = mock()
|
20
|
+
map_visitor.expects(:visit).twice
|
21
|
+
@v.expects(:map_visitor).twice.returns(map_visitor)
|
22
|
+
assert el(<<-XML).accept(@v)
|
23
|
+
<dummy>
|
24
|
+
<adlcp:map />
|
25
|
+
<adlcp:map />
|
26
|
+
</dummy>
|
27
|
+
XML
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class DeliveryControlsTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = DeliveryControls.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'default values' do
|
13
|
+
el.accept @v
|
14
|
+
assert_equal true, @v.tracked
|
15
|
+
assert_equal false, @v.completion_set_by_content
|
16
|
+
assert_equal false, @v.objective_set_by_content
|
17
|
+
end
|
18
|
+
|
19
|
+
test 'attributes' do
|
20
|
+
el('<dummy tracked="0" completionSetByContent="1" objectiveSetByContent="1" />').accept @v
|
21
|
+
assert_equal false, @v.tracked
|
22
|
+
assert_equal true, @v.completion_set_by_content
|
23
|
+
assert_equal true, @v.objective_set_by_content
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class DependencyTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = Dependency.new
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'a dependency visitor' do
|
13
|
+
setup do
|
14
|
+
@v = Dependency.new
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'visiting a dependency element' do
|
18
|
+
should 'set an identifierref value as its attribute' do
|
19
|
+
el(<<-XML).accept(@v)
|
20
|
+
<dependency identifierref="k22" />
|
21
|
+
<resources>
|
22
|
+
<resource identifier="k22" />
|
23
|
+
</resources>
|
24
|
+
XML
|
25
|
+
assert_equal 'k22', @v.identifierref
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'visiting a dependency element without an identifierref attribute' do
|
30
|
+
should 'raise exception' do
|
31
|
+
assert_error do
|
32
|
+
el('<dependency />').accept(@v)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'visiting a dependency element with its referencing resource nonexistent' do
|
38
|
+
should 'raise exceptoin' do
|
39
|
+
assert_error do
|
40
|
+
el('<dependency identifierref="k22" />').accept(@v)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def assert_error(&block)
|
49
|
+
assert_raise(Dependency::Error, &block)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class DurationAttributeTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
context 'an visitor with a duration attribute' do
|
9
|
+
class Visitor
|
10
|
+
include VisitorPattern
|
11
|
+
include CustomError
|
12
|
+
include Attributes
|
13
|
+
|
14
|
+
attribute :duration, 'foo'
|
15
|
+
end
|
16
|
+
|
17
|
+
setup do
|
18
|
+
@v = Visitor.new
|
19
|
+
end
|
20
|
+
|
21
|
+
should 'raise exception when visiting an empty element' do
|
22
|
+
assert_error { el('<dummy />').accept(@v) }
|
23
|
+
end
|
24
|
+
|
25
|
+
%w( PT1004199059S PT130S PT2M10S P1DT2S -P1Y P1Y2M3DT5H20M30.123S ).each do |valid_duration|
|
26
|
+
tag = "<dummy foo='#{valid_duration}' />"
|
27
|
+
should "accept #{tag}" do
|
28
|
+
el(tag).accept(@v)
|
29
|
+
assert_equal valid_duration, @v.foo
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
%w( 1Y P1S P-1Y P1M2Y P1Y-1M ).each do |invalid_duration|
|
34
|
+
tag = "<dumm foo='#{invalid_duration}' />"
|
35
|
+
should "reject #{tag}" do
|
36
|
+
assert_error { el(tag).accept(@v )}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def assert_error(&block)
|
41
|
+
assert_raise Visitor::Error, &block
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'an visitor with a duration attribute optional' do
|
46
|
+
class VisitorWithOptionalAttribute
|
47
|
+
include VisitorPattern
|
48
|
+
include Attributes
|
49
|
+
|
50
|
+
attribute :duration, 'bar', allow_nil: true
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'raise nothing' do
|
54
|
+
assert_nothing_raised { el('<dummy />').accept(VisitorWithOptionalAttribute.new) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class FileTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
context 'a file visitor with its parent no XML Base' do
|
9
|
+
setup do
|
10
|
+
@v = Scorm2004::Manifest::File.new
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'visiting a file element' do
|
14
|
+
should 'set an href value as its attribute' do
|
15
|
+
el('<file href="path/to/file" />').accept(@v)
|
16
|
+
assert_equal 'path/to/file', @v.href
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'visiting a file element without an href attribute' do
|
21
|
+
should 'raise exception' do
|
22
|
+
assert_raise Scorm2004::Manifest::File::Error do
|
23
|
+
el('<file />').accept(@v)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'a file visitor with its parent a path base' do
|
30
|
+
context 'visiting a file element' do
|
31
|
+
should 'set a resolved href value as its attribute' do
|
32
|
+
@v = Scorm2004::Manifest::File.new(base: Pathname('path/to/base'))
|
33
|
+
el('<file href="path/to/file" />').accept(@v)
|
34
|
+
assert_equal 'path/to/base/path/to/file', @v.href
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class HideLmsuiTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = HideLmsui.new
|
10
|
+
end
|
11
|
+
|
12
|
+
HideLmsui.vocabulary.each do |token|
|
13
|
+
tag ="<adlnav:hideLMSUI>#{token}</adlnav:hideLMSUI>"
|
14
|
+
test tag do
|
15
|
+
el(tag).accept(@v)
|
16
|
+
assert_equal token, @v.content
|
17
|
+
assert_equal @v.content, @v.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
test 'an empty element' do
|
22
|
+
assert_error do
|
23
|
+
el('<dummy />').accept(@v)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
test 'an element with an invalid token' do
|
28
|
+
assert_error do
|
29
|
+
el('<dummy>invalidToken</dummy').accept(@v)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def assert_error(&block)
|
36
|
+
assert_raise HideLmsui::Error, &block
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class HrefTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
class Visitor
|
9
|
+
include VisitorPattern
|
10
|
+
include CustomError
|
11
|
+
include XmlBase
|
12
|
+
include Href
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'a visitor with its own base value' do
|
16
|
+
setup do
|
17
|
+
@v = Visitor.new(base: Pathname('a/b/c'))
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'visiting an element with xml:base and href' do
|
21
|
+
should 'calculate the resolved href properly' do
|
22
|
+
el('<dummy xml:base="../../d/e/f/" href="x/y/z.html').accept(@v)
|
23
|
+
assert_equal 'a/d/e/f/x/y/z.html', @v.href
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'visiting an element without href' do
|
28
|
+
should 'return nil for href' do
|
29
|
+
el('<dummy xml:base="../../d/e/f/" />').accept(@v)
|
30
|
+
assert_nil @v.href
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'visiting an element with href' do
|
35
|
+
should 'calculate the resolved href properly' do
|
36
|
+
el('<dummy href="../../x/y/z.html" />').accept(@v)
|
37
|
+
assert_equal 'a/x/y/z.html', @v.href
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class ItemTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
context 'an <item> visitor' do
|
9
|
+
setup do
|
10
|
+
@v = Item.new
|
11
|
+
stubify(@v)
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with expectations visiting a fully-equipped <item> element' do
|
15
|
+
setup do
|
16
|
+
%w( title time_limit_action data_from_lms completion_threshold
|
17
|
+
sequencing presentation data ).each do |singular|
|
18
|
+
@v.expects("#{singular}_visitor".intern).once.returns(mock(:visit))
|
19
|
+
end
|
20
|
+
item_visitor = mock()
|
21
|
+
item_visitor.expects(:visit).twice
|
22
|
+
@v.expects(:item_visitor).twice.returns(item_visitor)
|
23
|
+
el(<<-XML).accept(@v)
|
24
|
+
<item identifier="i92"
|
25
|
+
identifierref="r25"
|
26
|
+
isvisible="false"
|
27
|
+
parameters="?foo=bar#baz">
|
28
|
+
<title />
|
29
|
+
<item />
|
30
|
+
<item />
|
31
|
+
<adlcp:timeLimitAction />
|
32
|
+
<adlcp:dataFromLMS />
|
33
|
+
<adlcp:completionThreshold />
|
34
|
+
<imsss:sequencing />
|
35
|
+
<adlnav:presentation />
|
36
|
+
<adlcp:data />
|
37
|
+
</item>
|
38
|
+
<resources>
|
39
|
+
<resource identifier="r25" />
|
40
|
+
</resources>
|
41
|
+
XML
|
42
|
+
end
|
43
|
+
|
44
|
+
should 'satisfy expectations' do
|
45
|
+
assert @v
|
46
|
+
end
|
47
|
+
|
48
|
+
should 'set an identifier value as its attribute' do
|
49
|
+
assert_equal 'i92', @v.identifier
|
50
|
+
end
|
51
|
+
|
52
|
+
should 'set an identifierref value as its attribute' do
|
53
|
+
assert_equal 'r25', @v.identifierref
|
54
|
+
end
|
55
|
+
|
56
|
+
should 'set an isvisible value as its attribute' do
|
57
|
+
assert_equal false, @v.isvisible
|
58
|
+
end
|
59
|
+
|
60
|
+
should 'set a paramters value as its attribute' do
|
61
|
+
assert_equal '?foo=bar#baz', @v.parameters
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'visiting a bare <item> element' do
|
66
|
+
should 'set default values as its attributes' do
|
67
|
+
el('<item identifier="r26"><title /><item /></item>').accept(@v)
|
68
|
+
assert_equal "r26", @v.identifier
|
69
|
+
assert_equal nil, @v.identifierref
|
70
|
+
assert_equal true, @v.isvisible
|
71
|
+
assert_equal nil, @v.parameters
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def stubify(visitor)
|
79
|
+
%w( title item time_limit_action data_from_lms completion_thoreshold
|
80
|
+
sequencing presentation data ).each do |child|
|
81
|
+
visitor.stubs("#{child}_visitor".intern).returns(stub(:visit))
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
module Scorm2004
|
4
|
+
module Manifest
|
5
|
+
class LimitConditionsTest < ActiveSupport::TestCase
|
6
|
+
include PartialManifest
|
7
|
+
|
8
|
+
setup do
|
9
|
+
@v = LimitConditions.new
|
10
|
+
end
|
11
|
+
|
12
|
+
test 'an empty element' do
|
13
|
+
assert el('<dummy />').accept(@v)
|
14
|
+
end
|
15
|
+
|
16
|
+
%w( 0 1 001 +41 001002 ).each do |valid_number|
|
17
|
+
tag = "<dummy attemptLimit='#{valid_number}' />"
|
18
|
+
test tag do
|
19
|
+
el(tag).accept(@v)
|
20
|
+
assert_equal Integer(valid_number, 10), @v.attempt_limit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
%w( -1 +0.1 1.000 ).each do |invalid_number|
|
25
|
+
tag = "<dummy attemptLimit='#{invalid_number}' />"
|
26
|
+
test tag do
|
27
|
+
assert_raise LimitConditions::Error do
|
28
|
+
el(tag).accept(@v)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|