web_asset_server_test.dart 4.83 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6
// @dart = 2.8

7 8
import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
9
import 'package:flutter_tools/src/base/io.dart';
10
import 'package:flutter_tools/src/base/platform.dart';
11
import 'package:flutter_tools/src/isolated/devfs_web.dart';
12 13 14 15
import 'package:shelf/shelf.dart';

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

16 17 18 19 20 21 22 23
const List<int> kTransparentImage = <int>[
  0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49,
  0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06,
  0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4, 0x89, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44,
  0x41, 0x54, 0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x01, 0x0D,
  0x0A, 0x2D, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE,
];

24 25 26 27 28 29 30
final Platform platform = FakePlatform(
  operatingSystem: 'linux',
  environment: <String, String>{
    'HOME': '/'
  },
);

31
void main() {
32
  FileSystem fileSystem;
33 34

  setUp(() {
35 36 37 38 39 40 41 42 43 44 45 46
    fileSystem = MemoryFileSystem.test();
    fileSystem.file('lib/main.dart')
      .createSync(recursive: true);
    fileSystem.file('web/index.html')
      ..createSync(recursive: true)
      ..writeAsStringSync('hello');
    fileSystem.file('build/flutter_assets/foo.png')
      ..createSync(recursive: true)
      ..writeAsBytesSync(kTransparentImage);
    fileSystem.file('build/flutter_assets/bar')
      ..createSync(recursive: true)
      ..writeAsBytesSync(<int>[1, 2, 3]);
47 48
  });

49 50 51 52 53 54 55
  testWithoutContext('release asset server serves correct mime type and content length for png', () async {
    final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base,
      fileSystem: fileSystem,
      platform: platform,
      flutterRoot: '/flutter',
      webBuildDirectory: 'build/web',
    );
56
    fileSystem.file('build/web/assets/foo.png')
57 58 59 60 61 62 63 64 65
      ..createSync(recursive: true)
      ..writeAsBytesSync(kTransparentImage);
    final Response response = await assetServer
      .handle(Request('GET', Uri.parse('http://localhost:8080/assets/foo.png')));

    expect(response.headers, <String, String>{
      'Content-Type': 'image/png',
      'content-length': '64',
    });
66
  });
67

68 69 70 71 72 73 74
  testWithoutContext('release asset server serves correct mime type and content length for JavaScript', () async {
    final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base,
      fileSystem: fileSystem,
      platform: platform,
      flutterRoot: '/flutter',
      webBuildDirectory: 'build/web',
    );
75
    fileSystem.file('build/web/assets/foo.js')
76 77 78 79 80 81 82 83 84
      ..createSync(recursive: true)
      ..writeAsStringSync('function main() {}');
    final Response response = await assetServer
      .handle(Request('GET', Uri.parse('http://localhost:8080/assets/foo.js')));

    expect(response.headers, <String, String>{
      'Content-Type': 'application/javascript',
      'content-length': '18',
    });
85
  });
86

87 88 89 90 91 92 93
  testWithoutContext('release asset server serves correct mime type and content length for html', () async {
    final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base,
      fileSystem: fileSystem,
      platform: platform,
      flutterRoot: '/flutter',
      webBuildDirectory: 'build/web',
    );
94
    fileSystem.file('build/web/assets/foo.html')
95 96 97 98 99 100 101 102 103
      ..createSync(recursive: true)
      ..writeAsStringSync('<!doctype html><html></html>');
    final Response response = await assetServer
      .handle(Request('GET', Uri.parse('http://localhost:8080/assets/foo.html')));

    expect(response.headers, <String, String>{
      'Content-Type': 'text/html',
      'content-length': '28',
    });
104
  });
105

106 107 108 109 110 111 112
  testWithoutContext('release asset server serves content from flutter root', () async {
    final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base,
      fileSystem: fileSystem,
      platform: platform,
      flutterRoot: '/flutter',
      webBuildDirectory: 'build/web',
    );
113
    fileSystem.file('flutter/bar.dart')
114 115 116 117 118 119
      ..createSync(recursive: true)
      ..writeAsStringSync('void main() { }');
    final Response response = await assetServer
      .handle(Request('GET', Uri.parse('http://localhost:8080/flutter/bar.dart')));

    expect(response.statusCode, HttpStatus.ok);
120
  });
121

122 123 124 125 126 127 128
  testWithoutContext('release asset server serves content from project directory', () async {
    final ReleaseAssetServer assetServer = ReleaseAssetServer(Uri.base,
      fileSystem: fileSystem,
      platform: platform,
      flutterRoot: '/flutter',
      webBuildDirectory: 'build/web',
    );
129
    fileSystem.file('bar.dart')
130 131 132 133 134 135
      ..createSync(recursive: true)
      ..writeAsStringSync('void main() { }');
    final Response response = await assetServer
      .handle(Request('GET', Uri.parse('http://localhost:8080/bar.dart')));

    expect(response.statusCode, HttpStatus.ok);
136
  });
137
}