An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.8 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace UnityTest
{
class IntegrationTestGroupLine : IntegrationTestRendererBase
{
public static List<GameObject> FoldMarkers;
private IntegrationTestRendererBase[] m_Children;
public IntegrationTestGroupLine(GameObject gameObject) : base(gameObject)
{
}
protected internal override void DrawLine(Rect rect, GUIContent label, bool isSelected, RenderingOptions options)
{
EditorGUI.BeginChangeCheck();
var isClassFolded = !EditorGUI.Foldout(rect, !Folded, label, isSelected ? Styles.selectedFoldout : Styles.foldout);
if (EditorGUI.EndChangeCheck()) Folded = isClassFolded;
}
private bool Folded
{
get { return FoldMarkers.Contains(m_GameObject); }
set
{
if (value) FoldMarkers.Add(m_GameObject);
else FoldMarkers.RemoveAll(s => s == m_GameObject);
}
}
protected internal override void Render(int indend, RenderingOptions options)
{
base.Render(indend, options);
if (!Folded)
foreach (var child in m_Children)
child.Render(indend + 1, options);
}
protected internal override TestResult.ResultType GetResult()
{
bool ignored = false;
bool success = false;
foreach (var child in m_Children)
{
var result = child.GetResult();
if (result == TestResult.ResultType.Failed || result == TestResult.ResultType.FailedException || result == TestResult.ResultType.Timeout)
return TestResult.ResultType.Failed;
if (result == TestResult.ResultType.Success)
success = true;
else if (result == TestResult.ResultType.Ignored)
ignored = true;
else
ignored = false;
}
if (success) return TestResult.ResultType.Success;
if (ignored) return TestResult.ResultType.Ignored;
return TestResult.ResultType.NotRun;
}
protected internal override bool IsVisible(RenderingOptions options)
{
return m_Children.Any(c => c.IsVisible(options));
}
public override bool SetCurrentTest(TestComponent tc)
{
m_IsRunning = false;
foreach (var child in m_Children)
m_IsRunning |= child.SetCurrentTest(tc);
return m_IsRunning;
}
public void AddChildren(IntegrationTestRendererBase[] parseTestList)
{
m_Children = parseTestList;
}
}
}