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


Quelle  test_unify.py   Sprache: Python

 
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

import os
import sys
from io import StringIO

import mozunit

from mozbuild.dirutils import ensureParentDir
from mozpack.errors import AccumulatedErrors, ErrorMessage, errors
from mozpack.files import FileFinder
from mozpack.mozjar import JarWriter
from mozpack.test.test_files import MockDest, TestWithTmpDir
from mozpack.unify import UnifiedBuildFinder, UnifiedFinder


class TestUnified(TestWithTmpDir):
    def create_one(self, which, path, content):
        file = self.tmppath(os.path.join(which, path))
        ensureParentDir(file)
        if isinstance(content, str):
            content = content.encode("utf-8")
        open(file, "wb").write(content)

    def create_both(self, path, content):
        for p in ["a""b"]:
            self.create_one(p, path, content)


class TestUnifiedFinder(TestUnified):
    def test_unified_finder(self):
        self.create_both("foo/bar""foobar")
        self.create_both("foo/baz""foobaz")
        self.create_one("a""bar""bar")
        self.create_one("b""baz""baz")
        self.create_one("a""qux""foobar")
        self.create_one("b""qux""baz")
        self.create_one("a""test/foo""a\nb\nc\n")
        self.create_one("b""test/foo""b\nc\na\n")
        self.create_both("test/bar""a\nb\nc\n")

        finder = UnifiedFinder(
            FileFinder(self.tmppath("a")),
            FileFinder(self.tmppath("b")),
            sorted=["test"],
        )
        self.assertEqual(
            sorted(
                [(f, c.open().read().decode("utf-8")) for f, c in finder.find("foo")]
            ),
            [("foo/bar""foobar"), ("foo/baz""foobaz")],
        )
        self.assertRaises(ErrorMessage, any, finder.find("bar"))
        self.assertRaises(ErrorMessage, any, finder.find("baz"))
        self.assertRaises(ErrorMessage, any, finder.find("qux"))
        self.assertEqual(
            sorted(
                [(f, c.open().read().decode("utf-8")) for f, c in finder.find("test")]
            ),
            [("test/bar""a\nb\nc\n"), ("test/foo""a\nb\nc\n")],
        )


