From 6e1c8bc4274d287a973bc20dbe493b026151d2d4 Mon Sep 17 00:00:00 2001 From: LeoHsiao Date: Fri, 21 Aug 2020 21:47:04 +0800 Subject: [PATCH] Add excute() to replace runTest() --- tests/bash_tests/testcases.py | 241 +++++++++++++++++----------------- tests/bash_tests/utils.py | 26 ++-- 2 files changed, 137 insertions(+), 130 deletions(-) diff --git a/tests/bash_tests/testcases.py b/tests/bash_tests/testcases.py index 2e7f8523..f09928e5 100644 --- a/tests/bash_tests/testcases.py +++ b/tests/bash_tests/testcases.py @@ -18,8 +18,8 @@ class TestCases(unittest.TestCase): # Test driver to run the addmoddel sample program jpg = 'exiv2-empty.jpg' utils.copyTestFiles(jpg) - out = utils.runTest('addmoddel {jpg}', vars()) - out += utils.runTest('exiv2 -pv {jpg}', vars()) + out = utils.excute('addmoddel {jpg}', vars()) + out += utils.excute('exiv2 -pv {jpg}', vars()) out += [''] utils.reportTest('addmoddel', out) @@ -33,12 +33,12 @@ class TestCases(unittest.TestCase): out += ['Testcase 1'] out += ['=========='] # 9 equal signs utils.copyTestFile(jpg, 'h.jpg') - out += utils.runTest("exiv2 -M'set Exif.Image.ImageDescription The Exif image description' h.jpg") + out += utils.excute("exiv2 -M'set Exif.Image.ImageDescription The Exif image description' h.jpg") utils.rm('h.xmp') - out += utils.runTest('exiv2 -eX h.jpg') - out += utils.runTest('exiv2 -px h.xmp') - out += utils.runTest('exiv2 -PEkycv h.xmp') - out += utils.runTest('exiv2 -pi h.xmp') + out += utils.excute('exiv2 -eX h.jpg') + out += utils.excute('exiv2 -px h.xmp') + out += utils.excute('exiv2 -PEkycv h.xmp') + out += utils.excute('exiv2 -pi h.xmp') utils.log.info('#2 Convert XMP x-default langAlt value back to Exif ImageDescription') out += [''] @@ -46,10 +46,10 @@ class TestCases(unittest.TestCase): out += ['=========='] utils.copyTestFile(jpg, 'i.jpg') utils.cp('h.xmp', 'i.xmp') - out += utils.runTest('exiv2 -iX i.jpg') - out += utils.runTest('exiv2 -px i.jpg') - out += utils.runTest('exiv2 -PEkycv i.jpg') - out += utils.runTest('exiv2 -pi i.jpg') + out += utils.excute('exiv2 -iX i.jpg') + out += utils.excute('exiv2 -px i.jpg') + out += utils.excute('exiv2 -PEkycv i.jpg') + out += utils.excute('exiv2 -pi i.jpg') utils.log.info('#3 Convert XMP single non-x-default langAlt value to Exif ImageDescription') out += [''] @@ -57,10 +57,10 @@ class TestCases(unittest.TestCase): out += ['=========='] utils.save(utils.cat('i.xmp').replace('x-default', 'de-DE'), 'j.xmp') utils.copyTestFile(jpg, 'j.jpg') - out += utils.runTest('exiv2 -iX j.jpg') - out += utils.runTest('exiv2 -px j.jpg') - out += utils.runTest('exiv2 -PEkycv j.jpg') - out += utils.runTest('exiv2 -pi j.jpg') + out += utils.excute('exiv2 -iX j.jpg') + out += utils.excute('exiv2 -px j.jpg') + out += utils.excute('exiv2 -PEkycv j.jpg') + out += utils.excute('exiv2 -pi j.jpg') utils.log.info("#4 This shouldn't work: No x-default, more than one language") out += [''] @@ -70,36 +70,36 @@ class TestCases(unittest.TestCase): 'The Exif image descriptionCiao bella'), 'k.xmp') utils.copyTestFile(jpg, 'k.jpg') - out += utils.runTest('exiv2 -iX k.jpg') - out += utils.runTest('exiv2 -px k.jpg') - out += utils.runTest('exiv2 -v -PEkycv k.jpg') - out += utils.runTest('exiv2 -v -pi k.jpg') + out += utils.excute('exiv2 -iX k.jpg') + out += utils.excute('exiv2 -px k.jpg') + out += utils.excute('exiv2 -v -PEkycv k.jpg') + out += utils.excute('exiv2 -v -pi k.jpg') utils.log.info('#5 Add a default language to the XMP file and convert to Exif and IPTC') out += [''] out += ['Testcase 5'] out += ['=========='] utils.cp('k.xmp', 'l.xmp') - out += utils.runTest('''exiv2 -M'set Xmp.dc.description lang="x-default" How to fix this mess' l.xmp''') + out += utils.excute('''exiv2 -M'set Xmp.dc.description lang="x-default" How to fix this mess' l.xmp''') out += [utils.grep('x-default', 'l.xmp')] utils.copyTestFile(jpg, 'l.jpg') - out += utils.runTest('exiv2 -iX l.jpg') - out += utils.runTest('exiv2 -px -b l.jpg') - out += utils.runTest('exiv2 -PEkycv l.jpg') - out += utils.runTest('exiv2 -pi l.jpg') + out += utils.excute('exiv2 -iX l.jpg') + out += utils.excute('exiv2 -px -b l.jpg') + out += utils.excute('exiv2 -PEkycv l.jpg') + out += utils.excute('exiv2 -pi l.jpg') utils.log.info('#6 Convert an Exif user comment to XMP') out += [''] out += ['Testcase 6'] out += ['=========='] utils.copyTestFile(jpg, 'm.jpg') - out += utils.runTest("exiv2 -M'set Exif.Photo.UserComment charset=Jis This is a JIS encoded Exif user comment. Or was it?' m.jpg") - out += utils.runTest('exiv2 -PEkycv m.jpg') + out += utils.excute("exiv2 -M'set Exif.Photo.UserComment charset=Jis This is a JIS encoded Exif user comment. Or was it?' m.jpg") + out += utils.excute('exiv2 -PEkycv m.jpg') utils.rm('m.xmp') - out += utils.runTest('exiv2 -eX m.jpg') - out += utils.runTest('exiv2 -px m.xmp') - out += utils.runTest('exiv2 -PEkycv m.xmp') - out += utils.runTest('exiv2 -v -pi m.xmp') + out += utils.excute('exiv2 -eX m.jpg') + out += utils.excute('exiv2 -px m.xmp') + out += utils.excute('exiv2 -PEkycv m.xmp') + out += utils.excute('exiv2 -v -pi m.xmp') utils.log.info('#7 And back to Exif') out += [''] @@ -107,25 +107,25 @@ class TestCases(unittest.TestCase): out += ['=========='] utils.copyTestFile(jpg, 'n.jpg') utils.cp('m.xmp', 'n.xmp') - out += utils.runTest('exiv2 -iX n.jpg') - out += utils.runTest('exiv2 -px n.jpg') - out += utils.runTest('exiv2 -PEkycv n.jpg') - out += utils.runTest('exiv2 -v -pi n.jpg') + out += utils.excute('exiv2 -iX n.jpg') + out += utils.excute('exiv2 -px n.jpg') + out += utils.excute('exiv2 -PEkycv n.jpg') + out += utils.excute('exiv2 -v -pi n.jpg') utils.log.info('#8 Convert IPTC keywords to XMP') out += [''] out += ['Testcase 8'] out += ['=========='] utils.copyTestFile(jpg, 'o.jpg') - out += utils.runTest('''exiv2 -M'add Iptc.Application2.Keywords Sex' o.jpg''') - out += utils.runTest('''exiv2 -M'add Iptc.Application2.Keywords Drugs' o.jpg''') - out += utils.runTest('''exiv2 -M"add Iptc.Application2.Keywords Rock'n'roll" o.jpg''') - out += utils.runTest('''exiv2 -pi o.jpg''') + out += utils.excute('''exiv2 -M'add Iptc.Application2.Keywords Sex' o.jpg''') + out += utils.excute('''exiv2 -M'add Iptc.Application2.Keywords Drugs' o.jpg''') + out += utils.excute('''exiv2 -M"add Iptc.Application2.Keywords Rock'n'roll" o.jpg''') + out += utils.excute('''exiv2 -pi o.jpg''') utils.rm('o.xmp') - out += utils.runTest('exiv2 -eX o.jpg') - out += utils.runTest('exiv2 -px o.xmp') - out += utils.runTest('exiv2 -v -PEkycv o.xmp') - out += utils.runTest('exiv2 -pi o.xmp') + out += utils.excute('exiv2 -eX o.jpg') + out += utils.excute('exiv2 -px o.xmp') + out += utils.excute('exiv2 -v -PEkycv o.xmp') + out += utils.excute('exiv2 -pi o.xmp') utils.log.info('#9 And back to IPTC') out += [''] @@ -133,23 +133,23 @@ class TestCases(unittest.TestCase): out += ['=========='] utils.copyTestFile(jpg, 'p.jpg') utils.cp('o.xmp', 'p.xmp') - out += utils.runTest('exiv2 -iX p.jpg') - out += utils.runTest('exiv2 -px p.jpg') - out += utils.runTest('exiv2 -v -PEkycv p.jpg') - out += utils.runTest('exiv2 -pi p.jpg') + out += utils.excute('exiv2 -iX p.jpg') + out += utils.excute('exiv2 -px p.jpg') + out += utils.excute('exiv2 -v -PEkycv p.jpg') + out += utils.excute('exiv2 -pi p.jpg') utils.log.info('#10 Convert an Exif tag to an XMP text value') out += [''] out += ['Testcase 10'] out += ['==========='] # 10 equal signs utils.copyTestFile(jpg, 'q.jpg') - out += utils.runTest("exiv2 -M'set Exif.Image.Software Exiv2' q.jpg") - out += utils.runTest("exiv2 -PEkycv q.jpg") + out += utils.excute("exiv2 -M'set Exif.Image.Software Exiv2' q.jpg") + out += utils.excute("exiv2 -PEkycv q.jpg") utils.rm('q.xmp') - out += utils.runTest('exiv2 -eX q.jpg') - out += utils.runTest('exiv2 -px q.xmp') - out += utils.runTest('exiv2 -PEkycv q.xmp') - out += utils.runTest('exiv2 -v -pi q.xmp') + out += utils.excute('exiv2 -eX q.jpg') + out += utils.excute('exiv2 -px q.xmp') + out += utils.excute('exiv2 -PEkycv q.xmp') + out += utils.excute('exiv2 -v -pi q.xmp') utils.log.info('#11 And back to Exif') out += [''] @@ -157,23 +157,23 @@ class TestCases(unittest.TestCase): out += ['==========='] utils.copyTestFile(jpg, 'r.jpg') utils.cp('q.xmp', 'r.xmp') - out += utils.runTest('exiv2 -iX r.jpg') - out += utils.runTest('exiv2 -px r.jpg') - out += utils.runTest('exiv2 -PEkycv r.jpg') - out += utils.runTest('exiv2 -v -pi r.jpg') + out += utils.excute('exiv2 -iX r.jpg') + out += utils.excute('exiv2 -px r.jpg') + out += utils.excute('exiv2 -PEkycv r.jpg') + out += utils.excute('exiv2 -v -pi r.jpg') utils.log.info('#12 Convert an IPTC dataset to an XMP text value') out += [''] out += ['Testcase 12'] out += ['==========='] utils.copyTestFile(jpg, 's.jpg') - out += utils.runTest("exiv2 -M'set Iptc.Application2.SubLocation Kuala Lumpur' s.jpg") - out += utils.runTest("exiv2 -pi s.jpg") + out += utils.excute("exiv2 -M'set Iptc.Application2.SubLocation Kuala Lumpur' s.jpg") + out += utils.excute("exiv2 -pi s.jpg") utils.rm('s.xmp') - out += utils.runTest('exiv2 -eX s.jpg') - out += utils.runTest('exiv2 -px s.xmp') - out += utils.runTest('exiv2 -v -PEkycv s.xmp') - out += utils.runTest('exiv2 -pi s.xmp') + out += utils.excute('exiv2 -eX s.jpg') + out += utils.excute('exiv2 -px s.xmp') + out += utils.excute('exiv2 -v -PEkycv s.xmp') + out += utils.excute('exiv2 -pi s.xmp') utils.log.info('#13 And back to IPTC') out += [''] @@ -181,32 +181,32 @@ class TestCases(unittest.TestCase): out += ['==========='] utils.copyTestFile(jpg, 't.jpg') utils.cp('s.xmp', 't.xmp') - out += utils.runTest('exiv2 -iX t.jpg') - out += utils.runTest('exiv2 -px t.jpg') - out += utils.runTest('exiv2 -v -PEkycv t.jpg') - out += utils.runTest('exiv2 -pi t.jpg') + out += utils.excute('exiv2 -iX t.jpg') + out += utils.excute('exiv2 -px t.jpg') + out += utils.excute('exiv2 -v -PEkycv t.jpg') + out += utils.excute('exiv2 -pi t.jpg') utils.log.info('#14 Convert a few other tags of interest from Exif/IPTC to XMP') out += [''] out += ['Testcase 14'] out += ['==========='] utils.copyTestFile(jpg, 'u.jpg') - out += utils.runTest("exiv2 -M'set Exif.Photo.DateTimeOriginal 2003:12:14 12:01:44' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.Photo.SubSecTimeOriginal 999999999' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.Photo.ExifVersion 48 50 50 49' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.Photo.ComponentsConfiguration 1 2 3 0' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.Photo.Flash 73' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.GPSInfo.GPSLatitude 3/1 8/1 29734512/1000000' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.GPSInfo.GPSLatitudeRef N' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.GPSInfo.GPSVersionID 2 2 0 1' u.jpg") - out += utils.runTest("exiv2 -M'set Exif.GPSInfo.GPSTimeStamp 1/1 2/1 999999999/1000000000' u.jpg") - out += utils.runTest('exiv2 -PEkycv u.jpg') - out += utils.runTest('exiv2 -pi u.jpg') + out += utils.excute("exiv2 -M'set Exif.Photo.DateTimeOriginal 2003:12:14 12:01:44' u.jpg") + out += utils.excute("exiv2 -M'set Exif.Photo.SubSecTimeOriginal 999999999' u.jpg") + out += utils.excute("exiv2 -M'set Exif.Photo.ExifVersion 48 50 50 49' u.jpg") + out += utils.excute("exiv2 -M'set Exif.Photo.ComponentsConfiguration 1 2 3 0' u.jpg") + out += utils.excute("exiv2 -M'set Exif.Photo.Flash 73' u.jpg") + out += utils.excute("exiv2 -M'set Exif.GPSInfo.GPSLatitude 3/1 8/1 29734512/1000000' u.jpg") + out += utils.excute("exiv2 -M'set Exif.GPSInfo.GPSLatitudeRef N' u.jpg") + out += utils.excute("exiv2 -M'set Exif.GPSInfo.GPSVersionID 2 2 0 1' u.jpg") + out += utils.excute("exiv2 -M'set Exif.GPSInfo.GPSTimeStamp 1/1 2/1 999999999/1000000000' u.jpg") + out += utils.excute('exiv2 -PEkycv u.jpg') + out += utils.excute('exiv2 -pi u.jpg') utils.rm('u.xmp') - out += utils.runTest('exiv2 -eX u.jpg') - out += utils.runTest('exiv2 -px u.xmp') - out += utils.runTest('exiv2 -PEkycv u.xmp') - out += utils.runTest('exiv2 -pi u.xmp') + out += utils.excute('exiv2 -eX u.jpg') + out += utils.excute('exiv2 -px u.xmp') + out += utils.excute('exiv2 -PEkycv u.xmp') + out += utils.excute('exiv2 -pi u.xmp') utils.log.info('#15 And back to Exif/IPTC') out += [''] @@ -214,21 +214,21 @@ class TestCases(unittest.TestCase): out += ['==========='] utils.copyTestFile(jpg, 'v.jpg') utils.cp('u.xmp', 'v.xmp') - out += utils.runTest("exiv2 -M'set Xmp.xmp.ModifyDate 2015-04-17T18:10:22Z' v.xmp") - out += utils.runTest('exiv2 -iX v.jpg') # need TZ=GMT-8 - out += utils.runTest('exiv2 -px v.jpg') - exif_out = utils.runTest('exiv2 -PEkycv v.jpg') + out += utils.excute("exiv2 -M'set Xmp.xmp.ModifyDate 2015-04-17T18:10:22Z' v.xmp") + out += utils.excute('exiv2 -iX v.jpg') # need TZ=GMT-8 + out += utils.excute('exiv2 -px v.jpg') + exif_out = utils.excute('exiv2 -PEkycv v.jpg') out += [line.replace('17 19:10:22', '18 02:10:22') for line in exif_out] # evade this test on MSVC builds (Issue #485) - out += utils.runTest('exiv2 -pi v.jpg') + out += utils.excute('exiv2 -pi v.jpg') utils.log.info('#16 https://github.com/Exiv2/exiv2/issues/521') out += [''] out += ['Testcase 16'] out += ['==========='] utils.copyTestFile('DSC_3079.jpg') - out += utils.runTest('exiv2 -px DSC_3079.jpg') - out += utils.runTest('exiv2 -M"del Xmp.mwg-rs.Regions" DSC_3079.jpg') - out += utils.runTest('exiv2 -px DSC_3079.jpg') + out += utils.excute('exiv2 -px DSC_3079.jpg') + out += utils.excute('exiv2 -M"del Xmp.mwg-rs.Regions" DSC_3079.jpg') + out += utils.excute('exiv2 -px DSC_3079.jpg') out += [''] utils.reportTest('conversions', out) @@ -251,15 +251,15 @@ set Exif.Photo.DateTimeDigitized 2020:05:26 07:31:42''' cmdfile = 'cmdfile1' utils.save(cmds, cmdfile) utils.copyTestFile(crwfile) - out = utils.runTest('exiv2 -v -pt {crwfile}', vars()) - out += utils.runTest('exiv2 -v -m{cmdfile} {crwfile}', vars()) - out += utils.runTest('exiv2 -v -pt {crwfile}', vars()) + out = utils.excute('exiv2 -v -pt {crwfile}', vars()) + out += utils.excute('exiv2 -v -m{cmdfile} {crwfile}', vars()) + out += utils.excute('exiv2 -v -pt {crwfile}', vars()) utils.log.info('#2 Delete tags') utils.copyTestFile(crwfile) - out += utils.runTest("exiv2 -v -pt {crwfile}", vars()) - out += utils.runTest("exiv2 -v -M'del Exif.Canon.OwnerName' {crwfile}", vars()) - out += utils.runTest("exiv2 -v -pt {crwfile}", vars()) + out += utils.excute("exiv2 -v -pt {crwfile}", vars()) + out += utils.excute("exiv2 -v -M'del Exif.Canon.OwnerName' {crwfile}", vars()) + out += utils.excute("exiv2 -v -pt {crwfile}", vars()) # sed evades TZ issue on MSVC builds #1221 out = [line.replace('23 19:54', '23 18:54') for line in out] @@ -274,7 +274,7 @@ set Exif.Photo.DateTimeDigitized 2020:05:26 07:31:42''' out = [] for jpg in ['exiv2-gc.jpg', 'exiv2-canon-powershot-s40.jpg', 'exiv2-nikon-d70.jpg']: utils.copyTestFile(jpg) - out += utils.runTest('exifdata-test {jpg}', vars()) + out += utils.excute('exifdata-test {jpg}', vars()) out += [''] utils.reportTest('exifdata-test', out) @@ -287,15 +287,15 @@ set Exif.Photo.DateTimeDigitized 2020:05:26 07:31:42''' if filename == 'Reagan2.jp2': return [] if filename == 'exiv2-bug1199.webp': - out = utils.runTest('exiv2 --comment abcdefg {filename}', vars(), [0,1]) - out += utils.runTest('exiv2 -pS {filename}', vars()) + out = utils.excute('exiv2 --comment abcdefg {filename}', vars(), [0,1]) + out += utils.excute('exiv2 -pS {filename}', vars()) out += [''] else: - out = utils.runTest('exiv2 --comment abcdefg {filename}', vars()) - out += utils.runTest('exiv2 -pS {filename}', vars()) - out += utils.runTest('exiv2 -pc {filename}', vars()) - out += utils.runTest('exiv2 -dc {filename}', vars()) - out += utils.runTest('exiv2 -pS {filename}', vars()) + out = utils.excute('exiv2 --comment abcdefg {filename}', vars()) + out += utils.excute('exiv2 -pS {filename}', vars()) + out += utils.excute('exiv2 -pc {filename}', vars()) + out += utils.excute('exiv2 -dc {filename}', vars()) + out += utils.excute('exiv2 -pS {filename}', vars()) return out or [] # num = 1074 # ICC Profile Support @@ -309,28 +309,28 @@ set Exif.Photo.DateTimeDigitized 2020:05:26 07:31:42''' iccname = stub + '.icc' utils.copyTestFiles('large.icc', 'small.icc', filename) - out += utils.runTest('exiv2 -pS {filename}', vars()) - icc_content = utils.runTest('exiv2 -pC {filename}', vars(), encoding='ISO-8859-1') + out += utils.excute('exiv2 -pS {filename}', vars()) + icc_content = utils.excute('exiv2 -pC {filename}', vars(), encoding='ISO-8859-1') utils.save(icc_content, stub + '_1.icc', encoding='ISO-8859-1') - out += utils.runTest('exiv2 -eC --force {filename}', vars()) + out += utils.excute('exiv2 -eC --force {filename}', vars()) utils.mv(iccname, stub + '_2.icc') out += test1120(filename) utils.copyTestFile('large.icc', iccname) - out += utils.runTest('exiv2 -iC {filename}', vars()) - icc_content = utils.runTest('exiv2 -pC {filename}', vars(), encoding='ISO-8859-1') + out += utils.excute('exiv2 -iC {filename}', vars()) + icc_content = utils.excute('exiv2 -pC {filename}', vars(), encoding='ISO-8859-1') utils.save(icc_content, stub + '_large_1.icc', encoding='ISO-8859-1') - out += utils.runTest('exiv2 -pS {filename}', vars()) - out += utils.runTest('exiv2 -eC --force {filename}', vars()) + out += utils.excute('exiv2 -pS {filename}', vars()) + out += utils.excute('exiv2 -eC --force {filename}', vars()) utils.mv(iccname, stub + '_large_2.icc') out += test1120(filename) utils.copyTestFile('small.icc', iccname) - out += utils.runTest('exiv2 -iC {filename}', vars()) - icc_content = utils.runTest('exiv2 -pC {filename}', vars(), encoding='ISO-8859-1') + out += utils.excute('exiv2 -iC {filename}', vars()) + icc_content = utils.excute('exiv2 -pC {filename}', vars(), encoding='ISO-8859-1') utils.save(icc_content, stub + '_small_1.icc', encoding='ISO-8859-1') - out += utils.runTest('exiv2 -pS {filename}', vars()) - out += utils.runTest('exiv2 -eC --force {filename}', vars()) + out += utils.excute('exiv2 -pS {filename}', vars()) + out += utils.excute('exiv2 -eC --force {filename}', vars()) utils.mv(iccname, stub + '_small_2.icc') out += test1120(filename) @@ -349,21 +349,21 @@ set Exif.Photo.DateTimeDigitized 2020:05:26 07:31:42''' utils.copyTestFiles(jpg, gpx) out = ['--- show GPSInfo tags ---'] - out += utils.runTest('exiv2 -pa --grep GPSInfo {jpg}', vars()) + out += utils.excute('exiv2 -pa --grep GPSInfo {jpg}', vars()) out += ['--- deleting the GPSInfo tags'] - for tag in utils.runTest('exiv2 -Pk --grep GPSInfo {jpg}', vars()): + for tag in utils.excute('exiv2 -Pk --grep GPSInfo {jpg}', vars()): tag = tag.rstrip(' ') - out += utils.runTest('exiv2 -M"del {tag}" {jpg}', vars()) - out += utils.runTest('exiv2 -pa --grep GPS {jpg}', vars(), [0, 1]) + out += utils.excute('exiv2 -M"del {tag}" {jpg}', vars()) + out += utils.excute('exiv2 -pa --grep GPS {jpg}', vars(), [0, 1]) out += ['--- run geotag ---'] - geotag_out = utils.runTest('geotag -ascii -tz -8:00 {jpg} {gpx}', vars()) + geotag_out = utils.excute('geotag -ascii -tz -8:00 {jpg} {gpx}', vars()) geotag_out = geotag_out[0].split(' ')[1:] out += [' '.join(geotag_out)] out += ['--- show GPSInfo tags ---'] - out += utils.runTest('exiv2 -pa --grep GPSInfo {jpg}', vars()) + out += utils.excute('exiv2 -pa --grep GPSInfo {jpg}', vars()) out += [''] utils.reportTest('geotag-test', out) @@ -375,4 +375,3 @@ set Exif.Photo.DateTimeDigitized 2020:05:26 07:31:42''' utils.copyTestFiles(*test_files) for f in test_files: utils.ioTest(f) - diff --git a/tests/bash_tests/utils.py b/tests/bash_tests/utils.py index 0f5a319c..07bfd701 100644 --- a/tests/bash_tests/utils.py +++ b/tests/bash_tests/utils.py @@ -126,20 +126,28 @@ def md5sum(filename): return hashlib.md5(f.read()).hexdigest() -def runTest(cmd: str, vars_dict=dict(), expected_returncodes=[0], encoding=None) -> list: - """ Execute a file in the exiv2 bin directory and return its stdout. """ - cmd = cmd.format(**vars_dict) - args = shlex.split(cmd) - args[0] = os.path.join(Conf.bin_dir, args[0]) +def excute(cmd: str, vars_dict=dict(), expected_returncodes=[0], encoding=None) -> list: + """ + Execute a command in the shell and return its stdout and stderr. + If the binary of Exiv2 is executed, the absolute path is automatically added. + Sample: + excute('echo Hello') + excute('exiv2 --help') + """ + args = shlex.split(cmd.format(**vars_dict)) + if args[0] in Conf.bin_files: + args[0] = os.path.join(Conf.bin_dir, args[0]) p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=Conf.tmp_dir) stdout, stderr = p.communicate() output = (stdout + stderr).decode(encoding or Conf.encoding).rstrip('\n') if p.returncode not in expected_returncodes: - log.error('Failed to excute: {}'.format(cmd)) + log.error('Failed to excute: {}'.format(' '.join(args))) log.error('The expected return code is {}, but get {}'.format(str(expected_returncodes), p.returncode)) log.info('OUTPUT:\n{}'.format(output)) - raise RuntimeError(log.buffer) - return output.split('\n') if output else [] + raise RuntimeError(log.to_str()) + # output = output.replace('\r\n', '\n') # fix dos line-endings + # output = output.replace('\\', r'/') # fix dos path separators + return output.split('\n') if output else[] def reportTest(testname, output: (str, list), encoding=None): @@ -162,7 +170,7 @@ def ioTest(filename): src = os.path.join(Conf.data_dir, filename) out1 = os.path.join(Conf.tmp_dir, '{}.1'.format(filename)) out2 = os.path.join(Conf.tmp_dir, '{}.2'.format(filename)) - runTest('iotest {src} {out1} {out2}', vars()) + excute('iotest {src} {out1} {out2}', vars()) assert md5sum(src) == md5sum(out1), 'The output file is different' assert md5sum(src) == md5sum(out2), 'The output file is different'