Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  run.py   Sprache: Python

 
#!/usr/bin/env python3
# Adapted from https://github.com/tc39/test262/blob/main/tools/generation/test/run.py

import contextlib
import os
import shutil
import subprocess
import sys
import tempfile
import unittest

import pytest
from mozunit import main

testDir = os.path.dirname(os.path.abspath(__file__))
OUT_DIR = os.path.abspath(os.path.join(testDir, "..""out"))
EXPECTED_DIR = os.path.join(testDir, "expected")
ex = os.path.join(testDir, "..""test262-export.py")
importExec = os.path.join(testDir, "..""test262-update.py")
test262Url = "https://github.com/tc39/test262.git"


@contextlib.contextmanager
def TemporaryDirectory():
    tmpDir = tempfile.mkdtemp()
    try:
        yield tmpDir
    finally:
        shutil.rmtree(tmpDir)


class TestExport(unittest.TestCase):
    maxDiff = None

    def exportScript(self):
        abspath = os.path.abspath(os.path.join(testDir, "fixtures""export"))
        sp = subprocess.Popen(
            [sys.executable, os.path.abspath(ex), abspath, "--out", OUT_DIR],
            stdout=subprocess.PIPE,
            cwd=os.path.join(testDir, ".."),
        )
        stdout, stderr = sp.communicate()
        return dict(stdout=stdout, stderr=stderr, returncode=sp.returncode)

    def importLocal(self):
        with TemporaryDirectory() as cloneDir:
            branch = "smTempBranch"
            # Clone Test262 to a local branch
            subprocess.check_call(["git""clone""--depth=1", test262Url, cloneDir])
            # Checkout to a new branch
            subprocess.check_call(["git""-C", cloneDir, "checkout""-b", branch])
            # Make changes on the new branch
            # Remove test/language/export/escaped-from.js
            subprocess.check_call(
                ["git""-C", cloneDir, "rm""test/language/export/escaped-from.js"]
            )
            # Rename test/language/export/escaped-default.js
            subprocess.check_call(
                [
                    "git",
                    "-C",
                    cloneDir,
                    "mv",
                    "test/language/export/escaped-default.js",
                    "test/language/export/escaped-foobarbaz.js",
                ]
            )
            # Copy fixtures files
            fixturesDir = os.path.join(testDir, "fixtures""import""files")
            shutil.copytree(fixturesDir, os.path.join(cloneDir, "test""temp42"))
            # Stage and Commit changes
            subprocess.check_call(["git""-C", cloneDir, "add""."])
            subprocess.check_call(
                ["git""-C", cloneDir, "commit""-m"'"local foo"']
            )

            # Run import script
            print(
                "%s %s --local %s --out %s"
                % (sys.executable, importExec, cloneDir, OUT_DIR)
            )
            sp = subprocess.Popen(
                [sys.executable, importExec, "--local", cloneDir, "--out", OUT_DIR],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                cwd=os.path.join(testDir, ".."),
            )
            stdoutdata, stderrdata = sp.communicate()

            return stdoutdata, stderrdata, sp.returncode, cloneDir

    def isTestFile(self, filename: str):
        return not (
            filename.startswith(".")
            or filename.startswith("#")
            or filename.endswith("~")
        )

    def getFiles(self, path: str):
        names: list[str] = []
        for root, _, fileNames in os.walk(path):
            for fileName in filter(self.isTestFile, fileNames):
                names.append(os.path.join(root, fileName))
        names.sort()
        return names

    def compareTrees(self, expectedPath: str, actualPath: str):
        expectedFiles = self.getFiles(expectedPath)
        actualFiles = self.getFiles(actualPath)

        self.assertListEqual(
            [os.path.relpath(x, expectedPath) for x in expectedFiles],
            [os.path.relpath(x, actualPath) for x in actualFiles],
        )

        for expectedFile, actualFile in zip(expectedFiles, actualFiles):
            with open(expectedFile) as expectedHandle:
                with open(actualFile) as actualHandle:
                    self.assertMultiLineEqual(
                        expectedHandle.read(), actualHandle.read(), expectedFile
                    )

    def compareContents(self, output: bytes, filePath: str, folder: str):
        with open(filePath, "r"as file:
            expected = file.read()

        expected = expected.replace("{{folder}}", folder)
        self.assertMultiLineEqual(output.decode("utf-8"), expected)

    def tearDown(self):
        shutil.rmtree(OUT_DIR, ignore_errors=True)

    def test_export(self):
        result = self.exportScript()
        self.assertEqual(result["returncode"], 0)
        expectedPath = os.path.join(EXPECTED_DIR, "export")
        actualPath = os.path.join(OUT_DIR, "tests""export")
        self.compareTrees(expectedPath, actualPath)

    @pytest.mark.skip(reason="test fetches from github")
    def test_import_local(self):
        stdoutdata, stderrdata, returncode, folder = self.importLocal()
        self.assertEqual(stderrdata, b"")
        self.assertEqual(returncode, 0)
        self.compareTrees(
            os.path.join(EXPECTED_DIR, "import""files""local"),
            os.path.join(OUT_DIR, "local"),
        )
        self.compareContents(
            stdoutdata,
            os.path.join(testDir, "expected""import""output.txt"),
            folder,
        )


if __name__ == "__main__":
    main()

Messung V0.5
C=81 H=99 G=90

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge