forked from andreyberya/xml-mapping
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxml_mapping_adv_test.rb
119 lines (107 loc) · 3.51 KB
/
xml_mapping_adv_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
require File.dirname(__FILE__)+"/tests_init"
require 'test/unit'
require 'documents_folders'
require 'bookmarks'
require 'yaml'
class XmlMappingAdvancedTest < Test::Unit::TestCase
def setup
XML::Mapping.module_eval <<-EOS
Classes_by_rootelt_names.clear
EOS
Object.send(:remove_const, "Document")
Object.send(:remove_const, "Folder")
$".delete "documents_folders.rb"
$".delete "bookmarks.rb"
require 'documents_folders'
require 'bookmarks'
@f_xml = REXML::Document.new(File.new(File.dirname(__FILE__) + "/fixtures/documents_folders2.xml"))
@f = XML::Mapping.load_object_from_xml(@f_xml.root)
@bm1_xml = REXML::Document.new(File.new(File.dirname(__FILE__) + "/fixtures/bookmarks1.xml"))
@bm1 = XML::Mapping.load_object_from_xml(@bm1_xml.root)
end
def test_read_polymorphic_object
assert_equal YAML::load(<<-EOS), @f
--- !ruby/object:Folder
entries:
- !ruby/object:Document
contents: " inhale, exhale"
name: plan
- !ruby/object:Folder
entries:
- !ruby/object:Folder
entries:
- !ruby/object:Document
contents: foo bar baz
name: README
name: xml-mapping
name: work
name: home
EOS
end
def test_write_polymorphic_object
xml = @f.save_to_xml
assert_equal "folder", xml.name
assert_equal "home", xml.elements[1].text
assert_equal "document", xml.elements[2].name
assert_equal "folder", xml.elements[3].name
assert_equal "name", xml.elements[3].elements[1].name
assert_equal "folder", xml.elements[3].elements[2].name
assert_equal "foo bar baz", xml.elements[3].elements[2].elements[2].elements[2].text
@f.append "etc", Folder.new
@f["etc"].append "passwd", Document.new
@f["etc"]["passwd"].contents = "foo:x:2:2:/bin/sh"
@f["etc"].append "hosts", Document.new
@f["etc"]["hosts"].contents = "127.0.0.1 localhost"
xml = @f.save_to_xml
xmletc = xml.elements[4]
assert_equal "etc", xmletc.elements[1].text
assert_equal "document", xmletc.elements[2].name
assert_equal "passwd", xmletc.elements[2].elements[1].text
assert_equal "foo:x:2:2:/bin/sh", xmletc.elements[2].elements[2].text
end
def test_read_bookmars1_2
expected = BMFolder.new{|x|
x.name = "root"
x.last_changed = 123
x.entries = [
BM.new{|x|
x.name="ruby"
x.last_changed=345
x.url="http://www.ruby-lang.org"
x.refinement=nil
},
BM.new{|x|
x.name="RAA"
x.last_changed=nil
x.url="http://raa.ruby-lang.org/"
x.refinement=nil
},
BMFolder.new{|x|
x.name="news"
x.last_changed=nil
x.entries = [
BM.new{|x|
x.name="/."
x.last_changed=233
x.url="http://www.slashdot.org/"
x.refinement=nil
},
BM.new{|x|
x.name="groklaw"
x.last_changed=238
x.url="http://www.groklaw.net/"
x.refinement=nil
}
]
}
]
}
# need to compare expected==@bm1 because @bm1.== would be the
# XML::Mapping#== defined in xml_mapping_test.rb ...
assert_equal expected, @bm1
assert_equal "root_set", @bm1.name_set
assert_equal "ruby_set", @bm1.entries[0].name_set
@bm1.entries[0].name = "foobar"
assert_equal "foobar_set", @bm1.entries[0].name_set
end
end