class TestUnifiedBuildFinder(TestUnified):
    def test_unified_build_finder(self):
        finder = UnifiedBuildFinder(
            FileFinder(self.tmppath("a")), FileFinder(self.tmppath("b"))
        )

        # Test chrome.manifest unification
        self.create_both("chrome.manifest""a\nb\nc\n")
        self.create_one("a""chrome/chrome.manifest""a\nb\nc\n")
        self.create_one("b""chrome/chrome.manifest""b\nc\na\n")
        self.assertEqual(
            sorted(
                [
                    (f, c.open().read().decode("utf-8"))
                    for f, c in finder.find("**/chrome.manifest")
                ]
            ),
            [("chrome.manifest""a\nb\nc\n"), ("chrome/chrome.manifest""a\nb\nc\n")],
        )

        # Test buildconfig.html unification
        self.create_one(
            "a",
            "chrome/browser/foo/buildconfig.html",
            "\n".join(
                [
                    "",
                    " ",
                    "
",
                    "

Build Configuration

"
,
                    "
foo
"
,
                    "
"
,
                    " ",
                    "",
                ]
            ),
        )
        self.create_one(
            "b",
            "chrome/browser/foo/buildconfig.html",
            "\n".join(
                [
                    "",
                    " ",
                    "
",
                    "

Build Configuration

"
,
                    "
bar
"
,
                    "
"
,
                    " ",
                    "",
                ]
            ),
        )
        self.assertEqual(
            sorted(
                [
                    (f, c.open().read().decode("utf-8"))
                    for f, c in finder.find("**/buildconfig.html")
                ]
            ),
            [
                (
                    "chrome/browser/foo/buildconfig.html",
                    "\n".join(
                        [
                            "",
                            " ",
                            "
",
                            "

Build Configuration

"
,
                            "
foo
"
,
                            "
"
,
                            "
bar
"
,
                            "
"
,
                            " ",
                            "",
                        ]
                    ),
                )
            ],
        )

        # Test xpi file unification
        xpi = MockDest()
        with JarWriter(fileobj=xpi, compress=Trueas jar:
            jar.add("foo""foo")
            jar.add("bar""bar")
        foo_xpi = xpi.read()
        self.create_both("foo.xpi", foo_xpi)

        with JarWriter(fileobj=xpi, compress=Trueas jar:
            jar.add("foo""bar")
        self.create_one("a""bar.xpi", foo_xpi)
        self.create_one("b""bar.xpi", xpi.read())

        errors.out = StringIO()
        with self.assertRaises(AccumulatedErrors), errors.accumulate():
            self.assertEqual(
                [(f, c.open().read()) for f, c in finder.find("*.xpi")],
                [("foo.xpi", foo_xpi)],
            )
        errors.out = sys.stderr

        # Test install.rdf unification
        x86_64 = "Darwin_x86_64-gcc3"
        x86 = "Darwin_x86-gcc3"
        target_tag = "<{em}targetPlatform>{platform}"
        target_attr = '{em}targetPlatform="{platform}" '

        rdf_tag = "".join(
            [
                '<{RDF}Description {em}bar="bar" {em}qux="qux">',
                "<{em}foo>foo",
                "{targets}",
                "<{em}baz>baz",
                "",
            ]
        )
        rdf_attr = "".join(
            [
                '<{RDF}Description {em}bar="bar" {attr}{em}qux="qux">',
                "{targets}",
                "<{em}foo>foo<{em}baz>baz",
                "",
            ]
        )

        for descr_ns, target_ns in (("RDF:"""), ("""em:"), ("RDF:""em:")):
            # First we need to infuse the above strings with our namespaces and
            # platform values.
            ns = {"RDF": descr_ns, "em": target_ns}
            target_tag_x86_64 = target_tag.format(platform=x86_64, **ns)
            target_tag_x86 = target_tag.format(platform=x86, **ns)
            target_attr_x86_64 = target_attr.format(platform=x86_64, **ns)
            target_attr_x86 = target_attr.format(platform=x86, **ns)

            tag_x86_64 = rdf_tag.format(targets=target_tag_x86_64, **ns)
            tag_x86 = rdf_tag.format(targets=target_tag_x86, **ns)
            tag_merged = rdf_tag.format(
                targets=target_tag_x86_64 + target_tag_x86, **ns
            )
            tag_empty = rdf_tag.format(targets="", **ns)

            attr_x86_64 = rdf_attr.format(attr=target_attr_x86_64, targets="", **ns)
            attr_x86 = rdf_attr.format(attr=target_attr_x86, targets="", **ns)
            attr_merged = rdf_attr.format(
                attr="", targets=target_tag_x86_64 + target_tag_x86, **ns
            )

            # This table defines the test cases, columns "a" and "b" being the
            # contents of the install.rdf of the respective platform and
            # "result" the exepected merged content after unification.
            testcases = (
                # _____a_____  _____b_____  ___result___#
                (tag_x86_64, tag_x86, tag_merged),
                (tag_x86_64, tag_empty, tag_empty),
                (tag_empty, tag_x86, tag_empty),
                (tag_empty, tag_empty, tag_empty),
                (attr_x86_64, attr_x86, attr_merged),
                (tag_x86_64, attr_x86, tag_merged),
                (attr_x86_64, tag_x86, attr_merged),
                (attr_x86_64, tag_empty, tag_empty),
                (tag_empty, attr_x86, tag_empty),
            )

            # Now create the files from the above table and compare
            results = []
            for emid, (rdf_a, rdf_b, result) in enumerate(testcases):
                filename = "ext/id{0}/install.rdf".format(emid)
                self.create_one("a", filename, rdf_a)
                self.create_one("b", filename, rdf_b)
                results.append((filename, result))

            self.assertEqual(
                sorted(
                    [
                        (f, c.open().read().decode("utf-8"))
                        for f, c in finder.find("**/install.rdf")
                    ]
                ),
                results,
            )


if __name__ == "__main__":
    mozunit.main()

91%


¤ Dauer der Verarbeitung: 0.5 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 ist 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