// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:convert';

import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/web/memory_fs.dart';

import '../../src/common.dart';

void main() {
  testWithoutContext('correctly parses source, source map, metadata, manifest files', () {
    final MemoryFileSystem fileSystem = MemoryFileSystem();
    final File source = fileSystem.file('source')
      ..writeAsStringSync('main() {}');
    final File sourcemap = fileSystem.file('sourcemap')
      ..writeAsStringSync('{}');
    final File metadata = fileSystem.file('metadata')
      ..writeAsStringSync('{}');
    final File manifest = fileSystem.file('manifest')
      ..writeAsStringSync(json.encode(<String, Object>{'/foo.js': <String, Object>{
        'code': <int>[0, source.lengthSync()],
        'sourcemap': <int>[0, 2],
        'metadata':  <int>[0, 2],
      }}));
    final WebMemoryFS webMemoryFS = WebMemoryFS();
    webMemoryFS.write(source, manifest, sourcemap, metadata);

    expect(utf8.decode(webMemoryFS.files['foo.js']), 'main() {}');
    expect(utf8.decode(webMemoryFS.sourcemaps['foo.js.map']), '{}');
    expect(utf8.decode(webMemoryFS.metadataFiles['foo.js.metadata']), '{}');
    expect(webMemoryFS.mergedMetadata, '{}');
  });
}
