blob: 31819a17ef492b49e59ac62229fce80d7e9af72b [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_MOCK_EVAL_CONTEXT_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_MOCK_EVAL_CONTEXT_H_
#include <map>
#include <string>
#include "src/developer/debug/zxdb/expr/eval_context.h"
#include "src/developer/debug/zxdb/symbols/mock_symbol_data_provider.h"
namespace zxdb {
class MockEvalContext : public EvalContext {
public:
MockEvalContext();
~MockEvalContext();
MockSymbolDataProvider* data_provider() { return data_provider_.get(); }
void set_language(ExprLanguage lang) { language_ = lang; }
// Adds the given mocked variable with the given name and value.
void AddVariable(const std::string& name, ExprValue v);
// Adds a definition for the given mocked type for returning from ResolveForwardDefinition() and
// GetConcreteType().
void AddType(fxl::RefPtr<Type> type);
// Adds a location result for GetLocationForAddress().
void AddLocation(uint64_t address, Location location);
// EvalContext implementation.
ExprLanguage GetLanguage() const override { return language_; }
void GetNamedValue(const ParsedIdentifier& ident, ValueCallback cb) const override;
void GetVariableValue(fxl::RefPtr<Variable> variable, ValueCallback cb) const override;
fxl::RefPtr<Type> ResolveForwardDefinition(const Type* type) const override;
fxl::RefPtr<Type> GetConcreteType(const Type* type) const override;
fxl::RefPtr<SymbolDataProvider> GetDataProvider() override;
NameLookupCallback GetSymbolNameLookupCallback() override;
Location GetLocationForAddress(uint64_t address) const override;
private:
fxl::RefPtr<MockSymbolDataProvider> data_provider_;
std::map<std::string, ExprValue> values_;
std::map<std::string, fxl::RefPtr<Type>> types_;
std::map<uint64_t, Location> locations_;
ExprLanguage language_ = ExprLanguage::kC;
};
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_MOCK_EVAL_CONTEXT_H_