blob: 0b72c4a93a2aad47cb25c2e4d08e4260574085d4 [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
33 SkAutoTUnref<SkData> r0(SkData::NewWithCopy(str, len));
34 SkAutoTUnref<SkData> r1(SkData::NewWithCString(str));
35
36 REPORTER_ASSERT(reporter, r0->equals(r1));
37
38 SkAutoTUnref<SkData> r2(SkData::NewWithCString(NULL));
39 REPORTER_ASSERT(reporter, r2->isEmpty());
40}
41
caryclark@google.com42639cd2012-06-06 12:03:39 +000042static void TestDataRef(skiatest::Reporter* reporter) {
reed@google.com1622c992011-06-14 19:22:21 +000043 const char* str = "We the people, in order to form a more perfect union.";
44 const int N = 10;
45
reed@google.comdbc936d2012-06-28 15:40:09 +000046 SkAutoTUnref<SkData> r0(SkData::NewEmpty());
47 SkAutoTUnref<SkData> r1(SkData::NewWithCopy(str, strlen(str)));
48 SkAutoTUnref<SkData> r2(SkData::NewWithProc(new int[N], N*sizeof(int),
49 delete_int_proc, gGlobal));
50 SkAutoTUnref<SkData> r3(SkData::NewSubset(r1, 7, 6));
reed@google.com1622c992011-06-14 19:22:21 +000051
reed@google.com1622c992011-06-14 19:22:21 +000052 assert_len(reporter, r0, 0);
53 assert_len(reporter, r1, strlen(str));
54 assert_len(reporter, r2, N * sizeof(int));
55 assert_len(reporter, r3, 6);
56
57 assert_data(reporter, r1, str, strlen(str));
58 assert_data(reporter, r3, "people", 6);
59
reed@google.com8d0b5772011-06-24 13:07:31 +000060 SkData* tmp = SkData::NewSubset(r1, strlen(str), 10);
reed@google.com1622c992011-06-14 19:22:21 +000061 assert_len(reporter, tmp, 0);
62 tmp->unref();
reed@google.com8d0b5772011-06-24 13:07:31 +000063 tmp = SkData::NewSubset(r1, 0, 0);
reed@google.com1622c992011-06-14 19:22:21 +000064 assert_len(reporter, tmp, 0);
65 tmp->unref();
reed@google.comdbc936d2012-06-28 15:40:09 +000066
67 test_cstring(reporter);
reed@google.com1622c992011-06-14 19:22:21 +000068}
69
70#include "TestClassDef.h"
71DEFINE_TESTCLASS("DataRef", DataRefTestClass, TestDataRef)