Fix XML parsers to output file URLs.

This commit is contained in:
John Maguire 2010-05-27 22:43:07 +00:00
parent 7ad2c38333
commit 4836b8d420
3 changed files with 32 additions and 0 deletions

View File

@ -61,3 +61,11 @@ void XMLParser::IgnoreElement(QXmlStreamReader* reader) const {
}
}
}
QString XMLParser::MakeRelativeTo(const QString& filename_or_url, const QDir& dir) const {
QString file = ParserBase::MakeRelativeTo(filename_or_url, dir);
if (!file.contains(QRegExp("^[a-z]+://"))) {
return QUrl::fromLocalFile(file).toString();
}
return file;
}

View File

@ -33,6 +33,8 @@ class XMLParser : public ParserBase {
bool ParseUntilElement(QXmlStreamReader* reader, const QString& element) const;
void IgnoreElement(QXmlStreamReader* reader) const;
QString MakeRelativeTo(const QString& filename, const QDir& dir) const;
class StreamElement : public boost::noncopyable {
public:
StreamElement(const QString& name, QXmlStreamWriter* stream) : stream_(stream) {

View File

@ -113,3 +113,25 @@ TEST_F(XSPFParserTest, SavesSong) {
EXPECT_THAT(data.constData(), HasSubstr("<title>foo</title>"));
EXPECT_THAT(data.constData(), HasSubstr("<creator>bar</creator>"));
}
TEST_F(XSPFParserTest, SavesLocalFile) {
QByteArray data;
QBuffer buffer(&data);
buffer.open(QIODevice::WriteOnly);
XSPFParser parser;
Song one;
one.set_filename("/bar/foo.mp3");
one.set_filetype(Song::Type_Mpeg);
one.set_title("foo");
one.set_length(123);
one.set_artist("bar");
SongList songs;
songs << one;
parser.Save(songs, &buffer);
EXPECT_THAT(data.constData(), HasSubstr("<location>file:///bar/foo.mp3</location>"));
EXPECT_THAT(data.constData(), HasSubstr("<duration>123000</duration>"));
EXPECT_THAT(data.constData(), HasSubstr("<title>foo</title>"));
EXPECT_THAT(data.constData(), HasSubstr("<creator>bar</creator>"));
}