blob: da105b27e19f71755131506aac1b4b30d6d4249b [file] [log] [blame]
// Copyright 2022 Google Inc. 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.
import 'dart:convert';
import 'package:archive/archive_io.dart' as archive;
import 'package:test/test.dart';
import 'package:webdriver/src/common/zip.dart';
void main() {
group('zip', () {
test('decode', () {
final zipData = base64.decode(testZipBase64);
final zipArchive = archive.ZipDecoder().decodeBytes(zipData);
expect(zipArchive.files, hasLength(2));
var file = zipArchive.files[0];
expect(file.name, 'dart_test.yaml');
expect(file.size, 166);
expect(utf8.decode(file.content as List<int>),
contains('See https://github.com/dart-lang/test/'));
file = zipArchive.files[1];
expect(file.name, 'lib/src/common/spec.dart');
expect(file.size, 209);
expect(utf8.decode(file.content as List<int>),
contains('Defines the WebDriver spec to use'));
});
test('round-trip', () {
final zipArchive = Archive();
const aaaContents = 'aaa';
const bbbContents = 'bbb';
final cccContents = 'c' * 1024;
zipArchive.addFile(ArchiveFile('aaa.txt', utf8.encode(aaaContents)));
zipArchive.addFile(ArchiveFile('bbb.txt', utf8.encode(bbbContents)));
zipArchive.addFile(ArchiveFile('ccc/ccc.txt', utf8.encode(cccContents)));
final zipBytes = ZipEncoder.encode(zipArchive);
expect(zipBytes, isNotEmpty);
final decodedArchive = archive.ZipDecoder().decodeBytes(zipBytes);
expect(decodedArchive.files, hasLength(3));
var file = zipArchive.files[0];
expect(file.name, 'aaa.txt');
expect(file.length, 3);
expect(utf8.decode(file.content), equals('aaa'));
file = zipArchive.files[1];
expect(file.name, 'bbb.txt');
expect(file.length, 3);
expect(utf8.decode(file.content), equals('bbb'));
file = zipArchive.files[2];
expect(file.name, 'ccc/ccc.txt');
expect(file.length, 1024);
expect(utf8.decode(file.content), contains('cccccccccccccc'));
});
});
group('crc32', () {
test('0 bytes', () {
expect(crc32([]), 0x00000000);
});
test('1 byte', () {
expect(crc32([0x00]), 0xD202EF8D);
});
test('1 byte redux', () {
expect(crc32([0x01]), 0xA505DF1B);
});
test('2 bytes', () {
expect(crc32([0x01, 0x02]), 0xB6CC4292);
});
test('test string', () {
expect(crc32(utf8.encode('My very long test string.')), 0x88B8252E);
});
});
}
const testZipBase64 =
'UEsDBAoAAAAAALw2alV+3V8lpgAAAKYAAAAOABwAZGFydF90ZXN0LnlhbWxVVAkAA4QQbWOEEG'
'1jdXgLAAEE9QEAAAQUAAAAIyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy90ZXN0'
'L2Jsb2IvbWFzdGVyL3BrZ3MvdGVzdC9kb2MvY29uZmlndXJhdGlvbi5tZAp0YWdzOgogIGZmOi'
'AjIHRlc3RzIHRoYXQgcnVuIG9uIEZpcmVmb3guIE90aGVycyB0ZXN0cyBhcmUgYXNzdW1lZCB0'
'byBydW4gb24gQ2hyb21lClBLAwQKAAAAAAC8NmpVezD5KdEAAADRAAAAGAAcAGxpYi9zcmMvY2'
'9tbW9uL3NwZWMuZGFydFVUCQADhBBtY4QQbWN1eAsAAQT1AQAABBQAAAAvLyBpZ25vcmVfZm9y'
'X2ZpbGU6IGNvbnN0YW50X2lkZW50aWZpZXJfbmFtZXMKCi8vLyBEZWZpbmVzIHRoZSBXZWJEcm'
'l2ZXIgc3BlYyB0byB1c2UuIEF1dG8gPSB0cnkgdG8gaW5mZXIgdGhlIHNwZWMgYmFzZWQgb24K'
'Ly8vIHRoZSByZXNwb25zZSBkdXJpbmcgc2Vzc2lvbiBjcmVhdGlvbi4KZW51bSBXZWJEcml2ZX'
'JTcGVjIHsgQXV0bywgSnNvbldpcmUsIFczYyB9ClBLAQIeAwoAAAAAALw2alV+3V8lpgAAAKYA'
'AAAOABgAAAAAAAAAAACkgQAAAABkYXJ0X3Rlc3QueWFtbFVUBQADhBBtY3V4CwABBPUBAAAEFA'
'AAAFBLAQIeAwoAAAAAALw2alV7MPkp0QAAANEAAAAYABgAAAAAAAAAAACkge4AAABsaWIvc3Jj'
'L2NvbW1vbi9zcGVjLmRhcnRVVAUAA4QQbWN1eAsAAQT1AQAABBQAAABQSwUGAAAAAAIAAgCyAA'
'AAEQIAAAAA';