// Copyright 2017 The Chromium OS 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 "midis/tests/test_helper.h"

#include <base/strings/stringprintf.h>
#include <base/time/time.h>

namespace midis {

base::FilePath CreateFakeTempSubDir(base::FilePath temp_path,
                                    const std::string& subdir_path) {
  // Create the fake dev node file to which we write.
  temp_path = temp_path.Append(subdir_path);
  base::File::Error error;

  if (!CreateDirectoryAndGetError(temp_path, &error)) {
    LOG(ERROR) << "Failed to create dir: " << temp_path.value() << ": "
               << base::File::ErrorToString(error);
    return base::FilePath();
  }

  return temp_path;
}

base::FilePath CreateDevNodeFileName(base::FilePath dev_path_base,
                                     uint32_t sys_num,
                                     uint32_t dev_num) {
  // Create a fake devnode file
  std::string node_name = base::StringPrintf("midiC%uD%u", sys_num, dev_num);
  return dev_path_base.Append(node_name);
}

}  // namespace midis
