File size: 2,071 Bytes
46252cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { renderTemplate } from './template-render';

describe('renderTemplate', () => {
  describe('canonical double-brace {{name}}', () => {
    it('substitutes a known placeholder', () => {
      expect(renderTemplate('Hi {{name}}', { name: 'Sam' })).toBe('Hi Sam');
    });

    it('tolerates surrounding whitespace', () => {
      expect(renderTemplate('Hi {{ name }}', { name: 'Sam' })).toBe('Hi Sam');
    });

    it('supports dotted/dashed keys', () => {
      expect(renderTemplate('{{first.name}}-{{order-id}}', { 'first.name': 'A', 'order-id': '7' })).toBe('A-7');
    });

    it('leaves an unknown placeholder literal', () => {
      expect(renderTemplate('Hi {{name}}', {})).toBe('Hi {{name}}');
    });
  });

  describe('legacy single-brace {name} (deprecated, still supported)', () => {
    it('substitutes a known placeholder', () => {
      expect(renderTemplate('Hi {name}', { name: 'Sam' })).toBe('Hi Sam');
    });

    it('leaves an unknown placeholder literal', () => {
      expect(renderTemplate('Hi {name}', {})).toBe('Hi {name}');
    });
  });

  describe('mixed + disambiguation', () => {
    it('substitutes both conventions in one string', () => {
      expect(renderTemplate('{greeting}, {{name}}!', { greeting: 'Hello', name: 'Sam' })).toBe('Hello, Sam!');
    });

    it('does NOT mangle {{name}} into {value} (double-brace consumed as a unit)', () => {
      expect(renderTemplate('{{name}}', { name: 'X' })).toBe('X');
    });
  });

  describe('edge cases', () => {
    it('returns an empty body unchanged', () => {
      expect(renderTemplate('', { name: 'Sam' })).toBe('');
    });

    it('leaves non-placeholder braces untouched', () => {
      expect(renderTemplate('a { b } c', { b: 'X' })).toBe('a { b } c'); // spaces => not a legacy placeholder
    });

    it('substitutes an explicitly-provided empty-string value', () => {
      // hasOwnProperty semantics: an explicit '' substitutes to '' (the legacy `||` renderer left it literal).
      expect(renderTemplate('[{name}]', { name: '' })).toBe('[]');
    });
  });
});