blackwinter-libxslt-ruby 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ <!ELEMENT commentary (meta, body)>
2
+ <!ELEMENT meta (author, version, date, id, title, subtitle?)>
3
+
4
+ <!-- Metadata about the requirements -->
5
+ <!ENTITY % string "#PCDATA">
6
+ <!ENTITY % character "#PCDATA">
7
+ <!ENTITY % letter "#PCDATA">
8
+ <!ENTITY % number_att "CDATA">
9
+
10
+
11
+ <!ELEMENT author (first_name, last_name, email)>
12
+
13
+ <!ELEMENT first_name (%string;)>
14
+ <!ELEMENT last_name (%string;)>
15
+ <!ELEMENT email (%string;)>
16
+
17
+ <!ELEMENT version (#PCDATA)>
18
+ <!ELEMENT date (#PCDATA)>
19
+ <!ELEMENT id (#PCDATA)>
20
+ <!ELEMENT title (#PCDATA)>
21
+ <!ELEMENT subtitle (#PCDATA)>
22
+
23
+ <!ELEMENT body (para+)>
24
+
25
+
26
+ <!ELEMENT para (#PCDATA|thought|url|ol)*>
27
+ <!ATTLIST para
28
+ style (default|ps) "default">
29
+
30
+ <!ELEMENT ol (li+)>
31
+ <!ELEMENT li (#PCDATA)>
32
+ <!ELEMENT url (#PCDATA)>
33
+ <!ELEMENT thought (#PCDATA)>
34
+
@@ -0,0 +1,154 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <?xml-stylesheet href="fuzface.xsl" type="text/xsl"?>
3
+
4
+ <!DOCTYPE commentary SYSTEM "commentary.dtd">
5
+
6
+ <commentary>
7
+ <meta>
8
+ <author>
9
+ <first_name>Sean</first_name>
10
+ <last_name>Chittenden</last_name>
11
+ <email>sean@chittenden.org</email>
12
+ </author>
13
+ <version>$Version$</version>
14
+ <date>$Date$</date>
15
+ <id>$Id$</id>
16
+ <title>Fuzface...</title>
17
+ <subtitle>The Internet's a big place and here's some proof...</subtitle>
18
+ </meta>
19
+
20
+ <body>
21
+ <para>
22
+ I think it's a tragedy that I'm going to start off my new
23
+ commentary by talking about facial hair and the Internet.
24
+ Something about that just screams pathetic, but whatever: it's
25
+ humor and that's life.
26
+ </para>
27
+
28
+ <para>
29
+ I've been working at home for a while now, which has been great.
30
+ I've been doing a lot of reading, good work, contributing to the
31
+ FreeBSD project, and living life at my own pace. The problem?
32
+ I don't have to interact with people, so I've let my appearance
33
+ slide a bit, most notably I've gone two weeks without shaving
34
+ and I have an awful hairy face.
35
+ </para>
36
+
37
+ <para>
38
+ Nothing is worse than going for a hard run, coming back, and
39
+ then bending your head down so that the hairs under your chin
40
+ touch the hairs on your neck. This has to be one of the most
41
+ disgusting/gross feelings I've experienced in a while. While
42
+ today wasn't the first time I'd experienced such a slimy tangled
43
+ mess, it is the first time I seriously considered shaving part
44
+ of my face, but not all of it: I was considering a beard.
45
+ </para>
46
+
47
+ <para>
48
+ Alright, so it's 5pm and I'm a sweaty post-run mess (it was 110
49
+ degrees in direct sunlight according to my thermometer) and
50
+ considering the possibility of growing a beard. Swifty nift?
51
+ Maybe. This is something I'd never done before, let alone
52
+ seriously consider. Normally I'd call my dad for such manly
53
+ advice, but he is: a) normally in another state, and; b) in
54
+ another country right now probably growing a beard (he's
55
+ notorious for coming back from a trip with a gnarly unshaven
56
+ face, sometimes he'll shape it into a decent beard). So, what's
57
+ a tech-junkie to do? Hop on the Internet and see if Google's
58
+ able to provide me with some inspiration.
59
+ </para>
60
+
61
+ <para>
62
+ Sure enough, I typed in "pictures of bearded men" and I was able
63
+ to find something: 14,000 pages of something to be exact.
64
+ Anyway, so most of these were rinky dink sites, a few of them
65
+ had some promise. One guy was trying to start a tradition where
66
+ everyone grows a beard for New Years. As I was scrolling down
67
+ the page trying to find some pictures, my mind was having the
68
+ following thought process: <thought>This seems like a dumb
69
+ idea... New Years provides a perfectly good excuse to kiss some
70
+ total stranger that you've had your eye on for the duration of a
71
+ New Years party. Why waste such an opportunity with a crappy
72
+ kiss?</thought> And at about this point I said this page sucks,
73
+ and flipped back to my search results.
74
+ </para>
75
+
76
+ <para>
77
+ Since I'd never done this before, I didn't know what was
78
+ fashionably correct in terms of where a guy should shave under
79
+ his neck, or what the deal was... I knew there were lots of
80
+ styles out there, just none that I could picture in my mind
81
+ (save maybe Santa Claus and a few really gnarly beards that are
82
+ long enough to be used as full-body covering. Oooh! And don't
83
+ forget the Russian and Amish beards, those stand out in my mind
84
+ too.). Google, being pretty comprehensive, and the Internet
85
+ being huge, found the exact screwball page I was looking for:
86
+ <url>http://fuzface-gallery.tripod.com/</url>
87
+ </para>
88
+
89
+ <para>
90
+ I don't know if I really should be amazed at the sheer number of
91
+ entries that Google returned, or that the Internet is big enough
92
+ to house such random gallery of crap, but it is and it never
93
+ ceases to amaze me... it's almost as amazing as the fact that
94
+ some bozo spent the time to create such a page. Don't people
95
+ have lives? Oh wait, I just visited his page... so back to my
96
+ diatribe...
97
+ </para>
98
+
99
+ <para>
100
+ There were tons of faces, lots of men, lots of hair, and plenty
101
+ of styles to choose from. Page after page of faces and hair.
102
+ Ugh. This wasn't getting any where and I was now entertaining
103
+ the rebound though of shaving my head. Time to close my browser
104
+ and hop in the shower: I reak. So what'd I do? Well, after
105
+ looking through enough of those pictures, I decided a few
106
+ things:
107
+ </para>
108
+
109
+ <para>
110
+ <ol>
111
+ <li>
112
+ I'm amazed that the Internet is big enough to foster the
113
+ creation of such random and utterly useless information. Then
114
+ again, I've been on and using the Net since '95, so this
115
+ shouldn't surprise me that much.
116
+ </li>
117
+
118
+ <li>
119
+ There are a lot of guys out there with varying tastes in,
120
+ shall we say, "facial hair styles," most of which I find
121
+ pretty unappealing.
122
+ </li>
123
+
124
+ <li>
125
+ I don't like beards. After one clogged drain, two
126
+ reapplications of shaving cream, and a few pases with the
127
+ razor, it took me about 5-10 minutes to get a nice cleanly
128
+ shaven face.
129
+ </li>
130
+
131
+ <li>
132
+ &lt;crass comment&gt;And - back me up here fellas, you can
133
+ sympathize with this feeling after you get done looking
134
+ through a magazine for a hair-cut style (ladies.. just smile
135
+ and nod and pretend you care) - after looking at a few dozen
136
+ pictures of men, I was able to safely reaffirm my desire for
137
+ heterosexual relations (translation from Bill Clintonese: have
138
+ sex with a woman). And with that thought in mind, I began to
139
+ pine for the college porn collection of old. Mmmm,
140
+ Playboy.&lt;/crass comment&gt;
141
+ </li>
142
+ </ol>
143
+ </para>
144
+
145
+ <para>
146
+ ::grin:: Until next time. -Sean
147
+ </para>
148
+
149
+ <para style="ps">
150
+ P.S. To the guys out there with beards, this is just my
151
+ opinion: take it with a grain of salt.
152
+ </para>
153
+ </body>
154
+ </commentary>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" ?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
+ <xsl:include href="ramblings.xsl" />
4
+ </xsl:stylesheet>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <doc>abc</doc>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version='1.0'
3
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
4
+ xmlns:foo='http://example.com/foo'
5
+ exclude-result-prefixes='foo'>
6
+
7
+ <xsl:param name='bar'>failure</xsl:param>
8
+ <xsl:template match='/'>
9
+ <article><xsl:value-of select='$bar'/></article>
10
+ </xsl:template>
11
+ </xsl:stylesheet>
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" ?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
+ <xsl:template match="/">
4
+ <xsl:element name="html">
5
+ <xsl:element name="head">
6
+ <xsl:element name="title">Ramblings - <xsl:value-of select="commentary/meta/title" /> - <xsl:value-of select="commentary/meta/subtitle" /></xsl:element>
7
+ </xsl:element>
8
+
9
+ <xsl:element name="body">
10
+ <xsl:element name="h1"><xsl:value-of select="commentary/meta/title" /></xsl:element>
11
+ <xsl:element name="h3"><xsl:value-of select="commentary/meta/subtitle" /></xsl:element>
12
+ By: <xsl:value-of select="commentary/meta/author/first_name" /> <xsl:value-of select="commentary/meta/author/last_name" /><xsl:element name="br" />
13
+ Date: <xsl:value-of select="commentary/meta/date" /><xsl:element name="br" />
14
+
15
+ <xsl:for-each select="./commentary/body">
16
+ <xsl:apply-templates />
17
+ </xsl:for-each>
18
+
19
+ </xsl:element>
20
+ </xsl:element>
21
+ </xsl:template>
22
+
23
+ <xsl:template match="para">
24
+ <xsl:element name="p">
25
+ <xsl:apply-templates />
26
+ </xsl:element>
27
+ </xsl:template>
28
+
29
+ <xsl:template match="ol">
30
+ <xsl:element name="ol">
31
+ <xsl:apply-templates select="li" />
32
+ </xsl:element>
33
+ </xsl:template>
34
+
35
+ <xsl:template match="li">
36
+ <xsl:element name="li">
37
+ <xsl:value-of select="." />
38
+ </xsl:element>
39
+ </xsl:template>
40
+
41
+ <xsl:template match="thought">
42
+ <xsl:element name="i">
43
+ <xsl:value-of select="." />
44
+ </xsl:element>
45
+ </xsl:template>
46
+ </xsl:stylesheet>
@@ -0,0 +1,100 @@
1
+ # encoding: UTF-8
2
+ require 'test/unit'
3
+ require 'test_helper'
4
+
5
+ class TestDeprecated < Test::Unit::TestCase
6
+ def setup()
7
+ xsl_file = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
8
+ xml_file = File.join(File.dirname(__FILE__), 'files/fuzface.xml')
9
+
10
+ @xslt = XML::XSLT.file(xsl_file)
11
+ @xslt.doc = XML::Document.file(xml_file)
12
+ @stylesheet = @xslt.parse
13
+ end
14
+
15
+ def tear_down()
16
+ @xslt = nil
17
+ @stylesheet = nil
18
+ end
19
+
20
+ def test_constants
21
+ assert_instance_of(Fixnum, XML::XSLT::MAX_DEPTH)
22
+ assert_instance_of(Fixnum, XML::XSLT::MAX_SORT)
23
+ assert_instance_of(String, XML::XSLT::ENGINE_VERSION)
24
+ assert_instance_of(Fixnum, XML::XSLT::LIBXSLT_VERSION)
25
+ assert_instance_of(Fixnum, XML::XSLT::LIBXML_VERSION)
26
+ assert_instance_of(String, XML::XSLT::XSLT_NAMESPACE)
27
+ assert_instance_of(String, XML::XSLT::DEFAULT_URL)
28
+ assert_instance_of(String, XML::XSLT::DEFAULT_VENDOR)
29
+ assert_instance_of(String, XML::XSLT::DEFAULT_VERSION)
30
+ assert_instance_of(String, XML::XSLT::NAMESPACE_LIBXSLT)
31
+ assert_instance_of(String, XML::XSLT::NAMESPACE_SAXON)
32
+ assert_instance_of(String, XML::XSLT::NAMESPACE_XT)
33
+ assert_instance_of(String, XML::XSLT::NAMESPACE_XALAN)
34
+ assert_instance_of(String, XML::XSLT::NAMESPACE_NORM_SAXON)
35
+ end
36
+
37
+ def test_new
38
+ xslt = XML::XSLT.new
39
+ assert_instance_of(XML::XSLT::Stylesheet, xslt)
40
+
41
+ xslt.filename = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
42
+ assert_instance_of(String, xslt.filename)
43
+ end
44
+
45
+ def test_file_type
46
+ assert_instance_of(XML::XSLT::Stylesheet, @xslt)
47
+ end
48
+
49
+ def test_doc
50
+ xsl_file = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
51
+ xml_file = File.join(File.dirname(__FILE__), 'files/fuzface.xml')
52
+
53
+ xslt = XML::XSLT.file(xsl_file)
54
+ xslt.doc = XML::Document.file(xml_file)
55
+ assert_instance_of(XML::Document, xslt.doc)
56
+ end
57
+
58
+ def test_parse
59
+ xsl_file = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
60
+ xml_file = File.join(File.dirname(__FILE__), 'files/fuzface.xml')
61
+
62
+ xslt = XML::XSLT.file(xsl_file)
63
+ stylesheet = xslt.parse
64
+ assert_instance_of(XML::XSLT::Stylesheet, stylesheet)
65
+ end
66
+
67
+ def test_parse
68
+ assert_instance_of(XML::XSLT::Stylesheet, @stylesheet)
69
+ end
70
+
71
+ def test_to_s
72
+ @stylesheet.apply
73
+ str = @stylesheet.to_s
74
+ assert_instance_of(String, str)
75
+ end
76
+
77
+ def test_save
78
+ @stylesheet.apply
79
+ @stylesheet.save(file = "text.xml")
80
+ ensure
81
+ File.unlink(file) if file && File.exist?(file)
82
+ end
83
+
84
+ def test_print_invalid
85
+ @stylesheet.apply
86
+ @stylesheet.print
87
+ end
88
+
89
+ def test_save_invalid
90
+ assert_raises(ArgumentError) do
91
+ @stylesheet.save("str")
92
+ end
93
+ end
94
+
95
+ def test_print_invalid
96
+ assert_raises(ArgumentError) do
97
+ @stylesheet.print
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ # To make testing/debugging easier, test within this source tree versus an installed gem
4
+
5
+ dir = File.dirname(__FILE__)
6
+ root = File.expand_path(File.join(dir, '..'))
7
+ lib = File.expand_path(File.join(root, 'lib'))
8
+
9
+ $LOAD_PATH << lib
10
+
11
+ require 'xslt'
12
+
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+ require 'test/unit'
3
+ require 'test_helper'
4
+
5
+ class TextLibXslt < Test::Unit::TestCase
6
+ def test_constants
7
+ assert_instance_of(Fixnum, XSLT::MAX_DEPTH)
8
+ assert_instance_of(Fixnum, XSLT::MAX_SORT)
9
+ assert_instance_of(String, XSLT::ENGINE_VERSION)
10
+ assert_instance_of(Fixnum, XSLT::LIBXSLT_VERSION)
11
+ assert_instance_of(Fixnum, XSLT::LIBXML_VERSION)
12
+ assert_instance_of(String, XSLT::XSLT_NAMESPACE)
13
+ assert_instance_of(String, XSLT::DEFAULT_URL)
14
+ assert_instance_of(String, XSLT::DEFAULT_VENDOR)
15
+ assert_instance_of(String, XSLT::DEFAULT_VERSION)
16
+ assert_instance_of(String, XSLT::NAMESPACE_LIBXSLT)
17
+ assert_instance_of(String, XSLT::NAMESPACE_SAXON)
18
+ assert_instance_of(String, XSLT::NAMESPACE_XT)
19
+ assert_instance_of(String, XSLT::NAMESPACE_XALAN)
20
+ assert_instance_of(String, XSLT::NAMESPACE_NORM_SAXON)
21
+ end
22
+ end
@@ -0,0 +1,106 @@
1
+ # encoding: UTF-8
2
+ require 'test/unit'
3
+ require 'test_helper'
4
+
5
+ class TestStylesheet < Test::Unit::TestCase
6
+ def setup
7
+ filename = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
8
+ doc = XML::Document.file(filename)
9
+ @stylesheet = XSLT::Stylesheet.new(doc)
10
+ end
11
+
12
+ def tear_down
13
+ @stylesheet = nil
14
+ end
15
+
16
+ def doc
17
+ filename = File.join(File.dirname(__FILE__), 'files/fuzface.xml')
18
+ XML::Document.file(filename)
19
+ end
20
+
21
+ def test_class
22
+ assert_instance_of(XSLT::Stylesheet, @stylesheet)
23
+ end
24
+
25
+ def test_apply
26
+ result = @stylesheet.apply(doc)
27
+ assert_instance_of(XML::Document, result)
28
+
29
+ paragraphs = result.find('//p')
30
+ assert_equal(11, paragraphs.length)
31
+ end
32
+
33
+ def test_apply_multiple
34
+ 10.times do
35
+ test_apply
36
+ end
37
+ end
38
+
39
+ def test_params
40
+ filename = File.join(File.dirname(__FILE__), 'files/params.xsl')
41
+ sdoc = XML::Document.file(filename)
42
+
43
+ filename = File.join(File.dirname(__FILE__), 'files/params.xml')
44
+ stylesheet = XSLT::Stylesheet.new(sdoc)
45
+ doc = XML::Document.file(filename)
46
+
47
+ # Start with no params
48
+ result = stylesheet.apply(doc)
49
+ assert_equal('<article>failure</article>', result.root.to_s)
50
+
51
+ # Now try with params as hash. /doc is evaluated
52
+ # as an xpath expression
53
+ result = stylesheet.apply(doc, 'bar' => "/doc")
54
+ assert_equal('<article>abc</article>', result.root.to_s)
55
+
56
+ # Now try with params as hash. Note the double quote
57
+ # on success - we want to pass a literal string and
58
+ # not an xpath expression.
59
+ result = stylesheet.apply(doc, 'bar' => "'success'")
60
+ assert_equal('<article>success</article>', result.root.to_s)
61
+
62
+ # Now try with params as an array.
63
+ result = stylesheet.apply(doc, ['bar', "'success'"])
64
+ assert_equal('<article>success</article>', result.root.to_s)
65
+
66
+ # Now try with invalid array.
67
+ result = stylesheet.apply(doc, ['bar'])
68
+ assert_equal('<article>failure</article>', result.root.to_s)
69
+ end
70
+
71
+ # -- Memory Tests ----
72
+ def test_doc_ownership
73
+ 10.times do
74
+ filename = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
75
+ sdoc = XML::Document.file(filename)
76
+ GC.start
77
+ assert_equal(173, sdoc.to_s.length)
78
+ end
79
+ end
80
+
81
+ def test_stylesheet_ownership
82
+ 10.times do
83
+ filename = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
84
+ sdoc = XML::Document.file(filename)
85
+ stylesheet = XSLT::Stylesheet.new(sdoc)
86
+
87
+ sdoc = nil
88
+ GC.start
89
+
90
+ rdoc = stylesheet.apply(doc)
91
+ assert_equal(5963, rdoc.to_s.length)
92
+ end
93
+ end
94
+
95
+ def test_result_ownership
96
+ 10.times do
97
+ filename = File.join(File.dirname(__FILE__), 'files/fuzface.xsl')
98
+ sdoc = XML::Document.file(filename)
99
+ stylesheet = XSLT::Stylesheet.new(sdoc)
100
+
101
+ rdoc = stylesheet.apply(doc)
102
+ rdoc = nil
103
+ GC.start
104
+ end
105
+ end
106
+ end