using OSGeo.MapGuide.Test.Common;
using SqliteDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OSGeo.MapGuide.Test.Operations
{
public interface IWebLayoutCreator
{
MgWebLayout CreateWebLayout(MgResourceIdentifier resId);
}
///
/// The base class of all test executors using the MgWebLayout
///
/// The test executor subclass type
public abstract class WebLayoutOperationExecutor : PlatformApiTestExecutor
{
protected MgWebLayout _wl;
protected IWebLayoutCreator _creator;
protected WebLayoutOperationExecutor(IWebLayoutCreator wl, string unitTestVm)
: base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
{
_creator = wl;
}
protected void CreateWebLayoutFromResource(int paramSetId)
{
if (_wl != null)
return;
_unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"WEBLAYOUT\"", paramSetId);
string wlId = _unitTestVm.GetString("ParamValue");
if (string.IsNullOrEmpty(wlId))
{
wlId = "Library://UnitTest/layouts/Test.WebLayout";
}
MgResourceIdentifier resId = new MgResourceIdentifier(wlId);
_wl = _creator.CreateWebLayout(resId);
}
protected string FormatProperties(MgWebWidget it)
{
string name = "";
switch (it.GetType())
{
case MgWebWidgetType.Separator:
name = "";
break;
case MgWebWidgetType.Command:
var cmd = ((MgWebCommandWidget)it).GetCommand();
name = cmd.GetLabel();
break;
case MgWebWidgetType.Flyout:
name = ((MgWebFlyoutWidget)it).GetLabel();
break;
}
string str = "[" + name + "/" + it.GetType();
if (it.GetType() == MgWebWidgetType.Separator)
{
return str + "]";
}
else if (it.GetType() == MgWebWidgetType.Command)
{
var cmd = ((MgWebCommandWidget)it).GetCommand();
return str + "/" + cmd.GetName() + "]";
}
else if (it.GetType() == MgWebWidgetType.Flyout)
{
var fly = ((MgWebFlyoutWidget)it);
str = str + "/" + fly.GetIconUrl();
var coll = fly.GetSubItems();
for (int i = 0; i < coll.GetCount(); i++)
{
var widget = coll.GetWidget(i);
str = str + "/" + FormatProperties(widget);
}
str = str + "]";
}
else
{
return "[** error **]";
}
return str;
}
}
}