RepliCAD

Форк
0
/
diffSVGToSnapshot.ts 
71 строка · 1.6 Кб
1
import * as fs from "fs";
2
import * as path from "path";
3

4
const isFailure = ({
5
  pass,
6
  updateSnapshot,
7
}: {
8
  pass: boolean;
9
  updateSnapshot: boolean;
10
}) => !pass && !updateSnapshot;
11
const shouldUpdate = ({
12
  pass,
13
  updateSnapshot,
14
}: {
15
  pass: boolean;
16
  updateSnapshot: boolean;
17
}) => !pass && updateSnapshot;
18

19
export function diffSVGToSnapshot(options: {
20
  receivedSVG: string;
21
  snapshotIdentifier: string;
22
  snapshotsDir: string;
23
  updateSnapshot: boolean;
24
}) {
25
  const {
26
    receivedSVG,
27
    snapshotIdentifier,
28
    snapshotsDir,
29
    updateSnapshot = false,
30
  } = options;
31

32
  let result: {
33
    pass: boolean;
34
    added?: boolean;
35
    updated?: boolean;
36
    expected?: string;
37
  } = {
38
    pass: false,
39
  };
40

41
  const baselineSnapshotPath = path.join(
42
    snapshotsDir,
43
    `${snapshotIdentifier}-snap.svg`
44
  );
45

46
  if (!fs.existsSync(baselineSnapshotPath)) {
47
    fs.mkdirSync(snapshotsDir, { recursive: true });
48
    fs.writeFileSync(baselineSnapshotPath, receivedSVG, "utf-8");
49
    result = { added: true, pass: false };
50
  } else {
51
    const expectedSVG = fs.readFileSync(baselineSnapshotPath, "utf8");
52

53
    const pass = expectedSVG === receivedSVG;
54

55
    if (isFailure({ pass, updateSnapshot })) {
56
      result = {
57
        pass: false,
58
        expected: expectedSVG,
59
      };
60
    } else if (shouldUpdate({ pass, updateSnapshot })) {
61
      fs.mkdirSync(snapshotsDir, { recursive: true });
62
      fs.writeFileSync(baselineSnapshotPath, receivedSVG, "utf-8");
63
      result = { updated: true, pass: false };
64
    } else {
65
      result = {
66
        pass,
67
      };
68
    }
69
  }
70
  return result;
71
}
72

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.