//-----------------------------------------------------------------------
//
// Copyright (c) 2012-2013, AllSeen Alliance. All rights reserved.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
//-----------------------------------------------------------------------
using System;
using AllJoynUnity;
using Xunit;
namespace AllJoynUnityTest
{
public class MsgArgTest
{
[Fact]
public void BasicAssignment()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
arg = (byte)42;
Assert.Equal((byte)42, (byte)arg);
arg = true;
Assert.True((bool)arg);
arg = false;
Assert.False((bool)arg);
arg = (short)42;
Assert.Equal((short)42, (short)arg);
arg = (ushort)0xBEBE;
Assert.Equal((ushort)0xBEBE, (ushort)arg);
arg = (int)-9999;
Assert.Equal((int)-9999, (int)arg);
arg = (uint)0x32323232;
Assert.Equal((uint)0x32323232, (uint)arg);
arg = (long)-1;
Assert.Equal((long)-1, (long)arg);
arg = (ulong)0x6464646464646464;
Assert.Equal((ulong)0x6464646464646464, (ulong)arg);
arg = (float)1.61803f;
Assert.Equal((float)1.61803f, (float)arg);
arg = (double)3.14159265D;
Assert.Equal((double)3.14159265D, (double)arg);
arg = (string)"this is a string";
Assert.Equal("this is a string", (string)arg);
AllJoyn.MsgArg arg10 = new AllJoyn.MsgArg(10);
arg10[0] = (byte)5;
arg10[1] = true;
arg10[2] = (short)42;
arg10[3] = (ushort)45;
arg10[4] = (int)99;
arg10[5] = (uint)499;
arg10[6] = (long)566;
arg10[7] = (ulong)789301;
arg10[8] = (double)2.7275;
arg10[9] = (string)"I say Hello";
Assert.Equal((byte)5, (byte)arg10[0]);
Assert.Equal(true, (bool)arg10[1]);
Assert.Equal((short)42, (short)arg10[2]);
Assert.Equal((ushort)45, (ushort)arg10[3]);
Assert.Equal((int)99, (int)arg10[4]);
Assert.Equal((uint)499, (uint)arg10[5]);
Assert.Equal((long)566, (long)arg10[6]);
Assert.Equal((ulong)789301, (ulong)arg10[7]);
Assert.Equal((double)2.7275, (double)arg10[8]);
Assert.Equal((string)"I say Hello", (string)arg10[9]);
//assignment of an array
AllJoyn.MsgArg arg3 = new AllJoyn.MsgArg(3);
arg3[0] = (byte)5;
arg3[1] = (byte)13;
arg3[2] = (byte)42;
Assert.Equal((byte)5, (byte)arg3[0]);
Assert.Equal((byte)13, (byte)arg3[1]);
Assert.Equal((byte)42, (byte)arg3[2]);
//older test code to be thrown removed
AllJoyn.MsgArg argfoo = new AllJoyn.MsgArg();
argfoo = -9999;
Assert.Equal((int)-9999, (int)argfoo);
AllJoyn.MsgArg args = new AllJoyn.MsgArg(10);
for (int i = 0; i < 10; ++i)
{
args[i] = i;
}
for (int i = 0; i < 10; ++i)
{
Assert.Equal((int)i, (int)args[i]);
}
}
[Fact]
public void BasicSet()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((byte)13));
Assert.Equal((byte)13, (byte)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set(true));
Assert.True((bool)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((short)42));
Assert.Equal((short)42, (short)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((ushort)0xBEBE));
Assert.Equal((ushort)0xBEBE, (ushort)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((int)-9999));
Assert.Equal((int)-9999, (int)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((uint)0x32323232));
Assert.Equal((uint)0x32323232, (uint)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((long)-1));
Assert.Equal((long)-1, (long)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((ulong)0x6464646464646464));
Assert.Equal((ulong)0x6464646464646464, (ulong)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((float)1.61803f));
Assert.Equal((float)1.61803f, (float)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((double)3.14159265D));
Assert.Equal((double)3.14159265D, (double)arg);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((string)"this is a string"));
Assert.Equal("this is a string", (string)arg);
AllJoyn.MsgArg arg10 = new AllJoyn.MsgArg(10);
arg10[0].Set((byte)5);
arg10[1].Set(true);
arg10[2].Set((short)42);
arg10[3].Set((ushort)45);
arg10[4].Set((int)99);
arg10[5].Set((uint)499);
arg10[6].Set((long)566);
arg10[7].Set((ulong)789301);
arg10[8].Set((double)2.7275);
arg10[9].Set((string)"I say Hello");
Assert.Equal((byte)5, (byte)arg10[0]);
Assert.Equal(true, (bool)arg10[1]);
Assert.Equal((short)42, (short)arg10[2]);
Assert.Equal((ushort)45, (ushort)arg10[3]);
Assert.Equal((int)99, (int)arg10[4]);
Assert.Equal((uint)499, (uint)arg10[5]);
Assert.Equal((long)566, (long)arg10[6]);
Assert.Equal((ulong)789301, (ulong)arg10[7]);
Assert.Equal((double)2.7275, (double)arg10[8]);
Assert.Equal((string)"I say Hello", (string)arg10[9]);
//older test code to be thrown removed
AllJoyn.MsgArg argfoo = new AllJoyn.MsgArg();
argfoo.Set(-9999);
Assert.Equal((int)-9999, (int)argfoo);
AllJoyn.MsgArg args = new AllJoyn.MsgArg(10);
for (int i = 0; i < 10; ++i)
{
args[i].Set(i * 3);
}
for (int i = 0; i < 10; ++i)
{
Assert.Equal((int)i * 3, (int)args[i]);
}
}
[Fact]
public void BasicGetBasicTypes()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((byte)13));
byte y;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out y));
Assert.Equal((byte)13, y);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set(true));
bool b;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out b));
Assert.True(b);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((short)42));
short n;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out n));
Assert.Equal((short)42, n);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((ushort)0xBEBE));
ushort q;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out q));
Assert.Equal((ushort)0xBEBE, q);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((int)-9999));
int i;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out i));
Assert.Equal((int)-9999, i);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((uint)0x32323232));
uint u;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out u));
Assert.Equal((uint)0x32323232, u);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((long)-1));
long x;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out x));
Assert.Equal((long)-1, x);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((ulong)0x6464646464646464));
ulong t;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out t));
Assert.Equal((ulong)0x6464646464646464, t);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((double)3.14159265D));
double d;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out d));
Assert.Equal((double)3.14159265D, d);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((string)"this is a string"));
string s;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get(out s));
Assert.Equal("this is a string", s);
}
[Fact]
public void BasicGet()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((byte)13));
object y;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("y", out y));
Assert.Equal((byte)13, (byte)y);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set(true));
object b;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("b", out b));
Assert.True((bool)b);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((short)42));
object n;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("n", out n));
Assert.Equal((short)42, (short)n);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((ushort)0xBEBE));
object q;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("q", out q));
Assert.Equal((ushort)0xBEBE, (ushort)q);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((int)-9999));
object i;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("i", out i));
Assert.Equal((int)-9999, (object)i);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((uint)0x32323232));
object u;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("u", out u));
Assert.Equal((uint)0x32323232, (uint)u);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((long)-1));
object x;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("x", out x));
Assert.Equal((long)-1, (long)x);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((ulong)0x6464646464646464));
object t;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("t", out t));
Assert.Equal((ulong)0x6464646464646464, (ulong)t);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((double)3.14159265D));
object d;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("d", out d));
Assert.Equal((double)3.14159265D, (double)d);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set((string)"this is a string"));
object s;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("s", out s));
Assert.Equal("this is a string", (string)s);
// The only way to set and get object paths and signatures is to use
// two param Get and Set methods
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("o", "/org/foo/bar"));
object o;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("o", out o));
Assert.Equal("/org/foo/bar", (string)o);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("g", "a{is}d(siiux)"));
object g;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("g", out g));
Assert.Equal("a{is}d(siiux)", (string)g);
}
[Fact]
public void BasicArrayAssignment()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
//byte
byte[] in_byte_array = { 9, 19, 29, 39, 49 };
arg[0] = in_byte_array;
byte[] out_byte_array = (byte[])arg[0];
Assert.Equal(in_byte_array.Length, out_byte_array.Length);
for (int i = 0; i < out_byte_array.Length; i++)
{
Assert.Equal(in_byte_array[i], out_byte_array[i]);
}
//bool
bool[] in_bool_array = { false, false, true, true, false, true };
arg[0].Set(in_bool_array);
bool[] out_bool_array = (bool[])arg[0];
Assert.Equal(in_bool_array.Length, out_bool_array.Length);
for (int i = 0; i < out_bool_array.Length; i++)
{
Assert.Equal(in_bool_array[i], out_bool_array[i]);
}
AllJoyn.MsgArg arg2 = new AllJoyn.MsgArg(2);
arg2[0].Set("ab", in_bool_array);
arg2[1].Set("ab", in_bool_array);
out_bool_array = (bool[])arg2[0];
Assert.Equal(in_bool_array.Length, out_bool_array.Length);
for (int i = 0; i < out_bool_array.Length; i++)
{
Assert.Equal(in_bool_array[i], out_bool_array[i]);
}
out_bool_array = (bool[])arg2[1];
Assert.Equal(in_bool_array.Length, out_bool_array.Length);
for (int i = 0; i < out_bool_array.Length; i++)
{
Assert.Equal(in_bool_array[i], out_bool_array[i]);
}
//short
short[] in_short_array = { -9, -99, 999, 9999 };
arg[0] = in_short_array;
short[] out_short_array = (short[])arg[0];
Assert.Equal(in_short_array.Length, out_short_array.Length);
for (int i = 0; i < out_short_array.Length; i++)
{
Assert.Equal(in_short_array[i], out_short_array[i]);
}
//ushort
ushort[] in_ushort_array = { 9, 99, 999, 9999 };
arg[0] = in_ushort_array;
ushort[] out_ushort_array = (ushort[])arg[0];
Assert.Equal(in_ushort_array.Length, out_ushort_array.Length);
for (int i = 0; i < out_short_array.Length; i++)
{
Assert.Equal(in_ushort_array[i], out_ushort_array[i]);
}
//int
int[] in_int_array = { -8, -88, 888, 8888 };
arg[0] = in_int_array;
int[] out_int_array = (int[])arg[0];
Assert.Equal(in_int_array.Length, out_int_array.Length);
for (int i = 0; i < out_int_array.Length; i++)
{
Assert.Equal(in_int_array[i], out_int_array[i]);
}
//uint
uint[] in_uint_array = { 8, 88, 888, 8888 };
arg[0] = in_uint_array;
uint[] out_uint_array = (uint[])arg[0];
Assert.Equal(in_uint_array.Length, out_uint_array.Length);
for (int i = 0; i < out_int_array.Length; i++)
{
Assert.Equal(in_uint_array[i], out_uint_array[i]);
}
//long
long[] in_long_array = { -7, -77, 777, 7777 };
arg[0] = in_long_array;
long[] out_long_array = (long[])arg[0];
Assert.Equal(in_long_array.Length, out_long_array.Length);
for (int i = 0; i < out_long_array.Length; i++)
{
Assert.Equal(in_long_array[i], out_long_array[i]);
}
//ulong
ulong[] in_ulong_array = { 7, 77, 777, 7777 };
arg[0] = in_ulong_array;
ulong[] out_ulong_array = (ulong[])arg[0];
Assert.Equal(in_ulong_array.Length, out_ulong_array.Length);
for (int i = 0; i < out_long_array.Length; i++)
{
Assert.Equal(in_ulong_array[i], out_ulong_array[i]);
}
//double
double[] in_double_array = { 0.001, 0.01, 0.1, 1.0, 10.0, 100.0 };
arg[0] = in_double_array;
double[] out_double_array = (double[])arg[0];
Assert.Equal(in_double_array.Length, out_double_array.Length);
for (int i = 0; i < out_long_array.Length; i++)
{
Assert.Equal(in_double_array[i], out_double_array[i]);
}
//string
string[] in_string_array = { "one", "two", "three", "four" };
arg[0] = in_string_array;
string[] out_string_array = (string[])arg[0];
Assert.Equal(in_string_array.Length, out_string_array.Length);
for (int i = 0; i < out_string_array.Length; i++)
{
Assert.Equal(in_string_array[i], out_string_array[i]);
}
}
[Fact]
public void BasicArraySetGet()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
//byte
byte[] in_byte_array = { 9, 19, 29, 39, 49 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ay", in_byte_array));
object ay;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ay", out ay));
byte[] out_byte_array = (byte[])ay;
Assert.Equal(in_byte_array.Length, out_byte_array.Length);
for (int i = 0; i < out_byte_array.Length; i++)
{
Assert.Equal(in_byte_array[i], out_byte_array[i]);
}
//bool
bool[] in_bool_array = { false, false, true, true, false, true };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ab", in_bool_array));
object ab;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ab", out ab));
bool[] out_bool_array = (bool[])ab;
Assert.Equal(in_bool_array.Length, out_bool_array.Length);
for (int i = 0; i < out_bool_array.Length; i++)
{
Assert.Equal(in_bool_array[i], out_bool_array[i]);
}
//short
short[] in_short_array = { -9, -99, 999, 9999 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("an", in_short_array));
object an;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("an", out an));
short[] out_short_array = (short[])an;
Assert.Equal(in_short_array.Length, out_short_array.Length);
for (int i = 0; i < out_short_array.Length; i++)
{
Assert.Equal(in_short_array[i], out_short_array[i]);
}
//ushort
ushort[] in_ushort_array = { 9, 99, 999, 9999 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("aq", in_ushort_array));
object aq;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("aq", out aq));
ushort[] out_ushort_array = (ushort[])aq;
Assert.Equal(in_ushort_array.Length, out_ushort_array.Length);
for (int i = 0; i < out_short_array.Length; i++)
{
Assert.Equal(in_ushort_array[i], out_ushort_array[i]);
}
//int
int[] in_int_array = { -8, -88, 888, 8888 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ai", in_int_array));
object ai;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ai", out ai));
int[] out_int_array = (int[])ai;
Assert.Equal(in_int_array.Length, out_int_array.Length);
for (int i = 0; i < out_int_array.Length; i++)
{
Assert.Equal(in_int_array[i], out_int_array[i]);
}
//uint
uint[] in_uint_array = { 8, 88, 888, 8888 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("au", in_uint_array));
object au;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("au", out au));
uint[] out_uint_array = (uint[])au;
Assert.Equal(in_uint_array.Length, out_uint_array.Length);
for (int i = 0; i < out_int_array.Length; i++)
{
Assert.Equal(in_uint_array[i], out_uint_array[i]);
}
//long
long[] in_long_array = { -7, -77, 777, 7777 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ax", in_long_array));
object ax;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ax", out ax));
long[] out_long_array = (long[])ax;
Assert.Equal(in_long_array.Length, out_long_array.Length);
for (int i = 0; i < out_long_array.Length; i++)
{
Assert.Equal(in_long_array[i], out_long_array[i]);
}
//ulong
ulong[] in_ulong_array = { 7, 77, 777, 7777 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("at", in_ulong_array));
object at;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("at", out at));
ulong[] out_ulong_array = (ulong[])at;
Assert.Equal(in_ulong_array.Length, out_ulong_array.Length);
for (int i = 0; i < out_long_array.Length; i++)
{
Assert.Equal(in_ulong_array[i], out_ulong_array[i]);
}
//double
double[] in_double_array = { 0.001, 0.01, 0.1, 1.0, 10.0, 100.0 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ad", in_double_array));
object ad;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ad", out ad));
double[] out_double_array = (double[])ad;
Assert.Equal(in_double_array.Length, out_double_array.Length);
for (int i = 0; i < out_long_array.Length; i++)
{
Assert.Equal(in_double_array[i], out_double_array[i]);
}
//string
string[] in_string_array = { "one", "two", "three", "four" };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("as", in_string_array));
object sa;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("as", out sa));
string[] out_string_array = (string[])sa;
Assert.Equal(in_string_array.Length, out_string_array.Length);
for (int i = 0; i < out_string_array.Length; i++)
{
Assert.Equal(in_string_array[i], out_string_array[i]);
}
//object path
string[] in_path_array = { "/org/one", "/org/two", "/org/three", "/org/four" };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ao", in_path_array));
object ao;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ao", out ao));
string[] out_path_array = (string[])ao;
Assert.Equal(in_path_array.Length, out_path_array.Length);
for (int i = 0; i < out_path_array.Length; i++)
{
Assert.Equal(in_path_array[i], out_path_array[i]);
}
//signature
string[] in_signature_array = { "s", "sss", "as", "a(iiiiuu)" };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ag", in_signature_array));
object sg;
Assert.Equal(AllJoyn.QStatus.OK, arg.Get("ag", out sg));
string[] out_signature_array = (string[])sg;
Assert.Equal(in_signature_array.Length, out_signature_array.Length);
for (int i = 0; i < out_signature_array.Length; i++)
{
Assert.Equal(in_signature_array[i], out_signature_array[i]);
}
}
[Fact]
public void Variants()
{
double d = 3.14159265;
string s = "this is a string";
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
AllJoyn.MsgArg variantArg = new AllJoyn.MsgArg();
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("i", 420));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Set("v", arg));
int i;
long x;
Assert.Equal(AllJoyn.QStatus.BUS_SIGNATURE_MISMATCH, variantArg.Get(out x));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Get(out i));
Assert.Equal(420, i);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("d", d));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Set("v", arg));
double d_out;
Assert.Equal(AllJoyn.QStatus.BUS_SIGNATURE_MISMATCH, variantArg.Get(out i));
Assert.Equal(AllJoyn.QStatus.BUS_SIGNATURE_MISMATCH, variantArg.Get(out s));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Get(out d_out));
Assert.Equal(d, d_out);
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("s", s));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Set("v", arg));
Assert.Equal(AllJoyn.QStatus.BUS_SIGNATURE_MISMATCH, variantArg.Get(out i));
string s_out;
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Get(out s_out));
Assert.Equal(s, s_out);
}
[Fact]
public void VariantsOfArrays()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
AllJoyn.MsgArg variantArg = new AllJoyn.MsgArg();
//int
int[] in_int_array = { -8, -88, 888, 8888 };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ai", in_int_array));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Set("v", arg));
object ai;
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Get("ai", out ai));
int[] out_int_array = (int[])ai;
Assert.Equal(in_int_array.Length, out_int_array.Length);
for (int i = 0; i < out_int_array.Length; i++)
{
Assert.Equal(in_int_array[i], out_int_array[i]);
}
//signature
string[] in_signature_array = { "s", "sss", "as", "a(iiiiuu)" };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("ag", in_signature_array));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Set("v", arg));
object sg;
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Get("ag", out sg));
string[] out_signature_array = (string[])sg;
Assert.Equal(in_signature_array.Length, out_signature_array.Length);
for (int i = 0; i < out_signature_array.Length; i++)
{
Assert.Equal(in_signature_array[i], out_signature_array[i]);
}
}
[Fact]
public void VariantsOfStructs()
{
AllJoyn.MsgArg arg = new AllJoyn.MsgArg();
AllJoyn.MsgArg variantArg = new AllJoyn.MsgArg();
object[] in_v_struct = new object[] { (byte)24, true, (short)42, 3.14159, "Gonzo the magnificant" };
Assert.Equal(AllJoyn.QStatus.OK, arg.Set("(ybnds)", in_v_struct));
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Set("v", arg));
//unlike basic data types with container types we must first pull out the variant.
object tmp;
Assert.Equal(AllJoyn.QStatus.OK, variantArg.Get("v", out tmp));
object out_v_struct;
Assert.Equal(AllJoyn.QStatus.OK, ((AllJoyn.MsgArg)tmp).Get("(ybnds)", out out_v_struct));
object[] ovs = (object[])out_v_struct;
Assert.Equal(5, ovs.Length);
Assert.Equal((byte)24, (byte)ovs[0]);
Assert.True((bool)ovs[1]);
Assert.Equal((short)42, (short)ovs[2]);
Assert.Equal(3.14159, (double)ovs[3]);
Assert.Equal("Gonzo the magnificant" , (string)ovs[4]);
}
[Fact]
public void VariantOfDictionaries()
{
System.Collections.Generic.Dictionary