🏡 index : quine-global-boneyard/electron-builder.git

import { Arch, Platform } from "electron-builder"
import * as fs from "fs/promises"
import { app, execShell, getTarExecutable } from "../helpers/packTester"

test.ifNotWindows("deb", ({ expect }) =>
  app(expect, {
    targets: Platform.LINUX.createTarget("deb"),
  })
)

test.ifNotWindows("arm", ({ expect }) => app(expect, { targets: Platform.LINUX.createTarget("deb", Arch.armv7l, Arch.arm64) }))

test.ifNotWindows("custom depends", ({ expect }) =>
  app(expect, {
    targets: Platform.LINUX.createTarget("deb"),
    config: {
      linux: {
        executableName: "Boo",
      },
      deb: {
        depends: ["foo"],
      },
      electronFuses: {
        runAsNode: true,
        enableCookieEncryption: true,
        enableNodeOptionsEnvironmentVariable: true,
        enableNodeCliInspectArguments: true,
        enableEmbeddedAsarIntegrityValidation: true,
        onlyLoadAppFromAsar: true,
        loadBrowserProcessSpecificV8Snapshot: true,
        grantFileProtocolExtraPrivileges: undefined, // unsupported on current electron version in our tests
      },
    },
  })
)

test.ifNotWindows("top-level exec name", ({ expect }) =>
  app(expect, {
    targets: Platform.LINUX.createTarget("deb"),
    config: {
      productName: "foo",
      executableName: "Boo",
    },
  })
)

test.ifNotWindows("no quotes for safe exec name", ({ expect }) =>
  app(expect, {
    targets: Platform.LINUX.createTarget("deb"),
    config: {
      productName: "foo",
      linux: {
        executableName: "Boo",
      },
    },
    effectiveOptionComputed: async it => {
      const content = await fs.readFile(it[1], "utf8")
      expect(content).toMatchSnapshot()
      return false
    },
  })
)

test.ifNotWindows("executable path in postinst script", ({ expect }) =>
  app(
    expect,
    {
      targets: Platform.LINUX.createTarget("deb"),
      config: {
        productName: "foo",
        linux: {
          executableName: "Boo",
        },
      },
    },
    {
      packed: async context => {
        const postinst = (
          await execShell(`ar p '${context.outDir}/TestApp_1.1.0_amd64.deb' control.tar.gz | ${await getTarExecutable()} zx --to-stdout ./postinst`, {
            maxBuffer: 10 * 1024 * 1024,
          })
        ).stdout
        expect(postinst.trim()).toMatchSnapshot()
      },
    }
  )
)

test.ifNotWindows("deb file associations", ({ expect }) =>
  app(
    expect,
    {
      targets: Platform.LINUX.createTarget("deb"),
      config: {
        fileAssociations: [
          {
            ext: "my-app",
            name: "Test Foo",
            mimeType: "application/x-example",
          },
        ],
      },
    },
    {
      packed: async context => {
        const mime = (
          await execShell(`ar p '${context.outDir}/TestApp_1.1.0_amd64.deb' data.tar.xz | ${await getTarExecutable()} Jx --to-stdout ./usr/share/mime/packages/testapp.xml`, {
            maxBuffer: 10 * 1024 * 1024,
          })
        ).stdout
        expect(mime.trim()).toMatchSnapshot()
      },
    }
  )
)