刘光辉
2 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
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
import { describe, expect, it } from 'vitest';
 
import { defaultPosition, defaultWatermark, validatePositionConfiguration } from '../model';
 
describe('watermark paper positions', () => {
  it('centers the default mark on both orientations of A4 and A3', () => {
    expect(defaultPosition('A4')).toMatchObject({
      paperWidthMm: 210,
      paperHeightMm: 297,
      portraitXMm: 65,
      portraitYMm: 138,
      landscapeXMm: 108,
      landscapeYMm: 95,
    });
    expect(defaultPosition('A3')).toMatchObject({
      paperWidthMm: 297,
      paperHeightMm: 420,
      portraitXMm: 108,
      portraitYMm: 200,
      landscapeXMm: 170,
      landscapeYMm: 138,
    });
    expect(defaultPosition('A3', 100, 30)).toMatchObject({ portraitXMm: 98, portraitYMm: 195, landscapeXMm: 160, landscapeYMm: 133 });
  });
 
  it('accepts centered positions on all four page variants', () => {
    const config = defaultWatermark();
    config.positions.push(defaultPosition('A3'));
    expect(validatePositionConfiguration(config)).toBeUndefined();
  });
 
  it('rejects duplicate paper types and coordinates that exceed a rotated mark boundary', () => {
    const config = defaultWatermark();
    config.positions.push(defaultPosition('A4'));
    expect(validatePositionConfiguration(config)).toContain('请勿重复添加');
 
    config.positions.pop();
    config.positions[0]!.portraitXMm = 205;
    expect(validatePositionConfiguration(config)).toContain('纵向位置会使水印超出纸张');
 
    config.positions[0]!.portraitXMm = 65;
    config.positions[0]!.landscapeYMm = 211;
    expect(validatePositionConfiguration(config)).toContain('横向位置的 X/Y 必须位于纸张范围内');
 
    config.positions[0]!.landscapeYMm = 95;
    config.rotationAngle = -30;
    config.positions[0]!.portraitYMm = 0;
    expect(validatePositionConfiguration(config)).toContain('纵向位置会使水印超出纸张');
  });
 
  it('allows a tiled origin without requiring the entire mark to fit at that origin', () => {
    const config = defaultWatermark();
    config.layoutMode = 'TILED';
    config.positions[0]!.portraitYMm = 290;
    expect(validatePositionConfiguration(config)).toBeUndefined();
  });
});