// Copyright 2014 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.

#ifndef CRAZY_LINKER_SYSTEM_MOCK_H
#define CRAZY_LINKER_SYSTEM_MOCK_H

#include <stdint.h>

namespace crazy {

class SystemMock {
 public:
  // Create a new mock system instance and make ScopedFileDescriptor use it.
  // There can be only one mock system active at a given time.
  SystemMock();

  // Destroy a mock system instance.
  ~SystemMock();

  // Add a regular file to the mock file system. |path| is the entry's
  // path, and |data| and |data_size| are the data there. The data must
  // stay valid until the mock file system is destroyed.
  void AddRegularFile(const char* path, const char* data, size_t data_size);

  void AddEnvVariable(const char* var_name, const char* var_value);

  void SetCurrentDir(const char* path);
};

}  // namespace crazy

#endif  // CRAZY_LINKER_SYSTEM_MOCK_H
