1
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 */
8#include "Test.h"
9#include "SkData.h"
10
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
19static void assert_len(skiatest::Reporter* reporter, SkData* ref, size_t len) {
20    REPORTER_ASSERT(reporter, ref->size() == len);
21}
22
23static void assert_data(skiatest::Reporter* reporter, SkData* ref,
24                        const void* data, size_t len) {
25    REPORTER_ASSERT(reporter, ref->size() == len);
26    REPORTER_ASSERT(reporter, !memcmp(ref->data(), data, len));
27}
28
29void TestDataRef(skiatest::Reporter* reporter) {
30    const char* str = "We the people, in order to form a more perfect union.";
31    const int N = 10;
32
33    SkData* r0 = SkData::NewEmpty();
34    SkData* r1 = SkData::NewWithCopy(str, strlen(str));
35    SkData* r2 = SkData::NewWithProc(new int[N], N*sizeof(int),
36                                           delete_int_proc, gGlobal);
37    SkData* r3 = SkData::NewSubset(r1, 7, 6);
38
39    SkAutoUnref aur0(r0);
40    SkAutoUnref aur1(r1);
41    SkAutoUnref aur2(r2);
42    SkAutoUnref aur3(r3);
43
44    assert_len(reporter, r0, 0);
45    assert_len(reporter, r1, strlen(str));
46    assert_len(reporter, r2, N * sizeof(int));
47    assert_len(reporter, r3, 6);
48
49    assert_data(reporter, r1, str, strlen(str));
50    assert_data(reporter, r3, "people", 6);
51
52    SkData* tmp = SkData::NewSubset(r1, strlen(str), 10);
53    assert_len(reporter, tmp, 0);
54    tmp->unref();
55    tmp = SkData::NewSubset(r1, 0, 0);
56    assert_len(reporter, tmp, 0);
57    tmp->unref();
58}
59
60#include "TestClassDef.h"
61DEFINE_TESTCLASS("DataRef", DataRefTestClass, TestDataRef)
62