// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library dart2js.test.memory_source_file_helper;

import 'dart:async' show Future;
import 'dart:io';
export 'dart:io' show Options;

export '../../../sdk/lib/_internal/compiler/implementation/apiimpl.dart'
       show Compiler;

export '../../../sdk/lib/_internal/compiler/implementation/filenames.dart'
       show currentDirectory, nativeToUriPath;

import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart'
       show SourceFile;

import '../../../sdk/lib/_internal/compiler/implementation/source_file_provider.dart'
       show SourceFileProvider;

export '../../../sdk/lib/_internal/compiler/implementation/source_file_provider.dart'
       show FormattingDiagnosticHandler;

class MemorySourceFileProvider extends SourceFileProvider {
  static Map MEMORY_SOURCE_FILES;
  Future<String> readStringFromUri(Uri resourceUri) {
    if (resourceUri.scheme != 'memory') {
      return super.readStringFromUri(resourceUri);
    }
    String source = MEMORY_SOURCE_FILES[resourceUri.path];
    // TODO(ahe): Return new Future.error(...) ?
    if (source == null) throw 'No such file $resourceUri';
    String resourceName = '$resourceUri';
    this.sourceFiles[resourceName] = new SourceFile(resourceName, source);
    return new Future.value(source);
  }
}
