File size: 3,363 Bytes
9bd422a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
/**
 * Unit tests for HelpTooltip pure logic
 * Validates: Requirements 28.3, 28.5, 28.6, 28.9
 */

import { describe, it, expect } from 'vitest';

// Extract the pure getHelpText logic for testing (mirrors HelpTooltip._getHelpText)
function getHelpText(helpContent, sectionKey, currentLang, defaultLang) {
  if (!helpContent) {
    return 'Help content unavailable';
  }
  const section = helpContent[sectionKey];
  if (!section) {
    return 'Help content unavailable';
  }
  return section[currentLang] || section[defaultLang] || section['en'] || 'Help content unavailable';
}

const sampleContent = {
  metadata: {
    en: 'Metadata displays general information about the ONNX model.',
    vi: 'Siêu dữ liệu hiển thị thông tin chung về mô hình ONNX.',
    ja: 'メタデータは、ONNXモデルに関する一般情報を表示します。'
  },
  inputOutput: {
    en: 'Inputs & Outputs shows the tensor interfaces of the model.',
    vi: 'Đầu vào & Đầu ra hiển thị các giao diện tensor của mô hình.'
  }
};

describe('HelpTooltip.getHelpText', () => {
  it('should return English text when lang is en', () => {
    const text = getHelpText(sampleContent, 'metadata', 'en', 'en');
    expect(text).toBe('Metadata displays general information about the ONNX model.');
  });

  it('should return Vietnamese text when lang is vi', () => {
    const text = getHelpText(sampleContent, 'metadata', 'vi', 'en');
    expect(text).toBe('Siêu dữ liệu hiển thị thông tin chung về mô hình ONNX.');
  });

  it('should return Japanese text when lang is ja', () => {
    const text = getHelpText(sampleContent, 'metadata', 'ja', 'en');
    expect(text).toBe('メタデータは、ONNXモデルに関する一般情報を表示します。');
  });

  it('should fall back to default lang when requested lang is missing', () => {
    // inputOutput has no 'ja' key
    const text = getHelpText(sampleContent, 'inputOutput', 'ja', 'en');
    expect(text).toBe('Inputs & Outputs shows the tensor interfaces of the model.');
  });

  it('should return unavailable message when helpContent is null', () => {
    const text = getHelpText(null, 'metadata', 'en', 'en');
    expect(text).toBe('Help content unavailable');
  });

  it('should return unavailable message for unknown section key', () => {
    const text = getHelpText(sampleContent, 'unknownSection', 'en', 'en');
    expect(text).toBe('Help content unavailable');
  });

  it('should return unavailable message when section has no matching language at all', () => {
    const content = { test: {} };
    const text = getHelpText(content, 'test', 'fr', 'de');
    expect(text).toBe('Help content unavailable');
  });
});

// Test language validation logic (mirrors HelpTooltip.setLanguage)
function setLanguage(lang, currentLang) {
  if (['en', 'vi', 'ja'].indexOf(lang) === -1) return currentLang;
  return lang;
}

describe('HelpTooltip.setLanguage', () => {
  it('should accept valid language codes', () => {
    expect(setLanguage('en', 'vi')).toBe('en');
    expect(setLanguage('vi', 'en')).toBe('vi');
    expect(setLanguage('ja', 'en')).toBe('ja');
  });

  it('should reject invalid language codes', () => {
    expect(setLanguage('fr', 'en')).toBe('en');
    expect(setLanguage('', 'en')).toBe('en');
    expect(setLanguage('EN', 'vi')).toBe('vi');
  });
});