Simple Html page to view all the screenshots.

Do not delete the whole screenshots folder, but just delete per language when the screenshots are generated.

Generate the data.js file regarding the existing screenshots, to be able to add languages.
Also the language will be sorted alphabetically (English still first).
And the screenshot will be sorted alphabetically.

Update the script to generate screenshot for specific language on demand.
This commit is contained in:
Benoit Marty
2024-03-01 15:01:07 +01:00
committed by Benoit Marty
parent e6f5912150
commit 537074bee3
7 changed files with 2209 additions and 11 deletions

View File

@@ -2,16 +2,33 @@
import os
import re
import sys
# Read all arguments and return a list of them, this are the languages list.
def readArguments():
# Return sys.argv without the first argument
return sys.argv[1:]
def generateAllScreenshots(languages):
# If languages is empty, generate all screenshots
if len(languages) == 0:
print("Generating all screenshots...")
os.system("./gradlew recordPaparazziDebug -PallLanguages")
else:
tFile = "tests/uitests/src/test/kotlin/ui/T.kt"
print("Generating screenshots for languages: %s" % languages)
# Patch file T.kt, replace `@TestParameter(value = ["de"]) localeStr: String,` with `@TestParameter(value = ["de", "fr"]) localeStr: String,`
with open(tFile, "r") as file:
data = file.read()
languagesList = ", ".join([f"\"{lang}\"" for lang in languages])
data = data.replace("@TestParameter(value = [\"de\"]) localeStr: String,", "@TestParameter(value = [%s]) localeStr: String," % languagesList)
with open(tFile, "w") as file:
file.write(data)
os.system("./gradlew recordPaparazziDebug -PallLanguagesNoEnglish")
# Git reset the change on file T.kt
os.system("git checkout HEAD -- %s" % tFile)
def deleteExistingScreenshots():
print("Deleting existing screenshots...")
os.system("rm -rf screenshots")
def generateAllScreenshots():
print("Generating all screenshots...")
os.system("./gradlew recordPaparazziDebug -PallLanguages")
def detectLanguages():
@@ -61,6 +78,8 @@ def deleteDuplicatedScreenshots(lang):
def moveScreenshots(lang):
__doc__ = "Move screenshots to the folder per language"
targetFolder = "screenshots/" + lang
print("Deleting existing screenshots for %s..." % lang)
os.system("rm -rf %s" % targetFolder)
print("Moving screenshots for %s to %s..." % (lang, targetFolder))
files = os.listdir("tests/uitests/src/test/snapshots/images/")
# Filter files by language
@@ -72,13 +91,53 @@ def moveScreenshots(lang):
os.rename(fullFile, targetFolder + "/" + file)
def detectRecordedLanguages():
# List all the subfolders of the screenshots folder which contains 2 letters, sorted alphabetically
return sorted([f for f in os.listdir("screenshots") if len(f) == 2])
def generateJavascriptFile():
__doc__ = "Generate a javascript file to load the screenshots"
print("Generating javascript file...")
languages = detectRecordedLanguages()
# First item is the list of languages, adding "en" at the beginning
data = [["en"] + languages]
# If any translated screenshot exists, keep the file
files = sorted(
os.listdir("tests/uitests/src/test/snapshots/images/"),
key=lambda file: file[file.find("_", 6):],
)
for file in files:
fullFile = "./tests/uitests/src/test/snapshots/images/" + file
dataForFile = [fullFile]
hasAnyTranslatedFile = False
for l in languages:
translatedFile = "./screenshots/" + l + "/" + file[:3] + "T" + file[4:-7] + l + file[-5:]
if os.path.exists(translatedFile):
hasAnyTranslatedFile = True
dataForFile.append(translatedFile)
else:
dataForFile.append("")
if hasAnyTranslatedFile:
data.append(dataForFile)
with open("screenshots/html/data.js", "w") as f:
f.write("// Generated file, do not edit\n")
f.write("export const screenshots = [\n")
for line in data:
f.write("[\n")
for item in line:
f.write("\"" + item + "\",\n")
f.write("],\n")
f.write("];\n")
def main():
deleteExistingScreenshots()
generateAllScreenshots()
generateAllScreenshots(readArguments())
lang = detectLanguages()
for l in lang:
deleteDuplicatedScreenshots(l)
moveScreenshots(l)
generateJavascriptFile()
main()