Source code for jasy.test.requirements

#!/usr/bin/env python3

import sys
import os
import unittest
import logging
import tempfile

# Extend PYTHONPATH with local 'lib' folder
jasyroot = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), os.pardir, os.pardir, os.pardir))
sys.path.insert(0, jasyroot)

import jasy.core.Project as Project
import jasy.core.Session as Session


[docs]class Tests(unittest.TestCase):
[docs] def writeFile(self, path, fileName, content): handle = open(os.path.join(path, fileName), mode="w", encoding="utf-8") handle.write(content) handle.close()
[docs] def readFile(self, path, fileName): return open(os.path.join(path, fileName), mode="r", encoding="utf-8").read()
[docs] def createjpyaml(self, path, requirements): content = """name: myproject requires:""" for r in requirements: content += r self.writeFile(path, "jasyproject.yaml", content)
# print(content)
[docs] def createRequirement(self, name, subrequirements=None, manPath=None): if manPath is not None: reqpath = os.path.join(manPath, name) else: reqpath = os.path.join(tempfile.TemporaryDirectory().name, name) try: os.makedirs(os.path.join(reqpath, "class")) except OSError as e: pass self.writeFile(os.path.join(reqpath, "class"), "Base.js", ";") requirement = (""" - source: %s config: name: %s""" % (reqpath, name)) if subrequirements is not None: requirement += """ requires:""" for s in subrequirements: requirement += s return requirement
[docs] def createSubRequirement(self, name, manPath=None): if manPath is not None: reqpath = os.path.join(manPath, name) else: reqpath = os.path.join(tempfile.TemporaryDirectory().name, name) try: os.makedirs(os.path.join(reqpath, "class")) except OSError as e: pass self.writeFile(os.path.join(reqpath, "class"), "Base.js", ";") return(""" - source: %s config: name: %s""" % (reqpath, name))
[docs] def createProject(self, session, requirements): path = os.path.join(tempfile.TemporaryDirectory().name, "myproject") os.makedirs(path) def createFolders(): os.makedirs(os.path.join(path, "source")) os.makedirs(os.path.join(os.path.join(path, "source"), "class")) os.makedirs(os.path.join(os.path.join(path, "source"), "asset")) os.makedirs(os.path.join(os.path.join(path, "source"), "translation")) def createSampleClasses(): self.writeFile(os.path.join(path, "source"), "index.html", """<html></html>""") self.writeFile(os.path.join(os.path.join(path, "source"), "class"), "Main.js", ";") def createSampleAssets(): self.writeFile(os.path.join(os.path.join(path, "source"), "asset"), "main.css", """html{}""") def createSampleTranslations(): self.writeFile(os.path.join(os.path.join(path, "source"), "translation"), "de.po", " ") createFolders() self.createjpyaml(path, requirements) createSampleClasses() createSampleAssets() createSampleTranslations() os.chdir(path) return Project.getProjectFromPath(path, session)
[docs] def test_has_requires(self): project = self.createProject(Session.Session(), [self.createRequirement("engine"), self.createRequirement("engine2")]) project.scan() self.assertEqual(project.hasRequires(), True)
[docs] def test_requires(self): project = self.createProject(Session.Session(), [self.createRequirement("engine"), self.createRequirement("engine2")]) project.scan() requires = project.getRequires() self.assertEqual(requires[0].getName(), "engine") self.assertEqual(requires[1].getName(), "engine2")
[docs] def test_classes(self): project = self.createProject(Session.Session(), [self.createRequirement("framework")]) project.scan() requires = project.getRequires() self.assertEqual(requires[0].getScriptByName('framework.Base').getText(), ";")
[docs] def test_subrequirement(self): project = self.createProject(Session.Session(), [self.createRequirement("engine", [self.createSubRequirement("framework")])]) project.scan() requires = project.getRequires() self.assertEqual(requires[0].getName(), "engine") subrequires = requires[0].getRequires() self.assertEqual(subrequires[0].getName(), "framework")
[docs] def test_subrequirement_classes(self): session = Session.Session() session.addProject(self.createProject(session, [self.createRequirement("engine", [self.createSubRequirement("framework")])])) self.assertEqual(len(session.getProjects()), 3)
""" # TODO catch if this ends in an endless loop def test_crossed_requirements(self): enginePath = tempfile.TemporaryDirectory().name frameworkPath = tempfile.TemporaryDirectory().name requirement1 = self.createRequirement("engine", [self.createSubRequirement("framework", manPath=frameworkPath)], manPath=enginePath) requirement2 = self.createRequirement("framework", [self.createSubRequirement("engine", manPath=enginePath)], manPath=frameworkPath) session = Session.Session() session.addProject(self.createProject([requirement1, requirement2])) self.assertEqual(len(session.getProjects()), 3) """
[docs] def test_same_subrequirements(self): frameworkPath = tempfile.TemporaryDirectory().name requirement1 = self.createRequirement("engine", [self.createSubRequirement("framework", manPath=frameworkPath)]) requirement2 = self.createRequirement("engine2", [self.createSubRequirement("framework", manPath=frameworkPath)]) session = Session.Session() session.addProject(self.createProject(session, [requirement1, requirement2])) self.assertEqual(len(session.getProjects()), 4)
if __name__ == '__main__': logging.getLogger().setLevel(logging.ERROR) suite = unittest.TestLoader().loadTestsFromTestCase(Tests) unittest.TextTestRunner(verbosity=2).run(suite)