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

// @dart = 2.8

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, '{}');
  });
}
