efl/src/tests/efl_mono/EinaTestData.cs

303 lines
8.5 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.Linq;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
namespace EinaTestData
{
class BaseSequence
{
public static byte[] Values()
{
return new byte[3]{0x0,0x2A,0x42};
}
}
public static class BaseData
{
public static readonly int[] base_seq_int = {0x0,0x2A,0x42};
public static readonly int[] append_seq_int = {42,43,33};
public static readonly int[] modified_seq_int = {0x0,0x2A,0x42,42,43,33};
public static readonly string[] base_seq_str = {"0x0","0x2A","0x42"};
public static readonly string[] append_seq_str = {"42","43","33"};
public static readonly string[] modified_seq_str = {"0x0","0x2A","0x42","42","43","33"};
public static readonly Eina.Stringshare[] base_seq_strshare = {"0x0","0x2A","0x42"};
public static readonly Eina.Stringshare[] append_seq_strshare = {"42","43","33"};
public static readonly Eina.Stringshare[] modified_seq_strshare = {"0x0","0x2A","0x42","42","43","33"};
public static Dummy.Numberwrapper NW(int n)
{
var nw = new Dummy.Numberwrapper();
nw.SetNumber(n);
return nw;
}
public static Dummy.Numberwrapper[] BaseSeqObj()
{
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
a.SetNumber(0x0);
b.SetNumber(0x2A);
c.SetNumber(0x42);
return new Dummy.Numberwrapper[]{a,b,c};
}
public static Dummy.Numberwrapper[] AppendSeqObj()
{
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
a.SetNumber(42);
b.SetNumber(43);
c.SetNumber(33);
return new Dummy.Numberwrapper[]{a,b,c};
}
public static Dummy.Numberwrapper[] ModifiedSeqObj()
{
var a = new Dummy.Numberwrapper();
var b = new Dummy.Numberwrapper();
var c = new Dummy.Numberwrapper();
var d = new Dummy.Numberwrapper();
var e = new Dummy.Numberwrapper();
var f = new Dummy.Numberwrapper();
a.SetNumber(0x0);
b.SetNumber(0x2A);
c.SetNumber(0x42);
d.SetNumber(42);
e.SetNumber(43);
f.SetNumber(33);
return new Dummy.Numberwrapper[]{a,b,c,d,e,f};
}
public static void NumberwrapperSequenceAssertEqual(
Dummy.Numberwrapper[] a
, Dummy.Numberwrapper[] b
, [CallerLineNumber] int line = 0
, [CallerFilePath] string file = null
, [CallerMemberName] string member = null)
{
Test.Assert(a.Length == b.Length, "Different lenght", line, file, member);
for (int i = 0; i < a.Length; ++i)
{
int av = a[i].GetNumber();
int bv = b[i].GetNumber();
Test.Assert(av == bv, $"Different values for element [{i}]: {av} == {bv}", line, file, member);
}
}
}
class NativeInheritImpl : Dummy.TestObject
{
public NativeInheritImpl(Efl.Object parent = null) : base(parent) {}
public bool slice_in_flag = false;
public bool rw_slice_in_flag = false;
public bool slice_out_flag = false;
public bool rw_slice_out_flag = false;
public bool binbuf_in_flag = false;
public bool binbuf_in_own_flag = false;
public bool binbuf_out_flag = false;
public bool binbuf_out_own_flag = false;
public bool binbuf_return_flag = false;
public bool binbuf_return_own_flag = false;
override public bool EinaSliceIn(Eina.Slice slice)
{
slice_in_flag = true;
return slice.GetBytes().SequenceEqual(BaseSequence.Values());
}
override public bool EinaRwSliceIn(Eina.RwSlice slice)
{
rw_slice_in_flag = true;
return slice.GetBytes().SequenceEqual(BaseSequence.Values());
}
private byte[] slice_out_seq = null;
private GCHandle slice_out_pinned;
override public bool EinaSliceOut(ref Eina.Slice slice)
{
slice_out_flag = true;
slice_out_seq = (byte[]) BaseSequence.Values();
slice_out_pinned = GCHandle.Alloc(slice_out_seq, GCHandleType.Pinned);
IntPtr ptr = slice_out_pinned.AddrOfPinnedObject();
slice.Mem = ptr;
slice.Len = (UIntPtr) slice_out_seq.Length;
return true;
}
private byte[] rw_slice_out_seq = null;
private GCHandle rw_slice_out_pinned;
override public bool EinaRwSliceOut(ref Eina.RwSlice slice)
{
rw_slice_out_flag = true;
rw_slice_out_seq = (byte[]) BaseSequence.Values();
rw_slice_out_pinned = GCHandle.Alloc(rw_slice_out_seq, GCHandleType.Pinned);
IntPtr ptr = rw_slice_out_pinned.AddrOfPinnedObject();
slice.Mem = ptr;
slice.Len = (UIntPtr) rw_slice_out_seq.Length;
return true;
}
// //
//
override public bool EinaBinbufIn(Eina.Binbuf binbuf)
{
binbuf_in_flag = true;
bool r = binbuf.GetBytes().SequenceEqual(BaseSequence.Values());
r = r && !binbuf.Own;
binbuf.Insert(42, 0);
binbuf.Insert(43, 0);
binbuf.Append(33);
binbuf.Dispose();
return r;
}
private Eina.Binbuf binbuf_in_own_binbuf = null;
override public bool EinaBinbufInOwn(Eina.Binbuf binbuf)
{
binbuf_in_own_flag = true;
bool r = binbuf.GetBytes().SequenceEqual(BaseSequence.Values());
r = r && binbuf.Own;
binbuf.Insert(42, 0);
binbuf.Insert(43, 0);
binbuf.Append(33);
binbuf_in_own_binbuf = binbuf;
return r;
}
public bool binbuf_in_own_still_usable()
{
bool r = binbuf_in_own_binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33});
r = r && binbuf_in_own_binbuf.Own;
binbuf_in_own_binbuf.Dispose();
binbuf_in_own_binbuf = null;
return r;
}
private Eina.Binbuf binbuf_out_binbuf = null;
override public bool EinaBinbufOut(out Eina.Binbuf binbuf)
{
binbuf_out_flag = true;
binbuf = new Eina.Binbuf();
binbuf.Append(33);
binbuf_out_binbuf = binbuf;
return true;
}
public bool binbuf_out_still_usable()
{
bool r = binbuf_out_binbuf.GetBytes().SequenceEqual(BaseSequence.Values());
r = r && binbuf_out_binbuf.Own;
binbuf_out_binbuf.Dispose();
binbuf_out_binbuf = null;
return r;
}
private Eina.Binbuf binbuf_out_own_binbuf = null;
override public bool EinaBinbufOutOwn(out Eina.Binbuf binbuf)
{
binbuf_out_own_flag = true;
binbuf = new Eina.Binbuf();
binbuf.Append(33);
binbuf_out_own_binbuf = binbuf;
return true;
}
public bool binbuf_out_own_no_longer_own()
{
bool r = !binbuf_out_own_binbuf.Own;
binbuf_out_own_binbuf.Dispose();
binbuf_out_own_binbuf = null;
return r;
}
private Eina.Binbuf binbuf_return_binbuf = null;
override public Eina.Binbuf EinaBinbufReturn()
{
binbuf_return_flag = true;
var binbuf = new Eina.Binbuf();
binbuf.Append(33);
binbuf_return_binbuf = binbuf;
return binbuf;
}
public bool binbuf_return_still_usable()
{
bool r = binbuf_return_binbuf.GetBytes().SequenceEqual(BaseSequence.Values());
r = r && binbuf_return_binbuf.Own;
binbuf_return_binbuf.Dispose();
binbuf_return_binbuf = null;
return r;
}
private Eina.Binbuf binbuf_return_own_binbuf = null;
override public Eina.Binbuf EinaBinbufReturnOwn()
{
binbuf_return_own_flag = true;
var binbuf = new Eina.Binbuf();
binbuf.Append(33);
binbuf_return_own_binbuf = binbuf;
return binbuf;
}
public bool binbuf_return_own_no_longer_own()
{
bool r = !binbuf_return_own_binbuf.Own;
binbuf_return_own_binbuf.Dispose();
binbuf_return_own_binbuf = null;
return r;
}
}
} // EinaTestData