File indexing completed on 2024-05-05 04:55:40
0001 /** 0002 * \file testmusicbrainzreleaseimportparser.cpp 0003 * Test parsing of import data from MusicBrainz server. 0004 * 0005 * \b Project: Kid3 0006 * \author Urs Fleisch 0007 * \date 07 Oct 2012 0008 * 0009 * Copyright (C) 2012-2018 Urs Fleisch 0010 * 0011 * This file is part of Kid3. 0012 * 0013 * Kid3 is free software; you can redistribute it and/or modify 0014 * it under the terms of the GNU General Public License as published by 0015 * the Free Software Foundation; either version 2 of the License, or 0016 * (at your option) any later version. 0017 * 0018 * Kid3 is distributed in the hope that it will be useful, 0019 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0021 * GNU General Public License for more details. 0022 * 0023 * You should have received a copy of the GNU General Public License 0024 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0025 */ 0026 0027 #include "testmusicbrainzreleaseimportparser.h" 0028 #include <QTest> 0029 #include "serverimporter.h" 0030 #include "trackdatamodel.h" 0031 0032 void TestMusicBrainzReleaseImportParser::initTestCase() 0033 { 0034 setServerImporter(QLatin1String("MusicBrainzImport")); 0035 } 0036 0037 void TestMusicBrainzReleaseImportParser::testParseAlbums() 0038 { 0039 static const char searchStr[] = 0040 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" 0041 "<metadata xmlns=\"http://musicbrainz.org/ns/mmd-2.0#\" " 0042 "xmlns:ext=\"http://musicbrainz.org/ns/ext#-2.0\"><release-list " 0043 "offset=\"0\" count=\"3\"><release ext:score=\"100\" " 0044 "id=\"8c433fd2-9259-4c20-bfe5-58757df15b29\"><title>Odin</title>" 0045 "<status>Official</status><text-representation><language>eng</language>" 0046 "<script>Latn</script></text-representation><artist-credit>" 0047 "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">" 0048 "<name>Wizard</name><sort-name>Wizard</sort-name>" 0049 "<disambiguation>German power metal</disambiguation></artist></name-credit>" 0050 "</artist-credit><release-group type=\"Album\" " 0051 "id=\"a7f36fa7-33f8-315e-be1f-c26cd96d9548\">" 0052 "<primary-type>Album</primary-type></release-group><date>2003</date>" 0053 "<country>DE</country><barcode>693723003023</barcode><asin>B00009VGKI</asin>" 0054 "<label-info-list><label-info><catalog-number>LMP 0303-054</catalog-number>" 0055 "<label id=\"76beb709-a8f8-4ad5-828c-6ec8660a6935\">" 0056 "<name>Limb Music Products</name></label></label-info></label-info-list>" 0057 "<medium-list count=\"1\"><track-count>13</track-count><medium>" 0058 "<format>CD</format><disc-list count=\"0\"/><track-list count=\"13\"/>" 0059 "</medium></medium-list></release><release ext:score=\"100\" " 0060 "id=\"978c7ed1-a854-4ef2-bd4e-e7c1317be854\"><title>Odin</title>" 0061 "<status>Official</status><text-representation><language>eng</language>" 0062 "<script>Latn</script></text-representation><artist-credit>" 0063 "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">" 0064 "<name>Wizard</name><sort-name>Wizard</sort-name>" 0065 "<disambiguation>German power metal</disambiguation></artist></name-credit>" 0066 "</artist-credit><release-group type=\"Album\" " 0067 "id=\"a7f36fa7-33f8-315e-be1f-c26cd96d9548\">" 0068 "<primary-type>Album</primary-type></release-group><date>2003-08-19</date>" 0069 "<country>DE</country><barcode>693723654720</barcode><asin>B00008OUEN</asin>" 0070 "<label-info-list><label-info><catalog-number>LMP 0303-054 CD</catalog-number>" 0071 "<label id=\"76beb709-a8f8-4ad5-828c-6ec8660a6935\">" 0072 "<name>Limb Music Products</name></label></label-info></label-info-list>" 0073 "<medium-list count=\"1\"><track-count>11</track-count><medium>" 0074 "<format>CD</format><disc-list count=\"1\"/><track-list count=\"11\"/>" 0075 "</medium></medium-list></release><release ext:score=\"100\" " 0076 "id=\"7d57cc0b-70cd-4887-9399-e19e496fc8c4\"><title>Odin</title>" 0077 "<status>Official</status><text-representation><script>Latn</script>" 0078 "</text-representation><artist-credit><name-credit><artist " 0079 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0080 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0081 "</disambiguation></artist></name-credit></artist-credit>" 0082 "<release-group type=\"Album\" id=\"a7f36fa7-33f8-315e-be1f-c26cd96d9548\">" 0083 "<primary-type>Album</primary-type></release-group><medium-list count=\"1\">" 0084 "<track-count>12</track-count><medium><disc-list count=\"0\"/>" 0085 "<track-list count=\"12\"/></medium></medium-list></release></release-list>" 0086 "</metadata>"; 0087 onFindFinished(searchStr); 0088 AlbumListModel* albumModel = m_importer->getAlbumListModel(); 0089 QCOMPARE(albumModel->rowCount(), 3); 0090 QString text, category, id; 0091 albumModel->getItem(0, text, category, id); 0092 QCOMPARE(text, QString(QLatin1String("Wizard - Odin"))); 0093 QCOMPARE(category, QString(QLatin1String("release"))); 0094 QVERIFY(!id.isEmpty()); 0095 } 0096 0097 void TestMusicBrainzReleaseImportParser::testParseTracks() 0098 { 0099 static const char albumStr[] = 0100 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><metadata " 0101 "xmlns=\"http://musicbrainz.org/ns/mmd-2.0#\"><release " 0102 "id=\"978c7ed1-a854-4ef2-bd4e-e7c1317be854\"><title>Odin</title>" 0103 "<status>Official</status><quality>normal</quality><text-representation>" 0104 "<language>eng</language><script>Latn</script></text-representation>" 0105 "<artist-credit><name-credit><artist " 0106 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0107 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0108 "</disambiguation></artist></name-credit></artist-credit>" 0109 "<date>2003-08-19</date><country>DE</country><barcode>693723654720</barcode>" 0110 "<asin>B00008OUEN</asin><label-info-list count=\"1\"><label-info>" 0111 "<catalog-number>LMP 0303-054 CD</catalog-number><label " 0112 "id=\"76beb709-a8f8-4ad5-828c-6ec8660a6935\">" 0113 "<name>Limb Music Products</name><sort-name>Limb Music Products</sort-name>" 0114 "<label-code>924</label-code></label></label-info></label-info-list>" 0115 "<medium-list count=\"1\"><medium><position>1</position>" 0116 "<track-list count=\"11\" offset=\"0\"><track><position>1</position>" 0117 "<number>1</number><length>319173</length><recording " 0118 "id=\"dac7c002-432f-4dcb-ad57-5ebde8e258b0\"><title>The Prophecy</title>" 0119 "<length>319173</length><artist-credit><name-credit><artist " 0120 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0121 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0122 "</disambiguation></artist></name-credit></artist-credit></recording>" 0123 "</track><track><position>2</position><number>2</number>" 0124 "<length>293186</length><recording " 0125 "id=\"3e326f9e-7132-49d8-acff-e9eafc09a073\"><title>Betrayer</title>" 0126 "<length>293186</length><artist-credit><name-credit><artist " 0127 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0128 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0129 "</disambiguation></artist></name-credit></artist-credit></recording>" 0130 "</track><track><position>3</position><number>3</number><length>362026" 0131 "</length><recording id=\"cbafa8e8-1639-4bdb-88d8-8d0db1c29fcc\">" 0132 "<title>Dead Hope</title><length>362026</length><artist-credit>" 0133 "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">" 0134 "<name>Wizard</name><sort-name>Wizard</sort-name>" 0135 "<disambiguation>German power metal</disambiguation></artist></name-credit>" 0136 "</artist-credit></recording></track><track><position>4</position>" 0137 "<number>4</number><length>342946</length><recording " 0138 "id=\"a3312b96-340a-45b8-ad1f-fef15343fd33\"><title>Dark God</title>" 0139 "<length>342946</length><artist-credit><name-credit><artist " 0140 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0141 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0142 "</disambiguation></artist></name-credit></artist-credit></recording>" 0143 "</track><track><position>5</position><number>5</number><length>308746" 0144 "</length><recording id=\"40792d11-6087-484a-b573-b5dc4b54ebde\">" 0145 "<title>Loki's Punishment</title><length>308746</length><artist-credit>" 0146 "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">" 0147 "<name>Wizard</name><sort-name>Wizard</sort-name>" 0148 "<disambiguation>German power metal</disambiguation></artist>" 0149 "</name-credit></artist-credit></recording></track><track>" 0150 "<position>6</position><number>6</number><length>241600</length>" 0151 "<recording id=\"3b23dfbd-4f6c-445a-836a-9882b9e10ad7\">" 0152 "<title>Beginning of the End</title><length>241600</length>" 0153 "<artist-credit><name-credit><artist " 0154 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0155 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0156 "</disambiguation></artist></name-credit></artist-credit></recording>" 0157 "</track><track><position>7</position><number>7</number><length>301573" 0158 "</length><recording id=\"98f11cca-1a69-4f41-ac3b-726d5174b404\">" 0159 "<title>Thor's Hammer</title><length>301573</length><artist-credit>" 0160 "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">" 0161 "<name>Wizard</name><sort-name>Wizard</sort-name><disambiguation>" 0162 "German power metal</disambiguation></artist></name-credit>" 0163 "</artist-credit></recording></track><track><position>8</position>" 0164 "<number>8</number><length>306680</length><recording " 0165 "id=\"e82be71a-df65-480a-9958-ee98f6bab005\"><title>Hall of Odin</title>" 0166 "<length>306680</length><artist-credit><name-credit><artist " 0167 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0168 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0169 "</disambiguation></artist></name-credit></artist-credit></recording>" 0170 "</track><track><position>9</position><number>9</number>" 0171 "<length>321506</length><recording " 0172 "id=\"149eebfa-7188-4c96-b535-7e1abe45b86b\"><title>The Powergod</title>" 0173 "<length>321506</length><artist-credit><name-credit><artist " 0174 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0175 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0176 "</disambiguation></artist></name-credit></artist-credit></recording>" 0177 "</track><track><position>10</position><number>10</number>" 0178 "<length>340400</length><recording " 0179 "id=\"4ebcddbb-ffae-41d1-b9c9-d5aea6bca9e5\">" 0180 "<title>March of the Einheriers</title><length>340400</length>" 0181 "<artist-credit><name-credit><artist " 0182 "id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\"><name>Wizard</name>" 0183 "<sort-name>Wizard</sort-name><disambiguation>German power metal" 0184 "</disambiguation></artist></name-credit></artist-credit></recording>" 0185 "</track><track><position>11</position><number>11</number><length>233720" 0186 "</length><recording id=\"80168326-bd79-4287-a8d6-313066257dfd\">" 0187 "<title>End of All</title><length>233720</length><artist-credit>" 0188 "<name-credit><artist id=\"d1075cad-33e3-496b-91b0-d4670aabf4f8\">" 0189 "<name>Wizard</name><sort-name>Wizard</sort-name>" 0190 "<disambiguation>German power metal</disambiguation></artist>" 0191 "</name-credit></artist-credit></recording></track></track-list>" 0192 "</medium></medium-list><relation-list target-type=\"url\">" 0193 "<relation type=\"amazon asin\">" 0194 "<target>http://www.amazon.de/gp/product/B00008OUEN</target></relation>" 0195 "</relation-list></release></metadata>"; 0196 onAlbumFinished(albumStr); 0197 0198 QStringList titles; 0199 titles << QLatin1String("The Prophecy") << QLatin1String("Betrayer") 0200 << QLatin1String("Dead Hope") << QLatin1String("Dark God") 0201 << QLatin1String("Loki's Punishment") 0202 << QLatin1String("Beginning of the End") 0203 << QLatin1String("Thor's Hammer") 0204 << QLatin1String("Hall of Odin") << QLatin1String("The Powergod") 0205 << QLatin1String("March of the Einheriers") 0206 << QLatin1String("End of All"); 0207 QStringList lengths; 0208 lengths << QLatin1String("5:19") << QLatin1String("4:53") 0209 << QLatin1String("6:02") << QLatin1String("5:42") 0210 << QLatin1String("5:08") << QLatin1String("4:01") 0211 << QLatin1String("5:01") << QLatin1String("5:06") 0212 << QLatin1String("5:21") << QLatin1String("5:40") 0213 << QLatin1String("3:53"); 0214 QCOMPARE(m_trackDataModel->rowCount(), 11); 0215 for (int row = 0; row < 11; ++row) { 0216 QCOMPARE(m_trackDataModel->index(row, 0).data().toString(), lengths.at(row)); 0217 QCOMPARE(m_trackDataModel->index(row, 3).data().toInt(), row + 1); 0218 QCOMPARE(m_trackDataModel->index(row, 4).data().toString(), titles.at(row)); 0219 QCOMPARE(m_trackDataModel->index(row, 5).data().toString(), 0220 QString(QLatin1String("Wizard"))); 0221 QCOMPARE(m_trackDataModel->index(row, 6).data().toString(), 0222 QString(QLatin1String("Odin"))); 0223 QCOMPARE(m_trackDataModel->index(row, 7).data().toInt(), 2003); 0224 QCOMPARE(m_trackDataModel->index(row, 10).data().toString(), 0225 QString(QLatin1String("Wizard"))); 0226 QCOMPARE(m_trackDataModel->index(row, 11).data().toString(), 0227 QString(QLatin1String("LMP 0303-054 CD"))); 0228 QCOMPARE(m_trackDataModel->index(row, 12).data().toString(), 0229 QString(QLatin1String("Limb Music Products"))); 0230 QCOMPARE(m_trackDataModel->index(row, 13).data().toString(), 0231 QString(QLatin1String("DE"))); 0232 } 0233 }