eadcodec 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,76 @@
1
+ require "TestEAD"
2
+ require "EADSubordinates"
3
+ require "EADLevel"
4
+
5
+ class TestEADLevel < TestEAD
6
+ def initialize(*args)
7
+ super(*args)
8
+
9
+ @test_file = "test_ead_level.xml"
10
+ end
11
+
12
+ def test_attrs
13
+ dsc = EAD::EADSubordinates.new
14
+ @ead.add_descelem(dsc)
15
+
16
+ c01 = EAD::EADLevel.new
17
+ c01.did = EAD::EADDescription.new
18
+ c01.phystech = EAD::EADPhysTech.new
19
+ dsc.add_level(c01)
20
+
21
+ c02 = EAD::EADLevel.new
22
+ c01.add_level(c02)
23
+
24
+ c03 = EAD::EADLevel.new
25
+ c02.add_level(c03)
26
+
27
+ export
28
+ element_exists("/ead/archdesc/dsc/c01", "Check that the level was added")
29
+ element_exists("/ead/archdesc/dsc/c01/did", "Check that the description was added")
30
+ element_exists("/ead/archdesc/dsc/c01/phystech", "Check that the phystech was added")
31
+ element_exists("/ead/archdesc/dsc/c01/c02", "Check that the second level was added")
32
+ element_exists("/ead/archdesc/dsc/c01/c02/c03", "Check that the third level was added")
33
+ end
34
+
35
+ def test_import
36
+ import
37
+ dsc = @ead.descelems[0]
38
+ assert(dsc.levels[0], "Check that the level was imported")
39
+ assert(dsc.levels[0].did, "Check that the description was imported")
40
+ assert(dsc.levels[0].levels[0], "Check that the second level was imported")
41
+ assert(dsc.levels[0].levels[0].levels[0], "Check that the third level was imported")
42
+ end
43
+
44
+ def test_attrs_unnumbered
45
+ dsc = EAD::EADSubordinates.new
46
+ @ead.add_descelem(dsc)
47
+
48
+ c01 = EAD::EADLevel.new
49
+ c01.set_unnumbered
50
+ c01.did = EAD::EADDescription.new
51
+ c01.phystech = EAD::EADPhysTech.new
52
+ dsc.add_level(c01)
53
+
54
+ c02 = EAD::EADLevel.new
55
+ c01.add_level(c02)
56
+
57
+ c03 = EAD::EADLevel.new
58
+ c02.add_level(c03)
59
+
60
+ export
61
+ element_exists("/ead/archdesc/dsc/c", "Check that the level was added")
62
+ element_exists("/ead/archdesc/dsc/c/did", "Check that the description was added")
63
+ element_exists("/ead/archdesc/dsc/c/phystech", "Check that the phystech was added")
64
+ element_exists("/ead/archdesc/dsc/c/c", "Check that the second level was added")
65
+ element_exists("/ead/archdesc/dsc/c/c/c", "Check that the third level was added")
66
+ end
67
+
68
+ def test_import_unnumbered
69
+ import
70
+ dsc = @ead.descelems[0]
71
+ assert(dsc.levels[0], "Check that the level was imported")
72
+ assert(dsc.levels[0].did, "Check that the description was imported")
73
+ assert(dsc.levels[0].levels[0], "Check that the second level was imported")
74
+ assert(dsc.levels[0].levels[0].levels[0], "Check that the third level was imported")
75
+ end
76
+ end
@@ -0,0 +1,36 @@
1
+ require "TestEAD"
2
+ require "EADNote"
3
+
4
+ class TestEADNote < TestEAD
5
+ def initialize(*args)
6
+ super(*args)
7
+
8
+ @test_file = "test_ead_note.xml"
9
+ @p = "Test p"
10
+ end
11
+
12
+ def test_attrs
13
+ dsc = EAD::EADSubordinates.new
14
+ @ead.add_descelem(dsc)
15
+
16
+ c01 = EAD::EADLevel.new
17
+ dsc.add_level(c01)
18
+
19
+ sc = EAD::EADNote.new
20
+ sc.p << EAD::EADP.new(@p)
21
+ sc.p << EAD::EADP.new(@p)
22
+ c01.note = sc
23
+
24
+ export
25
+ element_exists("/ead/archdesc/dsc/c01/note", "Check that the scopecontent was added")
26
+ compare_xpath(@p, "/ead/archdesc/dsc/c01/note/p")
27
+ end
28
+
29
+
30
+ def test_import
31
+ import
32
+ note = @ead.descelems[0].levels[0].note
33
+ assert_equal(@p, note.p[0].value)
34
+ assert_equal(@p, note.p[1].value)
35
+ end
36
+ end
@@ -0,0 +1,44 @@
1
+ require "TestEAD"
2
+
3
+ class TestEADPhysTech < TestEAD
4
+ def initialize(*args)
5
+ super(*args)
6
+ @test_file = "test_ead_phystech.xml"
7
+ @head = "HEADTest"
8
+ @ptext = "Some Text "
9
+ end
10
+
11
+ def test_export
12
+ phystech = EAD::EADPhysTech.new
13
+ phystech.head = @head
14
+ (1..4).each {|i| phystech.p << EAD::EADP.new(@ptext+i.to_s)}
15
+
16
+ did = EAD::EADDescription.new
17
+ did.head = "head"
18
+ did.unitid = "id"
19
+
20
+ @ead.archdesc.phystech = phystech
21
+ @ead.archdesc.did = did
22
+ export
23
+
24
+ # Since we've added content it is now valid EAD
25
+ validate_dtd
26
+
27
+ element_exists("/ead/archdesc/phystech", "Test did exists")
28
+ compare_xpath(@head, "/ead/archdesc/phystech/head")
29
+ (1..4).each do |i|
30
+ compare_xpath(@ptext+i.to_s, "/ead/archdesc/phystech/p["+i.to_s+"]")
31
+ end
32
+ end
33
+
34
+
35
+ def test_import
36
+ import
37
+ phystech = @ead.archdesc.phystech
38
+
39
+ assert_equal(@head, phystech.head.value)
40
+ (1..4).each do |i|
41
+ assert_equal(@ptext+i.to_s, phystech.p[i-1].value)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,43 @@
1
+ require "TestEAD"
2
+ require "EADSubordinates"
3
+ require "EADLevel"
4
+ require "EADScopeContent"
5
+
6
+ class TestEADScopeContent < TestEAD
7
+ def initialize(*args)
8
+ super(*args)
9
+
10
+ @test_file = "test_ead_scopecontent.xml"
11
+ @head = "Test Head"
12
+ @p = "Test p"
13
+ end
14
+
15
+ def test_attrs
16
+ dsc = EAD::EADSubordinates.new
17
+ @ead.add_descelem(dsc)
18
+
19
+ c01 = EAD::EADLevel.new
20
+ dsc.add_level(c01)
21
+
22
+ sc = EAD::EADScopeContent.new
23
+ sc.head = @head
24
+ sc.p << EAD::EADP.new(@p)
25
+ sc.p << EAD::EADP.new(@p)
26
+ c01.scopecontent = sc
27
+
28
+ export
29
+ element_exists("/ead/archdesc/dsc/c01/scopecontent", "Check that the scopecontent was added")
30
+ compare_xpath(@head, "/ead/archdesc/dsc/c01/scopecontent/head")
31
+ compare_xpath(@p, "/ead/archdesc/dsc/c01/scopecontent/p")
32
+ end
33
+
34
+
35
+ def test_import
36
+ import
37
+ assert_equal(1, @ead.archdesc.dsc[0].c.size)
38
+ sc = @ead.archdesc.dsc[0].c[0].scopecontent
39
+ assert_equal(@head, sc.head.value)
40
+ assert_equal(@p, sc.p[0].value)
41
+ assert_equal(@p, sc.p[1].value)
42
+ end
43
+ end
@@ -0,0 +1,109 @@
1
+ require "TestEAD"
2
+ require "EADStreamParser"
3
+ require "rexml/document"
4
+
5
+ class MyEADStreamListener
6
+ attr_reader :eadheader, :did
7
+
8
+ def el_eadheader(el)
9
+ @eadheader = el
10
+ end
11
+
12
+ def el_did(el)
13
+ @did = el
14
+ end
15
+ end
16
+
17
+ class MyEADStreamListener2
18
+ attr_reader :dsc, :c01
19
+
20
+ def el_dsc(el)
21
+ @dsc = el
22
+ end
23
+
24
+ def el_c01(el)
25
+ @c01 = el
26
+ end
27
+ end
28
+
29
+ class TestEADStreamParser < TestEAD
30
+ def initialize(*args)
31
+ super(*args)
32
+
33
+ @test_file = "test_ead_stream_parser.xml"
34
+
35
+ @head = "HEADTest"
36
+ @origination = "somwhere"
37
+ @unittitle = "Some Title"
38
+ @unitid = "15235"
39
+ @abstract = "Some Abstract"
40
+ @physdesc = "Some Description"
41
+ @physloc = "Some Location"
42
+
43
+ @unitdate = "1/1/2001"
44
+ @unitdatelabel = "TestLabel"
45
+ @unitdatetype = "inclusive"
46
+ end
47
+
48
+ def test_base_import
49
+ did = EAD::EADDescription.new
50
+ did.head = @head
51
+ did.origination = @origination
52
+ did.unittitle = @unittitle
53
+ did.unitid = @unitid
54
+ did.abstract = @abstract
55
+ did.physdesc = @physdesc
56
+ did.physloc = @physloc
57
+
58
+ did.unitdate = EAD::EADUnitDate.new(@unitdate)
59
+ did.unitdate.label = @unitdatelabel
60
+ did.unitdate.type = @unitdatetype
61
+
62
+ @ead.add_description(did)
63
+
64
+ export
65
+
66
+ listener = MyEADStreamListener.new
67
+ parser = EAD::EADStreamParser.new(listener)
68
+ parser.parse(File.new(@test_file))
69
+
70
+ assert(listener.eadheader, "Header was not imported")
71
+ assert_equal("1", listener.eadheader.eadid.value)
72
+ assert_equal("Teste", listener.eadheader.eadtitle.value)
73
+
74
+ assert(listener.did, "DID was not imported")
75
+ did = listener.did
76
+
77
+ xmlstr = did.create_xml(REXML::Document.new).to_s
78
+ assert_equal(did.__xml_text.tr(" \n\t",""), xmlstr.tr(" \n\t",""))
79
+
80
+ assert_equal(@head, did.head.value)
81
+ assert_equal(@origination, did.origination.value)
82
+ assert_equal(@unittitle, did.unittitle.value)
83
+ assert_equal(@unitid, did.unitid.value)
84
+ assert_equal(@abstract, did.abstract.value)
85
+ assert_equal(@physdesc, did.physdesc.value)
86
+ assert_equal(@physloc, did.physloc.value)
87
+
88
+ assert_equal(@unitdate, did.unitdate.value)
89
+ assert_equal(@unitdatelabel, did.unitdate.label)
90
+ assert_equal(@unitdatetype, did.unitdate.type)
91
+ end
92
+
93
+ def test_level_numbering
94
+ dsc = EAD::EADSubordinates.new
95
+ @ead.add_descelem(dsc)
96
+
97
+ c01 = EAD::EADLevel.new
98
+ dsc.add_level(c01)
99
+
100
+ export
101
+
102
+ listener = MyEADStreamListener2.new
103
+ parser = EAD::EADStreamParser.new(listener)
104
+ parser.parse(File.new(@test_file))
105
+
106
+ assert(listener.dsc, "DSC was not imported")
107
+ assert_equal(listener.dsc.element_id, listener.c01.parent_id)
108
+ end
109
+ end
@@ -0,0 +1,33 @@
1
+ require "TestEAD"
2
+ require "EADSubordinates"
3
+
4
+ class TestEADSubordinates < TestEAD
5
+
6
+ def initialize(*args)
7
+ super(*args)
8
+
9
+ @test_file = "test_ead_subordinates.xml"
10
+
11
+ @type = "combined"
12
+ @head = "Some head"
13
+ end
14
+
15
+ def test_attrs
16
+ dsc = EAD::EADSubordinates.new
17
+ dsc.type = @type
18
+ dsc.head = @head
19
+
20
+ @ead.add_descelem(dsc)
21
+ export
22
+ compare_xpath(@type, "/ead/archdesc/dsc/@type")
23
+ compare_xpath(@head, "/ead/archdesc/dsc/head")
24
+ end
25
+
26
+ def test_import
27
+ import
28
+ dsc = @ead.descelems[0]
29
+
30
+ assert_equal(@type, dsc.type)
31
+ assert_equal(@head, dsc.head.value)
32
+ end
33
+ end
@@ -0,0 +1,40 @@
1
+ require "TestEAD"
2
+ require "EADSubtitle"
3
+
4
+ class TestEADSubtitle < TestEAD
5
+ def setup
6
+ super
7
+ @test_file = "test_ead_subtitle.xml"
8
+ @abbr = "testeabbr"
9
+ @text = "ABCD"
10
+ end
11
+
12
+ def test_base_export
13
+ titlestmt = @ead.eadheader.filedesc.titlestmt
14
+
15
+ st = titlestmt.subtitle = EAD::EADSubtitle.new
16
+ st.subelements << @text
17
+ st.subelements << EAD::EADAbbr.new(@abbr)
18
+ st.subelements << @text
19
+ st.subelements << EAD::EADAbbr.new(@abbr)
20
+
21
+ export
22
+ # The base document has an empty archdesc and is thus not valid EAD
23
+ # Just check for well-formed XML, although REXML will probably never
24
+ # output anything else.
25
+ validate_well_formed
26
+
27
+ compare_xpath("1", "/ead/eadheader/eadid")
28
+ compare_xpath("Teste", "/ead/eadheader/filedesc/titlestmt/titleproper")
29
+ compare_xpath(@abbr, "/ead/eadheader/filedesc/titlestmt/subtitle/abbr")
30
+ end
31
+
32
+ def test_base_import
33
+ import
34
+ st = @ead.eadheader.filedesc.titlestmt.subtitle
35
+ assert_equal(@text, st.subelements[0].to_s)
36
+ assert_equal(@abbr, st.subelements[1].to_s)
37
+ assert_equal(@text, st.subelements[2].to_s)
38
+ assert_equal(@abbr, st.subelements[3].to_s)
39
+ end
40
+ end
@@ -0,0 +1,53 @@
1
+ require "TestEAD"
2
+
3
+ class TestPartialExport < TestEAD
4
+ def setup
5
+ super
6
+ @test_file = "test_ead_partial_export.xml"
7
+ @head = "Test head"
8
+ @type = "combined"
9
+ end
10
+
11
+ def test_partial_export
12
+ file = File.open(@test_file, "w")
13
+
14
+ did = EAD::EADDescription.new
15
+ did.head = "abc"
16
+ did.unitid = "teste"
17
+ @ead.archdesc.did = did
18
+
19
+ dsc = EAD::EADSubordinates.new
20
+ dsc.type = @type
21
+ @ead.archdesc.dsc << dsc
22
+
23
+ c01 = EAD::EADLevel.new
24
+ c01.did = EAD::EADDescription.new
25
+ c01.did.head = "abc"
26
+ c01.did.unitid = "teste"
27
+
28
+ dsc.c << c01
29
+ c01.partial_export(file)
30
+
31
+ c01 = EAD::EADLevel.new
32
+ c01.did = EAD::EADDescription.new
33
+ c01.did.head = "abc"
34
+ c01.did.unitid = "teste"
35
+ sc = EAD::EADScopeContent.new
36
+ sc.p << EAD::EADP.new('value1')
37
+ sc.p << EAD::EADP.new('value2')
38
+ c01.scopecontent = sc
39
+
40
+ dsc.c << c01
41
+ c01.partial_export(file)
42
+
43
+ @ead.end_partial_export(file)
44
+
45
+ file.close
46
+
47
+ validate_dtd
48
+ compare_xpath("fonds", "/ead/archdesc/@level")
49
+ compare_xpath(@type, "/ead/archdesc/dsc/@type")
50
+ element_exists("/ead/archdesc/dsc/c01", "Check that the level was added")
51
+ element_exists("/ead/archdesc/dsc/c01/did", "Check that the description was added")
52
+ end
53
+ end
@@ -0,0 +1,126 @@
1
+ $-w = true
2
+
3
+ require "test/unit"
4
+ require "xmlcodec"
5
+ require "EAD"
6
+ require "TestEAD"
7
+
8
+ class MyStreamListener
9
+ attr_reader :ead
10
+ def el_ead(el)
11
+ @ead = el.get_object
12
+ end
13
+ end
14
+
15
+ class MyConsumingStreamListener
16
+ attr_reader :ead
17
+ def el_ead(el)
18
+ @ead = el.get_object
19
+ end
20
+
21
+ def el_c02(el)
22
+ el.consume
23
+ end
24
+ end
25
+
26
+ class TestXMLStreamObjectParser < TestEAD
27
+ def initialize(*args)
28
+ super(*args)
29
+
30
+ @test_file = "test_ead_stream_object_parser.xml"
31
+ end
32
+
33
+ def test_import
34
+ @ead.eadheader.id = "1"
35
+
36
+ dsc = EAD::EADSubordinates.new
37
+ @ead.add_descelem(dsc)
38
+
39
+ c01 = EAD::EADLevel.new
40
+ c01.did = EAD::EADDescription.new
41
+ c01.phystech = EAD::EADPhysTech.new
42
+ dsc.add_level(c01)
43
+
44
+ c02 = EAD::EADLevel.new
45
+ c01.add_level(c02)
46
+
47
+ c03 = EAD::EADLevel.new
48
+ c02.add_level(c03)
49
+
50
+ export
51
+ listener = MyStreamListener.new
52
+ parser = XMLCodec::XMLStreamObjectParser.new(listener)
53
+ parser.parse(File.new(@test_file))
54
+ @ead = listener.ead
55
+
56
+ assert_equal(@ead, parser.top_element)
57
+
58
+ assert_equal("1", @ead.eadheader.eadid.value)
59
+ assert_equal("1", @ead.eadheader.id)
60
+ assert_equal("Teste", @ead.eadheader.eadtitle.value)
61
+
62
+ dsc = @ead.descelems[0]
63
+ assert(dsc.levels[0], "Check that the level was imported")
64
+ assert(dsc.levels[0].did, "Check that the description was imported")
65
+ assert(dsc.levels[0].levels[0], "Check that the second level was imported")
66
+ assert(dsc.levels[0].levels[0].levels[0], "Check that the third level was imported")
67
+ end
68
+
69
+ def test_consume
70
+ @ead.eadheader.id = "1"
71
+
72
+ dsc = EAD::EADSubordinates.new
73
+ @ead.add_descelem(dsc)
74
+
75
+ c01 = EAD::EADLevel.new
76
+ c01.did = EAD::EADDescription.new
77
+ c01.phystech = EAD::EADPhysTech.new
78
+ dsc.add_level(c01)
79
+
80
+ c02 = EAD::EADLevel.new
81
+ c01.add_level(c02)
82
+
83
+ c03 = EAD::EADLevel.new
84
+ c02.add_level(c03)
85
+
86
+ export
87
+
88
+ listener = MyConsumingStreamListener.new
89
+ parser = XMLCodec::XMLStreamObjectParser.new(listener)
90
+ parser.parse(File.new(@test_file))
91
+ @ead = listener.ead
92
+
93
+ dsc = @ead.descelems[0]
94
+ assert(dsc.levels[0], "Check that the level was imported")
95
+ assert(dsc.levels[0].did, "Check that the description was imported")
96
+ assert_equal(0, dsc.levels[0].levels.size, "Check that c03 was consumed")
97
+ end
98
+
99
+ def test_numbering
100
+ @ead.eadheader.id = "1"
101
+
102
+ dsc = EAD::EADSubordinates.new
103
+ @ead.add_descelem(dsc)
104
+
105
+ c01 = EAD::EADLevel.new
106
+ c01.did = EAD::EADDescription.new
107
+ c01.phystech = EAD::EADPhysTech.new
108
+ dsc.add_level(c01)
109
+
110
+ export
111
+
112
+ listener = MyStreamListener.new
113
+ parser = XMLCodec::XMLStreamObjectParser.new(listener)
114
+ parser.parse(File.new(@test_file))
115
+ @ead = listener.ead
116
+
117
+ dsc = @ead.descelems[0]
118
+ c01 = dsc.levels[0]
119
+
120
+ assert(dsc.element_id)
121
+ assert(dsc.parent_id)
122
+ assert(c01.element_id)
123
+ assert(c01.parent_id)
124
+ assert_equal(c01.parent_id, dsc.element_id)
125
+ end
126
+ end