///-----------------------------------------------------------------------------
TEST_F(OpcUaBinaryDeserialization, Variant_LOCALIZED_TEXT)
{
  using namespace OpcUa;
  using namespace OpcUa::Binary;

  char encodingMask = static_cast<char>(VariantType::LOCALIZED_TEXT);

  const std::vector<char> expectedData =
  {
    encodingMask,
    2, 4, 0, 0, 0, 't', 'e', 'x', 't'
  };

  GetChannel().SetData(expectedData);

  Variant var;
  GetStream() >> var;

  ASSERT_EQ(var.Type(), VariantType::LOCALIZED_TEXT);
  ASSERT_EQ(var.As<LocalizedText>(), LocalizedText("text"));
  ASSERT_FALSE(var.IsNul());
  ASSERT_FALSE(var.IsArray());
  ASSERT_TRUE(var.Dimensions.empty());
}
///-----------------------------------------------------------------------------
TEST_F(OpcUaBinaryDeserialization, Variant_BYTE_STRING)
{
  using namespace OpcUa;
  using namespace OpcUa::Binary;

  char encodingMask = static_cast<char>(VariantType::BYTE_STRING);

  const std::vector<char> expectedData =
  {
    encodingMask,
    2, 0, 0, 0, 1, 2
  };

  GetChannel().SetData(expectedData);

  Variant var;
  GetStream() >> var;

  ASSERT_EQ(var.Type(), VariantType::BYTE_STRING);
  ASSERT_EQ(var.As<ByteString>(), ByteString(std::vector<uint8_t> {1, 2}));
  ASSERT_FALSE(var.IsNul());
  ASSERT_FALSE(var.IsArray());
  ASSERT_TRUE(var.Dimensions.empty());
}
///-----------------------------------------------------------------------------
TEST_F(OpcUaBinaryDeserialization, Variant_DATETIME)
{
  using namespace OpcUa;
  using namespace OpcUa::Binary;

  char encodingMask = static_cast<char>(VariantType::DATE_TIME);

  const std::vector<char> expectedData =
  {
    encodingMask,
    8, 7, 6, 5, 4, 3, 2, 1
  };

  GetChannel().SetData(expectedData);

  Variant var;
  GetStream() >> var;

  ASSERT_EQ(var.Type(), VariantType::DATE_TIME);
  ASSERT_EQ(var.As<DateTime>(), 0x0102030405060708);
  ASSERT_FALSE(var.IsNul());
  ASSERT_FALSE(var.IsArray());
  ASSERT_TRUE(var.Dimensions.empty());
}
///-----------------------------------------------------------------------------
TEST_F(OpcUaBinaryDeserialization, Variant_STRING)
{
  using namespace OpcUa;
  using namespace OpcUa::Binary;

  char encodingMask = static_cast<char>(VariantType::STRING);

  const std::vector<char> expectedData =
  {
    encodingMask,
    4, 0, 0, 0, 'R', 'o', 'o', 't'
  };

  GetChannel().SetData(expectedData);

  Variant var;
  GetStream() >> var;

  ASSERT_EQ(var.Type(), VariantType::STRING);
  ASSERT_EQ(var.As<std::string>(), std::string("Root"));
  ASSERT_FALSE(var.IsNul());
  ASSERT_FALSE(var.IsArray());
  ASSERT_TRUE(var.Dimensions.empty());
}