mirror of
https://github.com/denoland/deno.git
synced 2024-12-29 02:29:06 -05:00
parent
c6505c5de6
commit
31db7c4dba
4 changed files with 86 additions and 88 deletions
|
@ -1,74 +0,0 @@
|
||||||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
|
||||||
|
|
||||||
import { findIndex, findLastIndex, equal, hasPrefix, repeat } from "./bytes.ts";
|
|
||||||
import { test } from "../testing/mod.ts";
|
|
||||||
import { assertEquals, assertThrows } from "../testing/asserts.ts";
|
|
||||||
|
|
||||||
test(function bytesfindIndex1(): void {
|
|
||||||
const i = findIndex(
|
|
||||||
new Uint8Array([1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 3]),
|
|
||||||
new Uint8Array([0, 1, 2])
|
|
||||||
);
|
|
||||||
assertEquals(i, 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function bytesfindIndex2(): void {
|
|
||||||
const i = findIndex(new Uint8Array([0, 0, 1]), new Uint8Array([0, 1]));
|
|
||||||
assertEquals(i, 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function bytesfindLastIndex1(): void {
|
|
||||||
const i = findLastIndex(
|
|
||||||
new Uint8Array([0, 1, 2, 0, 1, 2, 0, 1, 3]),
|
|
||||||
new Uint8Array([0, 1, 2])
|
|
||||||
);
|
|
||||||
assertEquals(i, 3);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function bytesfindLastIndex2(): void {
|
|
||||||
const i = findLastIndex(new Uint8Array([0, 1, 1]), new Uint8Array([0, 1]));
|
|
||||||
assertEquals(i, 0);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function bytesBytesequal(): void {
|
|
||||||
const v = equal(new Uint8Array([0, 1, 2, 3]), new Uint8Array([0, 1, 2, 3]));
|
|
||||||
assertEquals(v, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function byteshasPrefix(): void {
|
|
||||||
const v = hasPrefix(new Uint8Array([0, 1, 2]), new Uint8Array([0, 1]));
|
|
||||||
assertEquals(v, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function bytesrepeat(): void {
|
|
||||||
// input / output / count / error message
|
|
||||||
const repeatTestCase = [
|
|
||||||
["", "", 0],
|
|
||||||
["", "", 1],
|
|
||||||
["", "", 1.1, "bytes: repeat count must be an integer"],
|
|
||||||
["", "", 2],
|
|
||||||
["", "", 0],
|
|
||||||
["-", "", 0],
|
|
||||||
["-", "-", -1, "bytes: negative repeat count"],
|
|
||||||
["-", "----------", 10],
|
|
||||||
["abc ", "abc abc abc ", 3]
|
|
||||||
];
|
|
||||||
for (const [input, output, count, errMsg] of repeatTestCase) {
|
|
||||||
if (errMsg) {
|
|
||||||
assertThrows(
|
|
||||||
(): void => {
|
|
||||||
repeat(new TextEncoder().encode(input as string), count as number);
|
|
||||||
},
|
|
||||||
Error,
|
|
||||||
errMsg as string
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
const newBytes = repeat(
|
|
||||||
new TextEncoder().encode(input as string),
|
|
||||||
count as number
|
|
||||||
);
|
|
||||||
|
|
||||||
assertEquals(new TextDecoder().decode(newBytes), output);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -1,2 +1,74 @@
|
||||||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||||
import "./bytes_test.ts";
|
|
||||||
|
import { findIndex, findLastIndex, equal, hasPrefix, repeat } from "./mod.ts";
|
||||||
|
import { test } from "../testing/mod.ts";
|
||||||
|
import { assertEquals, assertThrows } from "../testing/asserts.ts";
|
||||||
|
|
||||||
|
test(function bytesfindIndex1(): void {
|
||||||
|
const i = findIndex(
|
||||||
|
new Uint8Array([1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 3]),
|
||||||
|
new Uint8Array([0, 1, 2])
|
||||||
|
);
|
||||||
|
assertEquals(i, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function bytesfindIndex2(): void {
|
||||||
|
const i = findIndex(new Uint8Array([0, 0, 1]), new Uint8Array([0, 1]));
|
||||||
|
assertEquals(i, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function bytesfindLastIndex1(): void {
|
||||||
|
const i = findLastIndex(
|
||||||
|
new Uint8Array([0, 1, 2, 0, 1, 2, 0, 1, 3]),
|
||||||
|
new Uint8Array([0, 1, 2])
|
||||||
|
);
|
||||||
|
assertEquals(i, 3);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function bytesfindLastIndex2(): void {
|
||||||
|
const i = findLastIndex(new Uint8Array([0, 1, 1]), new Uint8Array([0, 1]));
|
||||||
|
assertEquals(i, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function bytesBytesequal(): void {
|
||||||
|
const v = equal(new Uint8Array([0, 1, 2, 3]), new Uint8Array([0, 1, 2, 3]));
|
||||||
|
assertEquals(v, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function byteshasPrefix(): void {
|
||||||
|
const v = hasPrefix(new Uint8Array([0, 1, 2]), new Uint8Array([0, 1]));
|
||||||
|
assertEquals(v, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test(function bytesrepeat(): void {
|
||||||
|
// input / output / count / error message
|
||||||
|
const repeatTestCase = [
|
||||||
|
["", "", 0],
|
||||||
|
["", "", 1],
|
||||||
|
["", "", 1.1, "bytes: repeat count must be an integer"],
|
||||||
|
["", "", 2],
|
||||||
|
["", "", 0],
|
||||||
|
["-", "", 0],
|
||||||
|
["-", "-", -1, "bytes: negative repeat count"],
|
||||||
|
["-", "----------", 10],
|
||||||
|
["abc ", "abc abc abc ", 3]
|
||||||
|
];
|
||||||
|
for (const [input, output, count, errMsg] of repeatTestCase) {
|
||||||
|
if (errMsg) {
|
||||||
|
assertThrows(
|
||||||
|
(): void => {
|
||||||
|
repeat(new TextEncoder().encode(input as string), count as number);
|
||||||
|
},
|
||||||
|
Error,
|
||||||
|
errMsg as string
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const newBytes = repeat(
|
||||||
|
new TextEncoder().encode(input as string),
|
||||||
|
count as number
|
||||||
|
);
|
||||||
|
|
||||||
|
assertEquals(new TextDecoder().decode(newBytes), output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -6,7 +6,7 @@ type Reader = Deno.Reader;
|
||||||
type ReadResult = Deno.ReadResult;
|
type ReadResult = Deno.ReadResult;
|
||||||
type Writer = Deno.Writer;
|
type Writer = Deno.Writer;
|
||||||
import { FormFile } from "../multipart/formfile.ts";
|
import { FormFile } from "../multipart/formfile.ts";
|
||||||
import { findIndex, findLastIndex, hasPrefix, equal } from "../bytes/bytes.ts";
|
import * as bytes from "../bytes/mod.ts";
|
||||||
import { copyN } from "../io/ioutil.ts";
|
import { copyN } from "../io/ioutil.ts";
|
||||||
import { MultiReader } from "../io/readers.ts";
|
import { MultiReader } from "../io/readers.ts";
|
||||||
import { tempFile } from "../io/util.ts";
|
import { tempFile } from "../io/util.ts";
|
||||||
|
@ -55,7 +55,7 @@ export function scanUntilBoundary(
|
||||||
state: BufState
|
state: BufState
|
||||||
): [number, BufState] {
|
): [number, BufState] {
|
||||||
if (total === 0) {
|
if (total === 0) {
|
||||||
if (hasPrefix(buf, dashBoundary)) {
|
if (bytes.hasPrefix(buf, dashBoundary)) {
|
||||||
switch (matchAfterPrefix(buf, dashBoundary, state)) {
|
switch (matchAfterPrefix(buf, dashBoundary, state)) {
|
||||||
case -1:
|
case -1:
|
||||||
return [dashBoundary.length, null];
|
return [dashBoundary.length, null];
|
||||||
|
@ -64,12 +64,12 @@ export function scanUntilBoundary(
|
||||||
case 1:
|
case 1:
|
||||||
return [0, "EOF"];
|
return [0, "EOF"];
|
||||||
}
|
}
|
||||||
if (hasPrefix(dashBoundary, buf)) {
|
if (bytes.hasPrefix(dashBoundary, buf)) {
|
||||||
return [0, state];
|
return [0, state];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const i = findIndex(buf, newLineDashBoundary);
|
const i = bytes.findIndex(buf, newLineDashBoundary);
|
||||||
if (i >= 0) {
|
if (i >= 0) {
|
||||||
switch (matchAfterPrefix(buf.slice(i), newLineDashBoundary, state)) {
|
switch (matchAfterPrefix(buf.slice(i), newLineDashBoundary, state)) {
|
||||||
case -1:
|
case -1:
|
||||||
|
@ -81,11 +81,11 @@ export function scanUntilBoundary(
|
||||||
return [i, "EOF"];
|
return [i, "EOF"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasPrefix(newLineDashBoundary, buf)) {
|
if (bytes.hasPrefix(newLineDashBoundary, buf)) {
|
||||||
return [0, state];
|
return [0, state];
|
||||||
}
|
}
|
||||||
const j = findLastIndex(buf, newLineDashBoundary.slice(0, 1));
|
const j = bytes.findLastIndex(buf, newLineDashBoundary.slice(0, 1));
|
||||||
if (j >= 0 && hasPrefix(newLineDashBoundary, buf.slice(j))) {
|
if (j >= 0 && bytes.hasPrefix(newLineDashBoundary, buf.slice(j))) {
|
||||||
return [j, null];
|
return [j, null];
|
||||||
}
|
}
|
||||||
return [buf.length, state];
|
return [buf.length, state];
|
||||||
|
@ -294,7 +294,7 @@ export class MultipartReader {
|
||||||
if (this.currentPart) {
|
if (this.currentPart) {
|
||||||
this.currentPart.close();
|
this.currentPart.close();
|
||||||
}
|
}
|
||||||
if (equal(this.dashBoundary, encoder.encode("--"))) {
|
if (bytes.equal(this.dashBoundary, encoder.encode("--"))) {
|
||||||
throw new Error("boundary is empty");
|
throw new Error("boundary is empty");
|
||||||
}
|
}
|
||||||
let expectNewPart = false;
|
let expectNewPart = false;
|
||||||
|
@ -326,7 +326,7 @@ export class MultipartReader {
|
||||||
if (this.partsRead === 0) {
|
if (this.partsRead === 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (equal(line, this.newLine)) {
|
if (bytes.equal(line, this.newLine)) {
|
||||||
expectNewPart = true;
|
expectNewPart = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -335,19 +335,19 @@ export class MultipartReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
private isFinalBoundary(line: Uint8Array): boolean {
|
private isFinalBoundary(line: Uint8Array): boolean {
|
||||||
if (!hasPrefix(line, this.dashBoundaryDash)) {
|
if (!bytes.hasPrefix(line, this.dashBoundaryDash)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let rest = line.slice(this.dashBoundaryDash.length, line.length);
|
let rest = line.slice(this.dashBoundaryDash.length, line.length);
|
||||||
return rest.length === 0 || equal(skipLWSPChar(rest), this.newLine);
|
return rest.length === 0 || bytes.equal(skipLWSPChar(rest), this.newLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
private isBoundaryDelimiterLine(line: Uint8Array): boolean {
|
private isBoundaryDelimiterLine(line: Uint8Array): boolean {
|
||||||
if (!hasPrefix(line, this.dashBoundary)) {
|
if (!bytes.hasPrefix(line, this.dashBoundary)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const rest = line.slice(this.dashBoundary.length);
|
const rest = line.slice(this.dashBoundary.length);
|
||||||
return equal(skipLWSPChar(rest), this.newLine);
|
return bytes.equal(skipLWSPChar(rest), this.newLine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue