blob: dc7f42407f45d26f9f2712264e397065b229b6f7 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
reed@google.com1622c992011-06-14 19:22:21 +00008#include "Test.h"
reed@google.com8d0b5772011-06-24 13:07:31 +00009#include "SkData.h"
reed@google.com1622c992011-06-14 19:22:21 +000010
11static void* gGlobal;
12
13static void delete_int_proc(const void* ptr, size_t len, void* context) {
14 int* data = (int*)ptr;
15 SkASSERT(context == gGlobal);
16 delete[] data;
17}
18
reed@google.com8d0b5772011-06-24 13:07:31 +000019static void assert_len(skiatest::Reporter* reporter, SkData* ref, size_t len) {
reed@google.com1622c992011-06-14 19:22:21 +000020 REPORTER_ASSERT(reporter, ref->size() == len);
21}
22
reed@google.com8d0b5772011-06-24 13:07:31 +000023static void assert_data(skiatest::Reporter* reporter, SkData* ref,
reed@google.com1622c992011-06-14 19:22:21 +000024 const void* data, size_t len) {
25 REPORTER_ASSERT(reporter, ref->size() == len);
26 REPORTER_ASSERT(reporter, !memcmp(ref->data(), data, len));
27}
28
reed@google.comdbc936d2012-06-28 15:40:09 +000029static void test_cstring(skiatest::Reporter* reporter) {
30 const char str[] = "Hello world";
31 size_t len = strlen(str);
32
reed@google.coma63a8512012-07-02 20:29:00 +000033 SkAutoTUnref<SkData> r0(SkData::NewWithCopy(str, len + 1));
reed@google.comdbc936d2012-06-28 15:40:09 +000034 SkAutoTUnref<SkData> r1(SkData::NewWithCString(str));
35
36 REPORTER_ASSERT(reporter, r0->equals(r1));
37
38 SkAutoTUnref<SkData> r2(SkData::NewWithCString(NULL));
reed@google.coma63a8512012-07-02 20:29:00 +000039 REPORTER_ASSERT(reporter, 1 == r2->size());
40 REPORTER_ASSERT(reporter, 0 == *r2->bytes());
reed@google.comdbc936d2012-06-28 15:40:09 +000041}
42
caryclark@google.com42639cd2012-06-06 12:03:39 +000043static void TestDataRef(skiatest::Reporter* reporter) {
reed@google.com1622c992011-06-14 19:22:21 +000044 const char* str = "We the people, in order to form a more perfect union.";
45 const int N = 10;
46
reed@google.comdbc936d2012-06-28 15:40:09 +000047 SkAutoTUnref<SkData> r0(SkData::NewEmpty());
48 SkAutoTUnref<SkData> r1(SkData::NewWithCopy(str, strlen(str)));
49 SkAutoTUnref<SkData> r2(SkData::NewWithProc(new int[N], N*sizeof(int),
50 delete_int_proc, gGlobal));
51 SkAutoTUnref<SkData> r3(SkData::NewSubset(r1, 7, 6));
reed@google.com1622c992011-06-14 19:22:21 +000052
reed@google.com1622c992011-06-14 19:22:21 +000053 assert_len(reporter, r0, 0);
54 assert_len(reporter, r1, strlen(str));
55 assert_len(reporter, r2, N * sizeof(int));
56 assert_len(reporter, r3, 6);
57
58 assert_data(reporter, r1, str, strlen(str));
59 assert_data(reporter, r3, "people", 6);
60
reed@google.com8d0b5772011-06-24 13:07:31 +000061 SkData* tmp = SkData::NewSubset(r1, strlen(str), 10);
reed@google.com1622c992011-06-14 19:22:21 +000062 assert_len(reporter, tmp, 0);
63 tmp->unref();
reed@google.com8d0b5772011-06-24 13:07:31 +000064 tmp = SkData::NewSubset(r1, 0, 0);
reed@google.com1622c992011-06-14 19:22:21 +000065 assert_len(reporter, tmp, 0);
66 tmp->unref();
reed@google.comdbc936d2012-06-28 15:40:09 +000067
68 test_cstring(reporter);
reed@google.com1622c992011-06-14 19:22:21 +000069}
70
71#include "TestClassDef.h"
72DEFINE_TESTCLASS("DataRef", DataRefTestClass, TestDataRef)