/
xmlbase.js
124 lines (112 loc) · 4.48 KB
/
xmlbase.js
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
119
120
121
122
123
124
describe('xmlbase', function(){
it('should resolve relative URIs in meta elements with no root xml:base', function (done) {
var feed = __dirname + '/feeds/intertwingly.atom';
fs.createReadStream(feed).pipe(new FeedParser())
.on('meta', function (meta) {
assert.equal('http://intertwingly.net/blog/', meta.link);
assert.equal('http://intertwingly.net/favicon.ico', meta.favicon);
done();
})
.on('error', function (err) {
assert.ifError(err);
done(err);
});
});
it('should resolve relative image url in channel', function (done) {
var feed = __dirname + '/feeds/relative-channel-image-url.xml';
fs.createReadStream(feed).pipe(new FeedParser())
.on('meta', function (meta) {
assert.equal('https://www.virtualbox.org/graphics/vbox_logo2_gradient.png', meta.image.url);
done();
})
.on('error', function (err) {
assert.ifError(err);
done(err);
});
});
it('should parse feedurl option and handle relative URIs with no root xml:base', function (done) {
var feed = __dirname + '/feeds/intertwingly.atom';
var options = { feedurl: 'http://intertwingly.net/blog/index.atom' };
fs.createReadStream(feed).pipe(new FeedParser(options))
.on('meta', function (meta) {
assert.equal('http://intertwingly.net/blog/', meta.link);
assert.equal('http://intertwingly.net/favicon.ico', meta.favicon);
done();
})
.on('error', function (err) {
assert.ifError(err);
done(err);
});
});
it('should resolve relative URI item links with no root xml:base', function (done) {
var feed = __dirname + '/feeds/tpm.atom';
var links = [];
fs.createReadStream(feed).pipe(new FeedParser())
.on('readable', function () {
var item;
while ((item = this.read())) {
links.push(item.link);
}
})
.on('error', function (err) {
assert.ifError(err);
done(err);
})
.on('end', function () {
assert.equal(links[0], 'http://talkingpointsmemo.com/livewire/hannity-announces-fox-hired-sebastian-gorka-national-security-strategist');
assert.equal(links[1], 'http://talkingpointsmemo.com/edblog/were-hiring-senior-editor');
assert.equal(links.length, 20);
done();
});
});
it('should resolve relative URI item links in RSS with feedurl option', function (done) {
var feed = __dirname + '/feeds/rss-with-relative-urls.xml';
var links = [];
fs.createReadStream(feed).pipe(new FeedParser({ feedurl: 'http://www.arcgames.com' }))
.on('readable', function () {
var item;
while ((item = this.read())) {
links.push(item.link);
}
})
.on('error', function (err) {
assert.ifError(err);
done(err);
})
.on('meta', function (meta) {
assert.equal('http://www.arcgames.com/en/games/neverwinter/news', meta.link);
assert.equal('http://www.arcgames.com/en/games/neverwinter/news/rss', meta.xmlurl);
})
.on('end', function () {
assert.equal(links[0], 'http://www.arcgames.com/en/games/neverwinter/news/detail/10743874-neverwinter-%26-jingle-jam-humble-bundle%21');
assert.equal(links[1], 'http://www.arcgames.com/en/games/neverwinter/news/detail/10738994-2x-underdark-currency-%26-15%25-off-bags%21');
assert.equal(links.length, 2);
done();
});
});
it('should resolve relative URI item links in RSS if absolute xmlurl is present', function (done) {
var feed = __dirname + '/feeds/rss-with-relative-urls-with-absolute-xmlurl.xml';
var links = [];
fs.createReadStream(feed).pipe(new FeedParser())
.on('readable', function () {
var item;
while ((item = this.read())) {
links.push(item.link);
}
})
.on('error', function (err) {
assert.ifError(err);
done(err);
})
.on('meta', function (meta) {
assert.equal('http://www.arcgames.com/en/games/neverwinter/news', meta.link);
assert.equal('http://www.arcgames.com/en/games/neverwinter/news/rss', meta.xmlurl);
})
.on('end', function () {
assert.equal(links[0], 'http://www.arcgames.com/en/games/neverwinter/news/detail/10743874-neverwinter-%26-jingle-jam-humble-bundle%21');
assert.equal(links[1], 'http://www.arcgames.com/en/games/neverwinter/news/detail/10738994-2x-underdark-currency-%26-15%25-off-bags%21');
assert.equal(links.length, 2);
done();
});
});
});