blob: 651909b827a153d0b0c1b8b43e3e84b5b897cece [file] [log] [blame]
/*
* Copyright 2014, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_CAZE_TEST_UTILITIES_H
#define ANDROID_CAZE_TEST_UTILITIES_H
#include "BaseType.h"
#include "Interpreter.h"
#include "ResourceProvider.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace android {
namespace caze {
class GazerConnection;
class MockConnection;
namespace test {
// Matcher for matching the data pointed by a void pointer (arg) against the reference data provided
// in the data variable. Data should be an iterable collection of uint8_t types and arg should be a
// void pointer.
MATCHER_P(VoidPointee, data, "") {
uint32_t i = 0;
bool result = true;
const uint8_t* typedArg = static_cast<const uint8_t*>(arg);
for (uint8_t it : data) {
if (it != typedArg[i]) {
result = false;
}
++i;
}
return result;
}
// Action for setting the values pointed by a void pointer (arg0). Data should be an iterable
// collection of uint8_t types and arg should be a void pointer.
ACTION_P(SetVoidPointee, data) {
uint32_t i = 0;
uint8_t* typedArg = static_cast<uint8_t*>(arg0);
for (uint8_t it : data) {
typedArg[i] = it;
++i;
}
}
// Create an instruction code from the given details that can be interpreted by the interpreter
uint32_t instruction(Interpreter::InstructionCode code);
uint32_t instruction(Interpreter::InstructionCode code, uint32_t data);
uint32_t instruction(Interpreter::InstructionCode code, BaseType type, uint32_t data);
template <typename T>
std::vector<uint8_t> toByteVector(const T& x);
std::vector<uint8_t> createReplayData(uint32_t stackSize, uint32_t volatileMemorySize,
const std::vector<uint8_t>& constantMemory,
const ResourceProvider::ResourceList& resources,
const std::vector<uint32_t>& instructions);
std::unique_ptr<GazerConnection> createGazerConnection(MockConnection* connection,
const std::string& replayId,
uint32_t replayLength);
std::unique_ptr<GazerConnection> createGazerConnection(const std::string& replayId,
uint32_t replayLength);
} // end of namespace test
} // end of namespace caze
} // end of namespace android
#endif // ANDROID_CAZE_MOCK_UTILITIES_H