/**
 * @license
 * Copyright 2017 The Bazel Authors. All rights reserved.
 *
 * 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.
 */

/** @fileoverview Helper functions for tests. */
import * as fs from 'fs';

import {FileCache} from './file_cache';

export function writeTempFile(name: string, contents: string): string {
  // TEST_TMPDIR is set by bazel.
  const fn = (process.env.TEST_TMPDIR || '/tmp') + '/tmp.' +
      (Math.random() * 1000000).toFixed(0) + '.' + name;
  fs.writeFileSync(fn, contents);
  return fn;
}

let digestNumber = 0;

export function invalidateFileCache(fc: FileCache<{}>, ...fileNames: string[]) {
  const digests: {[filePath: string]: string} = {};
  for (const fp of fileNames) {
    digestNumber++;
    digests[fp] = fp + digestNumber;
  }
  fc.updateCache(digests);
}
