#!/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):
self.writeFile(path, "jasyproject.yaml", """name: myproject """)
[docs] def createjpyaml_withContent(self, path):
self.writeFile(path, "jasyproject.yaml", """
name: myproject
content: {
myproject.Main: {
type: "jasy.Script",
source: [man/Main.js, man/Add.js]
},
myproject/main.css: {
type: "jasy.Asset",
source: [man/main.css]
}
}
""")
[docs] def createCaseOne(self):
# manual
path = os.path.join(tempfile.TemporaryDirectory().name, "myproject")
os.makedirs(path)
def createFolders():
os.makedirs(os.path.join(path, "man"))
def createSampleScripts():
self.writeFile(os.path.join(path, "man"), "index.html", """<html></html>""")
self.writeFile(os.path.join(path, "man"), "Main.js", ";")
self.writeFile(os.path.join(path, "man"), "Add.js", ";")
def createSampleAssets():
self.writeFile(os.path.join(path, "man"), "main.css", """html{}""")
createFolders()
self.createjpyaml_withContent(path)
createSampleScripts()
createSampleAssets()
return Project.getProjectFromPath(path, Session.Session())
[docs] def createCaseTwo(self):
# application
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 createSampleScripts():
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)
createSampleScripts()
createSampleAssets()
createSampleTranslations()
return Project.getProjectFromPath(path, Session.Session())
[docs] def createCaseThree(self):
# src
path = os.path.join(tempfile.TemporaryDirectory().name, "myproject")
os.makedirs(path)
def createFolders():
os.makedirs(os.path.join(path, "src"))
def createSampleScripts():
self.writeFile(os.path.join(path, "src"), "index.html", """<html></html>""")
self.writeFile(os.path.join(path, "src"), "Main.js", ";")
def createSampleAssets():
self.writeFile(os.path.join(path, "src"), "main.css", """html{}""")
createFolders()
self.createjpyaml(path)
createSampleScripts()
createSampleAssets()
return Project.getProjectFromPath(path, Session.Session())
[docs] def createCaseFour(self):
# resource
path = os.path.join(tempfile.TemporaryDirectory().name, "myproject")
os.makedirs(path)
def createFolders():
os.makedirs(os.path.join(path, "class"))
os.makedirs(os.path.join(path, "asset"))
os.makedirs(os.path.join(path, "translation"))
def createSampleScripts():
self.writeFile(os.path.join(path, "class"), "index.html", """<html></html>""")
self.writeFile(os.path.join(path, "class"), "Main.js", ";")
def createSampleAssets():
self.writeFile(os.path.join(path, "asset"), "main.css", """html{}""")
def createSampleTranslations():
self.writeFile(os.path.join(path, "translation"), "de.po", " ")
createFolders()
self.createjpyaml(path)
createSampleScripts()
createSampleAssets()
createSampleTranslations()
return Project.getProjectFromPath(path, Session.Session())
[docs] def getProjects(self):
return [self.createCaseOne(), self.createCaseTwo(), self.createCaseThree(), self.createCaseFour()]
[docs] def test_get_project(self):
for project in self.getProjects():
self.assertEqual(project.getName(), "myproject")
[docs] def test_get_name_from_path(self):
for project in self.getProjects():
self.assertEqual(Project.getProjectNameFromPath(project.getPath()), "myproject")
[docs] def test_scan(self):
for project in self.getProjects():
project.scan()
self.assertEqual(project.scanned, True)
[docs] def test_has_requires(self):
for project in self.getProjects():
self.assertEqual(project.hasRequires(), False)
[docs] def test_fields(self):
for project in self.getProjects():
self.assertEqual(project.getFields(), {})
[docs] def test_get_class_by_name(self):
for project in self.getProjects():
self.assertEqual(project.getScriptByName("myproject.Main"), project.getScripts()["myproject.Main"])
self.assertEqual(type(project.getScriptByName("myproject.Main")).__name__, "ScriptItem")
[docs] def test_assets(self):
for project in self.getProjects():
self.assertEqual(type(project.getAssets()["myproject/main.css"]).__name__, "AssetItem")
[docs] def test_translations(self):
for project in [self.createCaseTwo(), self.createCaseFour()]:
self.assertEqual(type(project.getTranslations()["myproject.de"]).__name__, "TranslationItem")
[docs] def test_manual_class_fusion(self):
self.assertEqual(self.createCaseOne().getScriptByName("myproject.Main").getText(), ";;")
if __name__ == '__main__':
logging.getLogger().setLevel(logging.ERROR)
suite = unittest.TestLoader().loadTestsFromTestCase(Tests)
unittest.TextTestRunner(verbosity=2).run(suite)