ide.test.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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"] =
  14. "/path/to/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  15. expect(Ide.ide()).toBe("Visual Studio Code")
  16. })
  17. test("should detect Visual Studio Code Insiders", () => {
  18. process.env["TERM_PROGRAM"] = "vscode"
  19. process.env["GIT_ASKPASS"] =
  20. "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  21. expect(Ide.ide()).toBe("Visual Studio Code - Insiders")
  22. })
  23. test("should detect Cursor", () => {
  24. process.env["TERM_PROGRAM"] = "vscode"
  25. process.env["GIT_ASKPASS"] =
  26. "/path/to/Cursor.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  27. expect(Ide.ide()).toBe("Cursor")
  28. })
  29. test("should detect VSCodium", () => {
  30. process.env["TERM_PROGRAM"] = "vscode"
  31. process.env["GIT_ASKPASS"] =
  32. "/path/to/VSCodium.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  33. expect(Ide.ide()).toBe("VSCodium")
  34. })
  35. test("should detect Windsurf", () => {
  36. process.env["TERM_PROGRAM"] = "vscode"
  37. process.env["GIT_ASKPASS"] =
  38. "/path/to/Windsurf.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  39. expect(Ide.ide()).toBe("Windsurf")
  40. })
  41. test("should return unknown when TERM_PROGRAM is not vscode", () => {
  42. process.env["TERM_PROGRAM"] = "iTerm2"
  43. process.env["GIT_ASKPASS"] =
  44. "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/git/dist/askpass.sh"
  45. expect(Ide.ide()).toBe("unknown")
  46. })
  47. test("should return unknown when GIT_ASKPASS does not contain IDE name", () => {
  48. process.env["TERM_PROGRAM"] = "vscode"
  49. process.env["GIT_ASKPASS"] = "/path/to/unknown/askpass.sh"
  50. expect(Ide.ide()).toBe("unknown")
  51. })
  52. test("should recognize vscode-insiders OPENCODE_CALLER", () => {
  53. process.env["OPENCODE_CALLER"] = "vscode-insiders"
  54. expect(Ide.alreadyInstalled()).toBe(true)
  55. })
  56. test("should recognize vscode OPENCODE_CALLER", () => {
  57. process.env["OPENCODE_CALLER"] = "vscode"
  58. expect(Ide.alreadyInstalled()).toBe(true)
  59. })
  60. test("should return false for unknown OPENCODE_CALLER", () => {
  61. process.env["OPENCODE_CALLER"] = "unknown"
  62. expect(Ide.alreadyInstalled()).toBe(false)
  63. })
  64. })