// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "mojo/public/bindings/lib/array.h" #include "mojo/public/tests/simple_bindings_support.h" #include "testing/gtest/include/gtest/gtest.h" namespace mojo { namespace test { // Tests that basic Array operations work. TEST(BindingsArrayTest, Basic) { SimpleBindingsSupport bindings_support; // 8 bytes for the array, with 8 bytes left over for elements. internal::FixedBuffer buf(8 + 8*sizeof(char)); EXPECT_EQ(16u, buf.size()); Array<char>::Builder builder(8); EXPECT_EQ(8u, builder.size()); for (size_t i = 0; i < builder.size(); ++i) { char val = static_cast<char>(i*2); builder[i] = val; EXPECT_EQ(val, builder.at(i)); } Array<char> array = builder.Finish(); for (size_t i = 0; i < array.size(); ++i) { char val = static_cast<char>(i) * 2; EXPECT_EQ(val, array[i]); } } // Tests that basic Array<bool> operations work, and that it's packed into 1 // bit per element. TEST(BindingsArrayTest, Bool) { SimpleBindingsSupport bindings_support; // 8 bytes for the array header, with 8 bytes left over for elements. internal::FixedBuffer buf(8 + 3); EXPECT_EQ(16u, buf.size()); // An array of 64 bools can fit into 8 bytes. Array<bool>::Builder builder(64); EXPECT_EQ(64u, builder.size()); for (size_t i = 0; i < builder.size(); ++i) { bool val = i % 3 == 0; builder[i] = val; EXPECT_EQ(val, builder.at(i)); } Array<bool> array = builder.Finish(); for (size_t i = 0; i < array.size(); ++i) { bool val = i % 3 == 0; EXPECT_EQ(val, array[i]); } } // Tests that Array<Handle> supports transferring handles. TEST(BindingsArrayTest, Handle) { SimpleBindingsSupport bindings_support; AllocationScope scope; ScopedMessagePipeHandle pipe0, pipe1; CreateMessagePipe(&pipe0, &pipe1); Array<MessagePipeHandle>::Builder handles_builder(2); handles_builder[0] = pipe0.Pass(); handles_builder[1].reset(pipe1.release()); EXPECT_FALSE(pipe0.is_valid()); EXPECT_FALSE(pipe1.is_valid()); Array<MessagePipeHandle> handles = handles_builder.Finish(); EXPECT_TRUE(handles[0].is_valid()); EXPECT_TRUE(handles[1].is_valid()); pipe0 = handles[0].Pass(); EXPECT_TRUE(pipe0.is_valid()); EXPECT_FALSE(handles[0].is_valid()); } } // namespace test } // namespace mojo