This repository was archived by the owner on Nov 7, 2026. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathCodeGeneratorTests.swift
More file actions
50 lines (43 loc) · 2.57 KB
/
Copy pathCodeGeneratorTests.swift
File metadata and controls
50 lines (43 loc) · 2.57 KB
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
import XCTest
import VisuStructCore
final class CodeGeneratorTests: XCTestCase {
/// Die mitgelieferten `.java`-Dateien sind der erwartete Export der zugehörigen Diagramme.
func testJavaClassFileMatchesExamples() throws {
for name in ["Collatz", "Fibonacci"] {
let document = try ExampleFiles.document(named: "\(name).visustruct")
let generated = VisuStructCodeGenerator.generateJavaClassFile(document: document, className: name)
XCTAssertEqual(generated, try ExampleFiles.text(named: "\(name).java"), name)
}
}
func testJavaClassFileWithInputImportsScannerOnce() throws {
let document = try ExampleFiles.document(named: "2026-04-23-NumberEven.visustruct")
let generated = VisuStructCodeGenerator.generateJavaClassFile(document: document, className: "NumberEven")
XCTAssertTrue(generated.hasPrefix("import java.util.Scanner;\n\npublic class NumberEven {\n"))
XCTAssertEqual(generated.components(separatedBy: "new Scanner(System.in)").count - 1, 1)
XCTAssertTrue(generated.contains("if (number % 2 == 0) {"))
}
func testCollatzInPythonAndJavaScript() throws {
let document = try ExampleFiles.document(named: "Collatz.visustruct")
let python = VisuStructCodeGenerator.generate(document: document, target: .python)
XCTAssertTrue(python.contains("while number != 1:"), python)
XCTAssertTrue(python.contains("print(number)"), python)
XCTAssertFalse(python.contains("{"), python)
let javaScript = VisuStructCodeGenerator.generate(document: document, target: .javascript)
XCTAssertTrue(javaScript.hasPrefix("\"use strict\";"), javaScript)
XCTAssertTrue(javaScript.contains("while (number != 1) {"), javaScript)
XCTAssertTrue(javaScript.contains("console.log(number);"), javaScript)
}
func testSanitizedJavaClassName() {
XCTAssertEqual(VisuStructCodeGenerator.sanitizedJavaClassName("Fibonacci"), "Fibonacci")
let sanitized = VisuStructCodeGenerator.sanitizedJavaClassName("2 Summe bilden!")
XCTAssertFalse(sanitized.isEmpty)
XCTAssertFalse(sanitized.contains(" "))
XCTAssertFalse(sanitized.first?.isNumber ?? true)
}
func testEmptyDocumentProducesNonEmptyPlaceholder() {
for target in [VisuStructCodeGenerator.Target.java, .python, .javascript] {
let code = VisuStructCodeGenerator.generate(document: VisuStructDocument(), target: target)
XCTAssertFalse(code.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty, target.rawValue)
}
}
}