ide.test.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { describe, expect, test, afterEach } from "bun:test"
  2. import { Ide } from "../../src/ide"
  3. describe("ide", () => {
  4. const original = structuredClone(process.env)
  5. afterEach(() => {
  6. Object.keys(process.env).forEach((key) => {
  7. delete process.env[key]
  8. })
  9. Object.assign(process.env, original)
  10. })
  11. test("should detect Visual Studio Code", () => {
  12. process.env["TERM_PROGRAM"] = "vscode"
  13. process.env["GIT_ASKPASS"] = "/path/to/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  14. expect(Ide.ide()).toBe("Visual Studio Code")
  15. })
  16. test("should detect Visual Studio Code Insiders", () => {
  17. process.env["TERM_PROGRAM"] = "vscode"
  18. process.env["GIT_ASKPASS"] =
  19. "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  20. expect(Ide.ide()).toBe("Visual Studio Code - Insiders")
  21. })
  22. test("should detect Cursor", () => {
  23. process.env["TERM_PROGRAM"] = "vscode"
  24. process.env["GIT_ASKPASS"] = "/path/to/Cursor.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  25. expect(Ide.ide()).toBe("Cursor")
  26. })
  27. test("should detect VSCodium", () => {
  28. process.env["TERM_PROGRAM"] = "vscode"
  29. process.env["GIT_ASKPASS"] = "/path/to/VSCodium.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  30. expect(Ide.ide()).toBe("VSCodium")
  31. })
  32. test("should detect Windsurf", () => {
  33. process.env["TERM_PROGRAM"] = "vscode"
  34. process.env["GIT_ASKPASS"] = "/path/to/Windsurf.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  35. expect(Ide.ide()).toBe("Windsurf")
  36. })
  37. test("should return unknown when TERM_PROGRAM is not vscode", () => {
  38. process.env["TERM_PROGRAM"] = "iTerm2"
  39. process.env["GIT_ASKPASS"] =
  40. "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  41. expect(Ide.ide()).toBe("unknown")
  42. })
  43. test("should return unknown when GIT_ASKPASS does not contain IDE name", () => {
  44. process.env["TERM_PROGRAM"] = "vscode"
  45. process.env["GIT_ASKPASS"] = "/path/to/unknown/askpass.sh"
  46. expect(Ide.ide()).toBe("unknown")
  47. })
  48. test("should recognize vscode-insiders OPENCODE_CALLER", () => {
  49. process.env["OPENCODE_CALLER"] = "vscode-insiders"
  50. expect(Ide.alreadyInstalled()).toBe(true)
  51. })
  52. test("should recognize vscode OPENCODE_CALLER", () => {
  53. process.env["OPENCODE_CALLER"] = "vscode"
  54. expect(Ide.alreadyInstalled()).toBe(true)
  55. })
  56. test("should return false for unknown OPENCODE_CALLER", () => {
  57. process.env["OPENCODE_CALLER"] = "unknown"
  58. expect(Ide.alreadyInstalled()).toBe(false)
  59. })
  60. })