| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "SkOrderedWriteBuffer.h" |
| #include "SkValidatingReadBuffer.h" |
| #include "Test.h" |
| |
| static void Tests(skiatest::Reporter* reporter) { |
| { |
| static const uint32_t arraySize = 512; |
| unsigned char data[arraySize] = {0}; |
| SkOrderedWriteBuffer writer(1024); |
| writer.setFlags(SkOrderedWriteBuffer::kValidation_Flag); |
| writer.writeByteArray(data, arraySize); |
| uint32_t bytesWritten = writer.bytesWritten(); |
| // This should write the length (in 4 bytes) and the array |
| REPORTER_ASSERT(reporter, (4 + arraySize) == bytesWritten); |
| |
| unsigned char dataWritten[1024]; |
| writer.writeToMemory(dataWritten); |
| |
| // Make sure this fails when it should |
| SkValidatingReadBuffer buffer(dataWritten, bytesWritten); |
| unsigned char dataRead[arraySize]; |
| bool success = buffer.readByteArray(dataRead, 256); |
| // This should have failed, since 256 < sizeInBytes |
| REPORTER_ASSERT(reporter, !success); |
| |
| // Make sure this succeeds when it should |
| SkValidatingReadBuffer buffer2(dataWritten, bytesWritten); |
| success = buffer2.readByteArray(dataRead, arraySize); |
| // This should have succeeded, since there are enough bytes to read this |
| REPORTER_ASSERT(reporter, success); |
| } |
| |
| { |
| static const uint32_t arraySize = 64; |
| SkColor data[arraySize]; |
| SkOrderedWriteBuffer writer(1024); |
| writer.setFlags(SkOrderedWriteBuffer::kValidation_Flag); |
| writer.writeColorArray(data, arraySize); |
| uint32_t bytesWritten = writer.bytesWritten(); |
| // This should write the length (in 4 bytes) and the array |
| REPORTER_ASSERT(reporter, (4 + arraySize * sizeof(SkColor)) == bytesWritten); |
| |
| unsigned char dataWritten[1024]; |
| writer.writeToMemory(dataWritten); |
| |
| // Make sure this fails when it should |
| SkValidatingReadBuffer buffer(dataWritten, bytesWritten); |
| SkColor dataRead[arraySize]; |
| bool success = buffer.readColorArray(dataRead, 32); |
| // This should have failed, since 256 < sizeInBytes |
| REPORTER_ASSERT(reporter, !success); |
| |
| // Make sure this succeeds when it should |
| SkValidatingReadBuffer buffer2(dataWritten, bytesWritten); |
| success = buffer2.readColorArray(dataRead, arraySize); |
| // This should have succeeded, since there are enough bytes to read this |
| REPORTER_ASSERT(reporter, success); |
| } |
| |
| { |
| static const uint32_t arraySize = 64; |
| int32_t data[arraySize]; |
| SkOrderedWriteBuffer writer(1024); |
| writer.setFlags(SkOrderedWriteBuffer::kValidation_Flag); |
| writer.writeIntArray(data, arraySize); |
| uint32_t bytesWritten = writer.bytesWritten(); |
| // This should write the length (in 4 bytes) and the array |
| REPORTER_ASSERT(reporter, (4 + arraySize * sizeof(int32_t)) == bytesWritten); |
| |
| unsigned char dataWritten[1024]; |
| writer.writeToMemory(dataWritten); |
| |
| // Make sure this fails when it should |
| SkValidatingReadBuffer buffer(dataWritten, bytesWritten); |
| int32_t dataRead[arraySize]; |
| bool success = buffer.readIntArray(dataRead, 32); |
| // This should have failed, since 256 < sizeInBytes |
| REPORTER_ASSERT(reporter, !success); |
| |
| // Make sure this succeeds when it should |
| SkValidatingReadBuffer buffer2(dataWritten, bytesWritten); |
| success = buffer2.readIntArray(dataRead, arraySize); |
| // This should have succeeded, since there are enough bytes to read this |
| REPORTER_ASSERT(reporter, success); |
| } |
| |
| { |
| static const uint32_t arraySize = 64; |
| SkPoint data[arraySize]; |
| SkOrderedWriteBuffer writer(1024); |
| writer.setFlags(SkOrderedWriteBuffer::kValidation_Flag); |
| writer.writePointArray(data, arraySize); |
| uint32_t bytesWritten = writer.bytesWritten(); |
| // This should write the length (in 4 bytes) and the array |
| REPORTER_ASSERT(reporter, (4 + arraySize * sizeof(SkPoint)) == bytesWritten); |
| |
| unsigned char dataWritten[1024]; |
| writer.writeToMemory(dataWritten); |
| |
| // Make sure this fails when it should |
| SkValidatingReadBuffer buffer(dataWritten, bytesWritten); |
| SkPoint dataRead[arraySize]; |
| bool success = buffer.readPointArray(dataRead, 32); |
| // This should have failed, since 256 < sizeInBytes |
| REPORTER_ASSERT(reporter, !success); |
| |
| // Make sure this succeeds when it should |
| SkValidatingReadBuffer buffer2(dataWritten, bytesWritten); |
| success = buffer2.readPointArray(dataRead, arraySize); |
| // This should have succeeded, since there are enough bytes to read this |
| REPORTER_ASSERT(reporter, success); |
| } |
| |
| { |
| static const uint32_t arraySize = 64; |
| SkScalar data[arraySize]; |
| SkOrderedWriteBuffer writer(1024); |
| writer.setFlags(SkOrderedWriteBuffer::kValidation_Flag); |
| writer.writeScalarArray(data, arraySize); |
| uint32_t bytesWritten = writer.bytesWritten(); |
| // This should write the length (in 4 bytes) and the array |
| REPORTER_ASSERT(reporter, (4 + arraySize * sizeof(SkScalar)) == bytesWritten); |
| |
| unsigned char dataWritten[1024]; |
| writer.writeToMemory(dataWritten); |
| |
| // Make sure this fails when it should |
| SkValidatingReadBuffer buffer(dataWritten, bytesWritten); |
| SkScalar dataRead[arraySize]; |
| bool success = buffer.readScalarArray(dataRead, 32); |
| // This should have failed, since 256 < sizeInBytes |
| REPORTER_ASSERT(reporter, !success); |
| |
| // Make sure this succeeds when it should |
| SkValidatingReadBuffer buffer2(dataWritten, bytesWritten); |
| success = buffer2.readScalarArray(dataRead, arraySize); |
| // This should have succeeded, since there are enough bytes to read this |
| REPORTER_ASSERT(reporter, success); |
| } |
| } |
| |
| #include "TestClassDef.h" |
| DEFINE_TESTCLASS("Serialization", SerializationClass, Tests) |