From 76097f823598076a440ed9dc7fa6611583308002 Mon Sep 17 00:00:00 2001 From: halcanary Date: Wed, 20 Jan 2016 10:00:26 -0800 Subject: SkValue: implementation, unit test GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1604253002 Review URL: https://codereview.chromium.org/1604253002 --- tests/ValueTest.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/ValueTest.cpp b/tests/ValueTest.cpp index 220ef2f9ae..e046db7f9e 100644 --- a/tests/ValueTest.cpp +++ b/tests/ValueTest.cpp @@ -5,5 +5,107 @@ * found in the LICENSE file. */ -#include "Test.h" +#include "SkData.h" +#include "SkMatrix.h" #include "SkValue.h" +#include "Test.h" + +static const SkValue::Type example_type = + SkValue::Type(SkValue::kMaxPublicObject + 1); + +enum { kExampleS32, kExampleF32, kExampleU32, kExampleObject, kExampleBytes, + kExampleF32s, kExampleU32s, kExampleU16s, kExampleArray }; + +static const uint16_t aU16[] = { 1, 2, 3, 4 }; +static const uint32_t aU32[] = { 5, 6, 7, 8 }; +static const float aF32[] = { 9.0f, 9.125f, 9.25f }; +static const char hello[] = "HELLO"; + +static SkValue make_example(skiatest::Reporter* r, int level = 4) { + auto value = SkValue::Object(example_type); + value.set(kExampleU32, SkValue::FromU32(1000)); + value.set(kExampleS32, SkValue::FromS32(-123)); + value.set(kExampleF32, SkValue::FromF32(0.5f)); + value.set(kExampleU32, SkValue::FromU32(1234)); + if (level > 0) { + value.set(kExampleObject, make_example(r, 0)); + value.set(kExampleObject, make_example(r, level - 1)); // replace + } + SkAutoTUnref data(SkData::NewWithCString(hello)); + value.set(kExampleBytes, SkValue::FromBytes(data)); + + SkAutoTUnref dataU16(SkData::NewWithCopy(aU16, sizeof(aU16))); + SkAutoTUnref dataU32(SkData::NewWithCopy(aU32, sizeof(aU32))); + SkAutoTUnref dataF32(SkData::NewWithCopy(aF32, sizeof(aF32))); + value.set(kExampleU16s, SkValue::FromU16s(dataU16)); + value.set(kExampleU32s, SkValue::FromU32s(dataU32)); + value.set(kExampleF32s, SkValue::FromF32s(dataF32)); + + auto varray = SkValue::ValueArray(); + varray.append(SkValue::FromU32(99)); + varray.append(SkValue::FromS32(-99)); + value.set(kExampleArray, std::move(varray)); + return value; +} + +DEF_TEST(Value, r) { + SkValue val = make_example(r); + REPORTER_ASSERT(r, example_type == val.type()); + SkValue valCopy = val; + REPORTER_ASSERT(r, example_type == valCopy.type()); + valCopy.set(4321, SkValue()); + auto fn = [&](SkValue::Key k, const SkValue& v){ + int count; + switch (k) { + case kExampleS32: + REPORTER_ASSERT(r, -123 == v.s32()); + break; + case kExampleF32: + REPORTER_ASSERT(r, 0.5f == v.f32()); + break; + case kExampleU32: + REPORTER_ASSERT(r, 1234 == v.u32()); + break; + case kExampleObject: + REPORTER_ASSERT(r, example_type == v.type()); + break; + case kExampleBytes: + REPORTER_ASSERT(r, v.type() == SkValue::Bytes && v.bytes() + && v.bytes()->size() == sizeof(hello)); + break; + case kExampleF32s: + REPORTER_ASSERT(r, v.type() == SkValue::F32s && v.bytes() + && v.bytes()->size() == sizeof(aF32) + && v.f32s(&count) + && count == SK_ARRAY_COUNT(aF32)); + break; + case kExampleU32s: + REPORTER_ASSERT(r, v.type() == SkValue::U32s && v.bytes() + && v.bytes()->size() == sizeof(aU32) + && v.u32s(&count) + && count == SK_ARRAY_COUNT(aU32)); + break; + case kExampleU16s: + REPORTER_ASSERT(r, v.type() == SkValue::U16s && v.bytes() + && v.bytes()->size() == sizeof(aU16) + && v.u16s(&count) + && count == SK_ARRAY_COUNT(aU16)); + break; + case kExampleArray: + REPORTER_ASSERT(r, v.type() == SkValue::Array + && v.length() == 2); + break; + default: + ERRORF(r, "unexpected key"); + } + }; + val.foreach(fn); +} + +DEF_TEST(Value_Matrix, r) { + auto m = SkMatrix::MakeTrans(900.0f, 1000.0f); + auto val = SkToValue(m); + SkMatrix dst; + REPORTER_ASSERT(r, SkFromValue(val, &dst)); + REPORTER_ASSERT(r, dst == m); +} -- cgit v1.2.3