Add test for script processing
This commit is contained in:
parent
6f30fc309e
commit
e1fdfa744c
|
@ -0,0 +1,22 @@
|
|||
export function isString(value) {
|
||||
return typeof(value) === "string" || value instanceof String;
|
||||
}
|
||||
|
||||
export function isTruthy(value) {
|
||||
return value && value !== "false" && value !== "0";
|
||||
}
|
||||
|
||||
export function logTagInfo(file, tag) {
|
||||
// log tag type and supported fields
|
||||
const fields = tag.fields;
|
||||
utility.diag("debug", tag.type, "tag");
|
||||
utility.diag("debug", Object.keys(fields).sort().join(", "), "supported fields");
|
||||
|
||||
// log fields for debugging purposes
|
||||
for (const [key, value] of Object.entries(fields)) {
|
||||
const content = value.content;
|
||||
if (content !== undefined && content != null && !(content instanceof ArrayBuffer)) {
|
||||
utility.diag("debug", content, key + " (" + value.type + ")");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
import * as helpers from "helpers.js"
|
||||
|
||||
export function main(file) {
|
||||
utility.diag("debug", Object.keys(settings).join(", "), "settings");
|
||||
for (const tag of file.tags) {
|
||||
changeTagFields(file, tag);
|
||||
}
|
||||
file.applyChanges();
|
||||
return !helpers.isTruthy(settings.dryRun);
|
||||
}
|
||||
|
||||
function addTestFields(file, tag) {
|
||||
const fields = tag.fields;
|
||||
for (const [key, value] of Object.entries(settings)) {
|
||||
if (key.startsWith("set:")) {
|
||||
fields[key.substr(4)] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changeTagFields(file, tag) {
|
||||
helpers.logTagInfo(file, tag);
|
||||
addTestFields(file, tag);
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
import * as helpers from "helpers.js"
|
||||
import * as metadatasearch from "metadatasearch.js"
|
||||
|
||||
export function main(file) {
|
||||
|
@ -10,45 +11,22 @@ export function main(file) {
|
|||
file.applyChanges();
|
||||
|
||||
// return a falsy value to skip the file after all
|
||||
return !isTruthy(settings.dryRun);
|
||||
return !helpers.isTruthy(settings.dryRun);
|
||||
}
|
||||
|
||||
const mainTextFields = ["title", "artist", "album", "genre"];
|
||||
const personalFields = ["comment", "rating"];
|
||||
|
||||
function isString(value) {
|
||||
return typeof(value) === "string" || value instanceof String;
|
||||
}
|
||||
|
||||
function isTruthy(value) {
|
||||
return value && value !== "false" && value !== "0";
|
||||
}
|
||||
|
||||
function logTagInfo(file, tag) {
|
||||
// log tag type and supported fields
|
||||
const fields = tag.fields;
|
||||
utility.diag("debug", tag.type, "tag");
|
||||
utility.diag("debug", Object.keys(fields).join(", "), "supported fields");
|
||||
|
||||
// log fields for debugging purposes
|
||||
for (const [key, value] of Object.entries(fields)) {
|
||||
const content = value.content;
|
||||
if (content !== undefined && content != null && !(content instanceof ArrayBuffer)) {
|
||||
utility.diag("debug", content, key + " (" + value.type + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function applyFixesToMainFields(file, tag) {
|
||||
const fields = tag.fields;
|
||||
for (const key of mainTextFields) {
|
||||
for (const value of fields[key]) {
|
||||
if (isString(value.content)) {
|
||||
if (helpers.isString(value.content)) {
|
||||
value.content = value.content.trim();
|
||||
if (isTruthy(settings.fixUmlauts)) {
|
||||
if (helpers.isTruthy(settings.fixUmlauts)) {
|
||||
value.content = utility.fixUmlauts(value.content);
|
||||
}
|
||||
if (isTruthy(settings.formatNames)) {
|
||||
if (helpers.isTruthy(settings.formatNames)) {
|
||||
value.content = utility.formatName(value.content);
|
||||
}
|
||||
}
|
||||
|
@ -118,17 +96,17 @@ function addMiscFields(file, tag) {
|
|||
}
|
||||
|
||||
function changeTagFields(file, tag) {
|
||||
logTagInfo(file, tag);
|
||||
helpers.logTagInfo(file, tag);
|
||||
|
||||
// change/add various fields; these values can still be overridden by specifying fields normally as CLI args
|
||||
applyFixesToMainFields(file, tag);
|
||||
clearPersonalFields(file, tag);
|
||||
addTotalNumberOfTracks(file, tag);
|
||||
addMiscFields(file, tag);
|
||||
if (isTruthy(settings.addLyrics)) {
|
||||
if (helpers.isTruthy(settings.addLyrics)) {
|
||||
addLyrics(file, tag);
|
||||
}
|
||||
if (isTruthy(settings.addCover)) {
|
||||
if (helpers.isTruthy(settings.addCover)) {
|
||||
addCover(file, tag);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,6 +77,7 @@ class CliTests : public TestFixture {
|
|||
CPPUNIT_TEST(testReadingAndWritingDocumentTitle);
|
||||
CPPUNIT_TEST(testFileLayoutOptions);
|
||||
CPPUNIT_TEST(testJsonExport);
|
||||
CPPUNIT_TEST(testScriptProcessing);
|
||||
#endif
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
|
@ -103,6 +104,7 @@ public:
|
|||
void testReadingAndWritingDocumentTitle();
|
||||
void testFileLayoutOptions();
|
||||
void testJsonExport();
|
||||
void testScriptProcessing();
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
@ -1176,4 +1178,51 @@ void CliTests::testJsonExport()
|
|||
#endif // TAGEDITOR_JSON_EXPORT
|
||||
}
|
||||
|
||||
#endif // PLATFORM_UNIX
|
||||
/*!
|
||||
* \brief Tests the --script parameter of the set operation.
|
||||
*/
|
||||
void CliTests::testScriptProcessing()
|
||||
{
|
||||
#ifndef TAGEDITOR_USE_JSENGINE
|
||||
std::cout << "\nSkipping script processing (feature not enabled)" << std::endl;
|
||||
#else
|
||||
std::cout << "\nScript processing" << endl;
|
||||
auto stdout = std::string(), stderr = std::string();
|
||||
|
||||
const auto file = workingCopyPath("mtx-test-data/alac/othertest-itunes.m4a");
|
||||
const auto script = testFilePath("script-processing-test.js");
|
||||
const char *args[] = { "tageditor", "set", "--pedantic", "debug", "--script", script.data(), "--script-settings", "set:title=foo", "set:artist=bar",
|
||||
"dryRun=false", "-f", file.data(), nullptr };
|
||||
TESTUTILS_ASSERT_EXEC_EXIT_STATUS(args, EXIT_PARSING_FAILURE);
|
||||
CPPUNIT_ASSERT(testContainsSubstrings(stderr, { "executing JavaScript for othertest-itunes.m4a: entering main() function",
|
||||
"settings: set:title, set:artist, dryRun",
|
||||
"tag: MP4/iTunes tag",
|
||||
"supported fields: album, albumArtist, arranger, ", "soundEngineer, title, track",
|
||||
"MP4/iTunes tag: applying changes",
|
||||
" - change title[0] from 'Sad Song' to 'foo'",
|
||||
" - change artist[0] from 'Oasis' to 'bar'",
|
||||
"executing JavaScript for othertest-itunes.m4a: done with return value: true",
|
||||
"Changes are about to be applied"
|
||||
}));
|
||||
CPPUNIT_ASSERT(testContainsSubstrings(stdout, { "Loading JavaScript file", script.data(),
|
||||
"Setting tag information for", file.data(),
|
||||
"Changes have been applied."
|
||||
}));
|
||||
|
||||
args[9] = "dryRun=true";
|
||||
TESTUTILS_ASSERT_EXEC_EXIT_STATUS(args, EXIT_PARSING_FAILURE);
|
||||
CPPUNIT_ASSERT(testContainsSubstrings(stderr, { "executing JavaScript for othertest-itunes.m4a: entering main() function",
|
||||
"MP4/iTunes tag: applying changes",
|
||||
" - set title[0] to 'foo' (no change)",
|
||||
" - set artist[0] to 'bar' (no change)",
|
||||
"executing JavaScript for othertest-itunes.m4a: done with return value: false"
|
||||
}));
|
||||
CPPUNIT_ASSERT_EQUAL(std::string::npos, stderr.find("Changes are about to be applied"));
|
||||
CPPUNIT_ASSERT(testContainsSubstrings(stdout, { "Loading JavaScript file", script.data(),
|
||||
"Setting tag information for", file.data(),
|
||||
" - Skipping file because JavaScript returned a falsy value other than undefined."
|
||||
}));
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // defined(PLATFORM_UNIX) || defined(CPP_UTILITIES_HAS_EXEC_APP)
|
||||
|
|
Loading…
Reference in New Issue