Skip to content

Commit 8c5327c

Browse files
authored
Dev -> Master | Added LTF (Lucifer Testing Framework) | 0.8.6r1
Added LTF, which is the Lucifer Testing Framework, it allows for easy written test cases and adds a -T argument to lucifer which will run all the lucifer tests.
2 parents 6def2ac + bed7516 commit 8c5327c

26 files changed

+453
-6
lines changed

LMI/LTF/Errors/LTFError.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class LFTError(Exception):
2+
def __init__(self, message):
3+
self.message = message
4+
self.__class__.__module__ = "LTF"
5+
6+
def raiseError(self):
7+
raise self
8+
9+
def __str__(self):
10+
return f"{self.message}"
11+
12+
def __repr__(self):
13+
return f"<{self.__class__.__name__}, message='{self.message}'>"

LMI/LTF/Errors/NotLTFTestError.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from .LTFError import LFTError
2+
3+
4+
class NotLTFTestError(LFTError):
5+
pass

LMI/LTF/Errors/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from .LTFError import LFTError
2+
from .NotLTFTestError import NotLTFTestError

LMI/LTF/Formatters/Basic.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from .Utils import map_failed_test
2+
3+
4+
class Basic:
5+
def __init__(self, statistics):
6+
self.statistics = statistics
7+
8+
def generate_display(self):
9+
data = ""
10+
for testSet in self.statistics:
11+
data += "====Test: " + testSet.__class__.__name__ + "====\n\n"
12+
for test in self.statistics[testSet]:
13+
testData = self.statistics[testSet][test]
14+
data += "----" + test + "----\n"
15+
data += "Succeeded: " + map_failed_test(testData["failed"]) + "\n"
16+
data += "Time Taken: " + str(testData["time"]) + "\n\n"
17+
return data
18+
19+
def show(self):
20+
print(self.generate_display())
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from .Basic import Basic
2+
from .Utils import generate_percent_breakdown
3+
4+
5+
class PercentageBasic(Basic):
6+
def generate_display(self):
7+
data = super().generate_display()
8+
data += generate_percent_breakdown(self.statistics)
9+
return data
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from .Short import Short
2+
from .Utils import generate_percent_breakdown
3+
4+
5+
class PercentageShort(Short):
6+
def generate_display(self):
7+
data = super().generate_display()
8+
data += generate_percent_breakdown(self.statistics)
9+
return data

LMI/LTF/Formatters/Short.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from .Utils import map_failed_test
2+
3+
4+
class Short:
5+
def __init__(self, statistics):
6+
self.statistics = statistics
7+
8+
def generate_display(self):
9+
data = ""
10+
for testSet in self.statistics:
11+
data += "====Test: " + testSet.__class__.__name__ + "====\n"
12+
for test in self.statistics[testSet]:
13+
testData = self.statistics[testSet][test]
14+
data += test + ": " + map_failed_test(testData["failed"]) + "\n"
15+
data += "\n"
16+
return data
17+
18+
def show(self):
19+
print(self.generate_display())

LMI/LTF/Formatters/Utils.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
def generate_percent_breakdown(statistics):
2+
data = ""
3+
failedTests = 0
4+
totalTests = 0
5+
failedTestSets = 0
6+
totalTestSets = 0
7+
for testSet in statistics:
8+
setFailed = False
9+
for test in statistics[testSet]:
10+
testData = statistics[testSet][test]
11+
if testData["failed"]:
12+
failedTests += 1
13+
setFailed = True
14+
totalTests += 1
15+
if setFailed:
16+
failedTestSets += 1
17+
totalTestSets += 1
18+
data += "#### Final Breakdown ####\n"
19+
data += "Failed Tests: " + str(failedTests) + "/" + str(totalTests) + "\n"
20+
data += "Failed Test Sets: " + str(failedTestSets) + "/" + str(totalTestSets) + "\n"
21+
data += "Test Succeeded: " + str(round(((totalTests - failedTests) / totalTests) * 100, 2)) + "%\n"
22+
data += "Test Sets Succeeded: " + str(round(
23+
((totalTestSets - failedTestSets) / totalTestSets) * 100, 2)
24+
) + "%\n"
25+
return data
26+
27+
28+
def map_failed_test(failed_value):
29+
return {
30+
True: "no",
31+
False: "yes",
32+
None: "skipped"
33+
}.get(failed_value, "unknown")

LMI/LTF/Formatters/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .Basic import Basic
2+
from .PercentageBasic import PercentageBasic
3+
from .PercentageShort import PercentageShort
4+
from .Short import Short
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from .Requirement import Requirement
2+
3+
4+
class RequireLuciferManager(Requirement):
5+
def satisfyRequirement(self):
6+
from LMI import LMI
7+
self.instance.luciferManager = LMI.luciferManager
8+
9+
def check_satisfied(self):
10+
if hasattr(self.instance, "luciferManger"):
11+
return True
12+
return False

0 commit comments

Comments
 (0)