diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..a8907c4a --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,2 @@ +trailingComma: all +tabWidth: 4 diff --git a/libraries/adb-scrcpy/src/options/index.ts b/libraries/adb-scrcpy/src/options/index.ts index ce8e7489..2473d599 100644 --- a/libraries/adb-scrcpy/src/options/index.ts +++ b/libraries/adb-scrcpy/src/options/index.ts @@ -1,5 +1,6 @@ export * from "./1_16.js"; export * from "./1_22.js"; export * from "./2_0.js"; +export * from "./2_1.js"; export * from "./latest.js"; export * from "./types.js"; diff --git a/libraries/adb-scrcpy/src/options/latest.ts b/libraries/adb-scrcpy/src/options/latest.ts index ad1ab39a..e3108ee2 100644 --- a/libraries/adb-scrcpy/src/options/latest.ts +++ b/libraries/adb-scrcpy/src/options/latest.ts @@ -1,3 +1,3 @@ -import { AdbScrcpyOptions2_0 } from "./2_0.js"; +import { AdbScrcpyOptions2_1 } from "./2_1.js"; -export class AdbScrcpyOptionsLatest extends AdbScrcpyOptions2_0 {} +export class AdbScrcpyOptionsLatest extends AdbScrcpyOptions2_1 {} diff --git a/libraries/scrcpy/src/options/1_16/options.spec.ts b/libraries/scrcpy/src/options/1_16/options.spec.ts index 4e60e2e2..a04cfbe8 100644 --- a/libraries/scrcpy/src/options/1_16/options.spec.ts +++ b/libraries/scrcpy/src/options/1_16/options.spec.ts @@ -22,4 +22,12 @@ describe("ScrcpyOptions1_16", () => { ]); }); }); + + describe("setListDisplays", () => { + it("should set `display` to `-1`", () => { + const options = new ScrcpyOptions1_16({}); + options.setListDisplays(); + expect(options.value.displayId).toBe(-1); + }); + }); }); diff --git a/libraries/scrcpy/src/options/1_17.spec.ts b/libraries/scrcpy/src/options/1_17.spec.ts new file mode 100644 index 00000000..668b6590 --- /dev/null +++ b/libraries/scrcpy/src/options/1_17.spec.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from "@jest/globals"; + +import { ScrcpyOptions1_17 } from "./1_17.js"; + +describe("ScrcpyOptions1_17", () => { + it("should share `value` with `base`", () => { + const options = new ScrcpyOptions1_17({}); + expect(options.value).toBe(options["_base"].value); + }); + + describe("setListDisplays", () => { + it("should set `displayId` to `-1`", () => { + const options = new ScrcpyOptions1_17({}); + options.setListDisplays(); + expect(options.value.displayId).toBe(-1); + }); + }); + + describe("setListEncoders", () => { + it("should set `encoderName` to `_`", () => { + const options = new ScrcpyOptions1_17({}); + options.setListEncoders(); + expect(options.value.encoderName).toBe("_"); + }); + }); +}); diff --git a/libraries/scrcpy/src/options/1_18.spec.ts b/libraries/scrcpy/src/options/1_18.spec.ts new file mode 100644 index 00000000..3c6acab2 --- /dev/null +++ b/libraries/scrcpy/src/options/1_18.spec.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from "@jest/globals"; + +import { ScrcpyOptions1_18 } from "./1_18.js"; + +describe("ScrcpyOptions1_18", () => { + it("should share `value` with `base`", () => { + const options = new ScrcpyOptions1_18({}); + expect(options.value).toBe(options["_base"].value); + }); + + describe("setListDisplays", () => { + it("should set `displayId` to `-1`", () => { + const options = new ScrcpyOptions1_18({}); + options.setListDisplays(); + expect(options.value.displayId).toBe(-1); + }); + }); + + describe("setListEncoders", () => { + it("should set `encoderName` to `_`", () => { + const options = new ScrcpyOptions1_18({}); + options.setListEncoders(); + expect(options.value.encoderName).toBe("_"); + }); + }); +}); diff --git a/libraries/scrcpy/src/options/1_25/options.spec.ts b/libraries/scrcpy/src/options/1_25/options.spec.ts index 1b79a76a..964adb15 100644 --- a/libraries/scrcpy/src/options/1_25/options.spec.ts +++ b/libraries/scrcpy/src/options/1_25/options.spec.ts @@ -14,4 +14,12 @@ describe("ScrcpyOptions1_25", () => { ).createScrollController(); expect(controller1_25).not.toBe(controller1_24); }); + + describe("setListDisplays", () => { + it("should set `display` to `-1`", () => { + const options = new ScrcpyOptions1_25({}); + options.setListDisplays(); + expect(options.value.displayId).toBe(-1); + }); + }); }); diff --git a/libraries/scrcpy/src/options/2.0.spec.ts b/libraries/scrcpy/src/options/2.0.spec.ts new file mode 100644 index 00000000..811e7f3f --- /dev/null +++ b/libraries/scrcpy/src/options/2.0.spec.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from "@jest/globals"; + +import { ScrcpyOptions2_0 } from "./2_0.js"; + +describe("ScrcpyOptions2_0", () => { + describe("setListDisplays", () => { + it("should set `listDisplays` to `true`", () => { + const options = new ScrcpyOptions2_0({}); + options.setListDisplays(); + expect(options.value.listDisplays).toBe(true); + }); + }); + + describe("setListEncoders", () => { + it("should set `listEncoders` to `true`", () => { + const options = new ScrcpyOptions2_0({}); + options.setListEncoders(); + expect(options.value.listEncoders).toBe(true); + }); + }); +}); diff --git a/libraries/scrcpy/src/options/2.1.spec.ts b/libraries/scrcpy/src/options/2.1.spec.ts new file mode 100644 index 00000000..bbec1f9f --- /dev/null +++ b/libraries/scrcpy/src/options/2.1.spec.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from "@jest/globals"; + +import { ScrcpyOptions2_1 } from "./2_1.js"; + +describe("ScrcpyOptions2_1", () => { + describe("setListDisplays", () => { + it("should set `listDisplays` to `true`", () => { + const options = new ScrcpyOptions2_1({}); + options.setListDisplays(); + expect(options.value.listDisplays).toBe(true); + }); + }); + + describe("setListEncoders", () => { + it("should set `listEncoders` to `true`", () => { + const options = new ScrcpyOptions2_1({}); + options.setListEncoders(); + expect(options.value.listEncoders).toBe(true); + }); + }); +}); diff --git a/libraries/scrcpy/src/options/types.ts b/libraries/scrcpy/src/options/types.ts index 5c073cae..23e0bfa3 100644 --- a/libraries/scrcpy/src/options/types.ts +++ b/libraries/scrcpy/src/options/types.ts @@ -141,6 +141,17 @@ export abstract class ScrcpyOptionsBase< constructor(base: B, value: Required) { this._base = base; this.value = value; + this.#setValue(); + } + + #setValue() { + // Share `value` with `_base` class, + // so updating `_base.value` in `_base.setListEncoders()`/ + // `_base.setListDisplays()` will also update `this.value`. + Object.assign(this._base, { value: this.value }); + if (this._base instanceof ScrcpyOptionsBase) { + this._base.#setValue(); + } } abstract serialize(): string[];