File: user-dirs.js

package info (click to toggle)
node-yarnpkg 1.13.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 92,980 kB
  • sloc: sh: 323; makefile: 19
file content (131 lines) | stat: -rw-r--r-- 3,686 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* @flow */

import {getDataDir, getCacheDir, getConfigDir} from '../../src/util/user-dirs';
import userHome from '../../src/util/user-home-dir';

const path = require('path');

describe('getDataDir', () => {
  describe('on windows', () => {
    beforeEach(() => {
      mockProcessPlatform('win32');
    });

    test('uses Yarn/data within LOCALAPPDATA if it exists', () => {
      process.env.LOCALAPPDATA = 'foo';
      expect(getDataDir()).toBe(path.join('foo', 'Yarn', 'Data'));
      delete process.env.LOCALAPPDATA;
    });

    test('uses the config dir otherwise', () => {
      expect(getDataDir()).toBe(path.join(userHome, '.config', 'yarn'));
    });
  });

  describe('on linux/darwin', () => {
    beforeEach(() => {
      mockProcessPlatform('linux');
    });

    test('uses XDG_DATA_HOME if it is set', () => {
      process.env.XDG_DATA_HOME = 'foo';
      expect(getDataDir()).toBe(path.join('foo', 'yarn'));
      delete process.env.XDG_DATA_HOME;
    });

    test('falls back to the config dir', () => {
      expect(getDataDir()).toBe(path.join(userHome, '.config', 'yarn'));
    });
  });
});

describe('getCacheDir', () => {
  describe('on windows', () => {
    beforeEach(() => {
      mockProcessPlatform('win32');
    });

    test('uses Yarn\\Cache within LOCALAPPDATA if it exists', () => {
      process.env.LOCALAPPDATA = 'foo';
      expect(getCacheDir()).toBe(path.join('foo', 'Yarn', 'Cache'));
      delete process.env.LOCALAPPDATA;
    });

    test('uses AppData\\Local\\Cache otherwise', () => {
      expect(getCacheDir()).toBe(path.join(userHome, 'AppData', 'Local', 'Yarn', 'Cache'));
    });
  });

  describe('on darwin (macOS)', () => {
    beforeEach(() => {
      mockProcessPlatform('darwin');
    });

    test('uses XDG_CACHE_HOME if it is set', () => {
      process.env.XDG_CACHE_HOME = 'foo';
      expect(getCacheDir()).toBe(path.join('foo', 'yarn'));
      delete process.env.XDG_CACHE_HOME;
    });

    test('falls back to Library/Caches/Yarn', () => {
      expect(getCacheDir()).toBe(path.join(userHome, 'Library', 'Caches', 'Yarn'));
    });
  });

  describe('on others (linux, etc)', () => {
    beforeEach(() => {
      mockProcessPlatform('linux');
    });

    test('uses XDG_CACHE_HOME if it is set', () => {
      process.env.XDG_CACHE_HOME = 'foo';
      expect(getCacheDir()).toBe(path.join('foo', 'yarn'));
      delete process.env.XDG_CACHE_HOME;
    });

    test('falls back to .cache/yarn', () => {
      expect(getCacheDir()).toBe(path.join(userHome, '.cache', 'yarn'));
    });
  });
});

describe('getConfigDir', () => {
  describe('on windows', () => {
    beforeEach(() => {
      mockProcessPlatform('win32');
    });

    test('uses Yarn\\Config within LOCALAPPDATA if it exists', () => {
      process.env.LOCALAPPDATA = 'foo';
      expect(getConfigDir()).toBe(path.join('foo', 'Yarn', 'Config'));
      delete process.env.LOCALAPPDATA;
    });

    test('uses the config dir otherwise', () => {
      expect(getConfigDir()).toBe(path.join(userHome, '.config', 'yarn'));
    });
  });

  describe('on linux/darwin', () => {
    beforeEach(() => {
      mockProcessPlatform('linux');
    });

    test('uses XDG_CONFIG_HOME if it is set', () => {
      process.env.XDG_CONFIG_HOME = 'foo';
      expect(getConfigDir()).toBe(path.join('foo', 'yarn'));
      delete process.env.XDG_CONFIG_HOME;
    });

    test('falls back to .config/yarn', () => {
      expect(getConfigDir()).toBe(path.join(userHome, '.config', 'yarn'));
    });
  });
});

function mockProcessPlatform(name: string) {
  // $FlowFixMe this is valid
  Object.defineProperty(process, 'platform', {
    get: jest.fn(() => name),
  });
}