efl/src/tests/efl_mono/Main.cs

124 lines
4.2 KiB
C#

/*
* Copyright 2019 by its authors. See AUTHORS.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Reflection;
using System.Linq;
class TestMain
{
static Type[] GetTestCases(String name="")
{
return Assembly.GetExecutingAssembly().GetTypes().Where(t => String.Equals(t.Namespace, "TestSuite", StringComparison.Ordinal) &&
t.Name.StartsWith("Test") &&
t.Name.Contains(name)).ToArray();
}
static int Main(string[] args)
{
if (Environment.GetEnvironmentVariable("ELM_ENGINE") == null)
Environment.SetEnvironmentVariable("ELM_ENGINE", "buffer");
Efl.All.Init(Efl.Csharp.Components.Ui);
bool pass = true;
String ckRunSuite = Environment.GetEnvironmentVariable("CK_RUN_SUITE");
String ckRunCase = Environment.GetEnvironmentVariable("CK_RUN_CASE");
if (ckRunSuite != null && !ckRunSuite.Equals("mono"))
return 0;
if (ckRunCase == null)
ckRunCase = String.Empty;
Console.WriteLine("[ START SUITE ] " + ckRunSuite);
var cases= GetTestCases(ckRunCase);
foreach(var testCase in cases)
{
var localTestCases = testCase.GetMethods(BindingFlags.Static | BindingFlags.Public);
var setUp = Array.Find(localTestCases, m => String.Equals(m.Name, "SetUp", StringComparison.Ordinal));
var tearDown = Array.Find(localTestCases, m => String.Equals(m.Name, "TearDown", StringComparison.Ordinal));
foreach(var localTestCase in localTestCases)
{
if (localTestCase == setUp || localTestCase == tearDown)
continue;
// Cleanup garbage collector and job queue
Test.CollectAndIterate(1);
Console.WriteLine("[ RUN ] " + testCase.Name + "." + localTestCase.Name);
bool caseResult = true;
if (setUp != null)
{
try
{
setUp.Invoke(null, null);
}
catch (Exception e)
{
pass = false;
caseResult = false;
Console.WriteLine("[ ERROR ] SetUp fail: " + e.InnerException.ToString());
}
}
if (caseResult)
{
try
{
localTestCase.Invoke(null, null);
}
catch (Exception e)
{
pass = false;
caseResult = false;
Console.WriteLine("[ ERROR ] " + e.InnerException.ToString());
}
}
if (caseResult && tearDown != null)
{
try
{
tearDown.Invoke(null, null);
}
catch (Exception e)
{
pass = false;
caseResult = false;
Console.WriteLine("[ ERROR ] TearDown failed: " + e.InnerException.ToString());
}
}
Console.WriteLine("[ " + (caseResult ? "PASS" : "FAIL") + " ] " + testCase.Name + "." + localTestCase.Name);
}
}
Console.WriteLine("[ END SUITE ] " + ckRunSuite);
Efl.All.Shutdown();
if (!pass)
return -1;
return 0;
}
}