         print(ansi_reset)
         return TestResult(tests: tests, passed: passed, failed: failed, errors: errors)
     }
-}+}
+
+
+
+
+// MARK: Logger
+
+class Logger {
+    func info(args: Any..., file: StaticString = __FILE__, function: String = __FUNCTION__, line: Int = __LINE__ ) {
+        let filename = (String(file) as NSString).lastPathComponent
+        
+        var str = ""
+        str += "\(filename) #\(line) "
+        str += "\(function)() "
+        let length = args.count
+        for (index, x) in args.enumerate() {
+            str += String(x)
+            if length==index+1 {
+                
+            } else {
+                str += " "
+            }
+        }
+        str += "\n"
+        print(str)
+    }
+}
+
+let Log = Logger()
public func objc_TestClassList() -> [AnyClass] {
    let expectedClassCount = objc_getClassList(nil, 0)
    let allClasses = UnsafeMutablePointer<AnyClass?>.alloc(Int(expectedClassCount))
    let autoreleasingAllClasses = AutoreleasingUnsafeMutablePointer<AnyClass?>(allClasses) // Huh? We should have gotten this for free.
    let actualClassCount:Int32 = objc_getClassList(autoreleasingAllClasses, expectedClassCount)
    
    var classes = [AnyClass]()

let ansi_escape = "\u{001b}["
let ansi_brown  = ansi_escape + "fg52,91,151;"
let ansi_red    = ansi_escape + "fg215,50,50;"
let ansi_green  = ansi_escape + "fg0,155,0;"
let ansi_reset  = ansi_escape + ";"

class UnitTest {
