OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "Test.h" | 8 #include "Test.h" |
9 #include "SkData.h" | 9 #include "SkData.h" |
10 #include "SkDataSet.h" | 10 #include "SkDataSet.h" |
11 #include "SkDataTable.h" | 11 #include "SkDataTable.h" |
12 #include "SkStream.h" | |
13 #include "SkOrderedReadBuffer.h" | 12 #include "SkOrderedReadBuffer.h" |
14 #include "SkOrderedWriteBuffer.h" | 13 #include "SkOrderedWriteBuffer.h" |
15 | 14 #include "SkOSFile.h" |
16 template <typename T> class SkTUnref { | 15 #include "SkStream.h" |
17 public: | |
18 SkTUnref(T* ref) : fRef(ref) {} | |
19 ~SkTUnref() { fRef->unref(); } | |
20 | |
21 operator T*() { return fRef; } | |
22 operator const T*() { return fRef; } | |
23 | |
24 private: | |
25 T* fRef; | |
26 }; | |
27 | 16 |
28 static void test_is_equal(skiatest::Reporter* reporter, | 17 static void test_is_equal(skiatest::Reporter* reporter, |
29 const SkDataTable* a, const SkDataTable* b) { | 18 const SkDataTable* a, const SkDataTable* b) { |
30 REPORTER_ASSERT(reporter, a->count() == b->count()); | 19 REPORTER_ASSERT(reporter, a->count() == b->count()); |
31 for (int i = 0; i < a->count(); ++i) { | 20 for (int i = 0; i < a->count(); ++i) { |
32 size_t sizea, sizeb; | 21 size_t sizea, sizeb; |
33 const void* mema = a->at(i, &sizea); | 22 const void* mema = a->at(i, &sizea); |
34 const void* memb = b->at(i, &sizeb); | 23 const void* memb = b->at(i, &sizeb); |
35 REPORTER_ASSERT(reporter, sizea == sizeb); | 24 REPORTER_ASSERT(reporter, sizea == sizeb); |
36 REPORTER_ASSERT(reporter, !memcmp(mema, memb, sizea)); | 25 REPORTER_ASSERT(reporter, !memcmp(mema, memb, sizea)); |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 ds.writeToStream(&ostream); | 205 ds.writeToStream(&ostream); |
217 SkMemoryStream istream; | 206 SkMemoryStream istream; |
218 istream.setData(ostream.copyToData())->unref(); | 207 istream.setData(ostream.copyToData())->unref(); |
219 SkDataSet copy(&istream); | 208 SkDataSet copy(&istream); |
220 | 209 |
221 test_datasets_equal(reporter, ds, copy); | 210 test_datasets_equal(reporter, ds, copy); |
222 } | 211 } |
223 | 212 |
224 static void test_dataset(skiatest::Reporter* reporter) { | 213 static void test_dataset(skiatest::Reporter* reporter) { |
225 SkDataSet set0(NULL, 0); | 214 SkDataSet set0(NULL, 0); |
226 SkDataSet set1("hello", SkTUnref<SkData>(SkData::NewWithCString("world"))); | 215 SkDataSet set1("hello", SkAutoTUnref<SkData>(SkData::NewWithCString("world")
)); |
227 | 216 |
228 const SkDataSet::Pair pairs[] = { | 217 const SkDataSet::Pair pairs[] = { |
229 { "one", SkData::NewWithCString("1") }, | 218 { "one", SkData::NewWithCString("1") }, |
230 { "two", SkData::NewWithCString("2") }, | 219 { "two", SkData::NewWithCString("2") }, |
231 { "three", SkData::NewWithCString("3") }, | 220 { "three", SkData::NewWithCString("3") }, |
232 }; | 221 }; |
233 SkDataSet set3(pairs, 3); | 222 SkDataSet set3(pairs, 3); |
234 unrefAll(pairs, 3); | 223 unrefAll(pairs, 3); |
235 | 224 |
236 test_dataset(reporter, set0, 0); | 225 test_dataset(reporter, set0, 0); |
(...skipping 26 matching lines...) Expand all Loading... |
263 SkAutoTUnref<SkData> r0(SkData::NewWithCopy(str, len + 1)); | 252 SkAutoTUnref<SkData> r0(SkData::NewWithCopy(str, len + 1)); |
264 SkAutoTUnref<SkData> r1(SkData::NewWithCString(str)); | 253 SkAutoTUnref<SkData> r1(SkData::NewWithCString(str)); |
265 | 254 |
266 REPORTER_ASSERT(reporter, r0->equals(r1)); | 255 REPORTER_ASSERT(reporter, r0->equals(r1)); |
267 | 256 |
268 SkAutoTUnref<SkData> r2(SkData::NewWithCString(NULL)); | 257 SkAutoTUnref<SkData> r2(SkData::NewWithCString(NULL)); |
269 REPORTER_ASSERT(reporter, 1 == r2->size()); | 258 REPORTER_ASSERT(reporter, 1 == r2->size()); |
270 REPORTER_ASSERT(reporter, 0 == *r2->bytes()); | 259 REPORTER_ASSERT(reporter, 0 == *r2->bytes()); |
271 } | 260 } |
272 | 261 |
| 262 static void test_files(skiatest::Reporter* reporter) { |
| 263 if (skiatest::Test::GetTmpDir().isEmpty()) { |
| 264 return; |
| 265 } |
| 266 |
| 267 const char* tmpDir = skiatest::Test::GetTmpDir().c_str(); |
| 268 SkString path; |
| 269 path.printf("%s%s", tmpDir, "data_test"); |
| 270 |
| 271 const char s[] = "abcdefghijklmnopqrstuvwxyz"; |
| 272 { |
| 273 SkFILEWStream writer(path.c_str()); |
| 274 if (!writer.isValid()) { |
| 275 SkString msg; |
| 276 msg.printf("Failed to create tmp file %s\n", path.c_str()); |
| 277 reporter->reportFailed(msg.c_str()); |
| 278 return; |
| 279 } |
| 280 writer.write(s, 26); |
| 281 } |
| 282 |
| 283 SkFILE* file = sk_fopen(path.c_str(), kRead_SkFILE_Flag); |
| 284 SkAutoTUnref<SkData> r1(SkData::NewFromFILE(file)); |
| 285 REPORTER_ASSERT(reporter, r1.get() != NULL); |
| 286 REPORTER_ASSERT(reporter, r1->size() == 26); |
| 287 REPORTER_ASSERT(reporter, strncmp(static_cast<const char*>(r1->data()), s, 2
6) == 0); |
| 288 |
| 289 int fd = sk_fileno(file); |
| 290 SkAutoTUnref<SkData> r2(SkData::NewFromFD(fd)); |
| 291 REPORTER_ASSERT(reporter, r2.get() != NULL); |
| 292 REPORTER_ASSERT(reporter, r2->size() == 26); |
| 293 REPORTER_ASSERT(reporter, strncmp(static_cast<const char*>(r2->data()), s, 2
6) == 0); |
| 294 } |
| 295 |
273 static void TestData(skiatest::Reporter* reporter) { | 296 static void TestData(skiatest::Reporter* reporter) { |
274 const char* str = "We the people, in order to form a more perfect union."; | 297 const char* str = "We the people, in order to form a more perfect union."; |
275 const int N = 10; | 298 const int N = 10; |
276 | 299 |
277 SkAutoTUnref<SkData> r0(SkData::NewEmpty()); | 300 SkAutoTUnref<SkData> r0(SkData::NewEmpty()); |
278 SkAutoTUnref<SkData> r1(SkData::NewWithCopy(str, strlen(str))); | 301 SkAutoTUnref<SkData> r1(SkData::NewWithCopy(str, strlen(str))); |
279 SkAutoTUnref<SkData> r2(SkData::NewWithProc(new int[N], N*sizeof(int), | 302 SkAutoTUnref<SkData> r2(SkData::NewWithProc(new int[N], N*sizeof(int), |
280 delete_int_proc, gGlobal)); | 303 delete_int_proc, gGlobal)); |
281 SkAutoTUnref<SkData> r3(SkData::NewSubset(r1, 7, 6)); | 304 SkAutoTUnref<SkData> r3(SkData::NewSubset(r1, 7, 6)); |
282 | 305 |
283 assert_len(reporter, r0, 0); | 306 assert_len(reporter, r0, 0); |
284 assert_len(reporter, r1, strlen(str)); | 307 assert_len(reporter, r1, strlen(str)); |
285 assert_len(reporter, r2, N * sizeof(int)); | 308 assert_len(reporter, r2, N * sizeof(int)); |
286 assert_len(reporter, r3, 6); | 309 assert_len(reporter, r3, 6); |
287 | 310 |
288 assert_data(reporter, r1, str, strlen(str)); | 311 assert_data(reporter, r1, str, strlen(str)); |
289 assert_data(reporter, r3, "people", 6); | 312 assert_data(reporter, r3, "people", 6); |
290 | 313 |
291 SkData* tmp = SkData::NewSubset(r1, strlen(str), 10); | 314 SkData* tmp = SkData::NewSubset(r1, strlen(str), 10); |
292 assert_len(reporter, tmp, 0); | 315 assert_len(reporter, tmp, 0); |
293 tmp->unref(); | 316 tmp->unref(); |
294 tmp = SkData::NewSubset(r1, 0, 0); | 317 tmp = SkData::NewSubset(r1, 0, 0); |
295 assert_len(reporter, tmp, 0); | 318 assert_len(reporter, tmp, 0); |
296 tmp->unref(); | 319 tmp->unref(); |
297 | 320 |
298 test_cstring(reporter); | 321 test_cstring(reporter); |
299 test_dataset(reporter); | 322 test_dataset(reporter); |
| 323 test_files(reporter); |
300 } | 324 } |
301 | 325 |
302 #include "TestClassDef.h" | 326 #include "TestClassDef.h" |
303 DEFINE_TESTCLASS("Data", DataTestClass, TestData) | 327 DEFINE_TESTCLASS("Data", DataTestClass, TestData) |
304 DEFINE_TESTCLASS("DataTable", DataTableTestClass, TestDataTable) | 328 DEFINE_TESTCLASS("DataTable", DataTableTestClass, TestDataTable) |
OLD | NEW |