Skip to content

Instantly share code, notes, and snippets.

@boozook
Created July 19, 2015 17:21
Show Gist options
  • Save boozook/8909b3d3a8de1ade4096 to your computer and use it in GitHub Desktop.
Save boozook/8909b3d3a8de1ade4096 to your computer and use it in GitHub Desktop.
haxe.unit.TestCase with Enum-matching
/*
* Copyright (C)2005-2012 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.unit;
#if macro
import haxe.macro.Compiler;
import haxe.macro.PositionTools;
import haxe.macro.Context;
import haxe.macro.Printer;
import haxe.macro.Expr;
#end
import haxe.PosInfos;
@:keepSub
@:publicFields
class TestCase {
public var currentTest : TestStatus;
public function new( ) {
}
public function setup() : Void {
}
public function tearDown() : Void {
}
function print( v : Dynamic ) {
haxe.unit.TestRunner.print(v);
}
function assertTrue( b:Bool, ?c : PosInfos ) : Void {
currentTest.done = true;
if (b != true){
currentTest.success = false;
currentTest.error = "expected true but was false";
currentTest.posInfos = c;
throw currentTest;
}
}
function assertFalse( b:Bool, ?c : PosInfos ) : Void {
currentTest.done = true;
if (b == true){
currentTest.success = false;
currentTest.error = "expected false but was true";
currentTest.posInfos = c;
throw currentTest;
}
}
function assertEquals<T>( expected: T , actual: T, ?c : PosInfos ) : Void {
currentTest.done = true;
if (actual != expected){
currentTest.success = false;
currentTest.error = "expected '" + expected + "' but was '" + actual + "'";
currentTest.posInfos = c;
throw currentTest;
}
}
macro function assertMatch<E:EnumValue>(_, expected:ExprOf<E>, actual:ExprOf<E>, ?c:ExprOf<PosInfos>)
{
//var posi = Context.getPosInfos(Context.currentPos());
var posi = Context.getPosInfos(expected.pos);
var line = sys.io.File.getContent(posi.file).substr(0, posi.min).split("\n").length;
var pos = macro {
fileName: $v{posi.file},
lineNumber: $v{line},
className: $v{Context.getLocalClass().get().name},
methodName: $v{Context.getLocalMethod()},
};
return macro {
currentTest.done = true;
var _actual = $actual;
if(!_actual.match($expected))
{
currentTest.success = false;
currentTest.error = "expected '" + $expected + "' but was '" + _actual + "'";
currentTest.posInfos = $pos;
throw currentTest;
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment