#!/usr/bin/env python3
import sys
import os
import unittest
import logging
import pkg_resources
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
import jasy.core.Profile as Profile
globProject = None
[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
fields:
debug: {check: "Boolean", default: False, values: [True, False]}
engine: {check: ["webkit", "gecko", "trident", "presto"], default: "trident", values: ["webkit", "gecko", "trident", "presto"]}
requires:"""
for r in requirements:
content += r
self.writeFile(path, "jasyproject.yaml", content)
# print(content)
[docs] def createRequirement(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", ";")
ruquirement = ("""
- source: %s
config:
name: %s""" % (reqpath, name))
return ruquirement
[docs] def createProject(self, session, requirements, onlyFileCreation=False):
global globProject
globProject = tempfile.TemporaryDirectory()
path = os.path.join(globProject.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)
if onlyFileCreation:
return path
return Project.getProjectFromPath(path, session)
[docs] def test_init(self):
session = Session.Session()
self.createProject(session, [], onlyFileCreation=True)
session.init()
self.assertTrue(session.getProjectByName("myproject") is not None)
[docs] def test_pause_resume(self):
session = Session.Session()
session.addProject(self.createProject(session, []))
try:
session.pause()
session.resume()
self.assertTrue(True)
except:
self.assertTrue(False)
[docs] def test_other_process(self):
session = Session.Session()
session2 = Session.Session()
project = self.createProject(session2, [])
try:
session.addProject(project)
session2.addProject(project)
session2.pause()
session.resume()
self.assertTrue(True)
except:
self.assertTrue(False)
try:
session = Session.Session()
session.addProject(project)
session2 = Session.Session()
session2.addProject(project)
session2.resume()
self.assertTrue(False)
except:
self.assertTrue(True)
try:
session = Session.Session()
session.addProject(project)
session2 = Session.Session()
session2.addProject(project)
session2.close()
session2.clean()
self.assertTrue(False)
except:
self.assertTrue(True)
try:
session = Session.Session()
session.addProject(project)
session2 = Session.Session()
session2.addProject(project)
session2.close()
session.clean()
self.assertTrue(False)
except:
self.assertTrue(True)
[docs] def test_load_library(self):
path = os.path.join(globProject.name, "mylib")
os.makedirs(path)
self.writeFile(path, "MyScript.py", """
@share
def double(number):
return number*2
@share
def pow(number):
return number*number
def add(number):
return number+1
""")
session = Session.Session()
env = {}
session.init(scriptEnvironment=env)
session.loadLibrary("MyScript", os.path.join(path, "MyScript.py"))
self.assertEqual(env["MyScript"].double(5), 10)
self.assertEqual(env["MyScript"].pow(4), 16)
try:
env["MyScript"].add(8)
self.assertTrue(False)
except:
self.assertTrue(True)
[docs] def test_permutate(self):
session = Session.Session()
session.addProject(self.createProject(session, []))
profile = Profile.Profile(session)
counter = 0
for p in profile.permutate():
counter += 1
self.assertEqual(counter, 8)
profile.permutateField("engine", values=["webkit", "gecko", "trident"])
counter = 0
for p in profile.permutate():
counter += 1
self.assertEqual(counter, 6)
profile.setField("debug", True)
counter = 0
for p in profile.permutate():
counter += 1
self.assertEqual(counter, 3)
[docs] def test_locale(self):
session = Session.Session()
session.addProject(self.createProject(session, []))
profile = Profile.Profile(session)
profile.setLocales(["de", "en_", "fr"])
counter = 0
for p in profile.permutate():
counter += 1
self.assertEqual(counter, 24)
if __name__ == '__main__':
logging.getLogger().setLevel(logging.ERROR)
suite = unittest.TestLoader().loadTestsFromTestCase(Tests)
unittest.TextTestRunner(verbosity=2).run(suite)