Skip to content

Commit b712abd

Browse files
committed
Tests des chemins de réglages et de l'historique IA ; captures des étiquettes pochette en fond et d'un élément sélectionné
1 parent 906d5c3 commit b712abd

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

‎app/Sources/LaFleurStudio/Captures.swift‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,23 @@ enum Captures {
2525
await ecran("ecran-2-jaquette.png", .jaquette)
2626
await ecran("ecran-3-enregistrer.png", .enregistrer)
2727
await ecran("ecran-4-collection.png", .collection)
28+
// Étiquettes « pochette en fond » et jaquette retouchée (titre agrandi et déplacé, pochette de l'étiquette masquée).
29+
var dr = etat.design
30+
dr.etiquettePochette = .fond; dr.voileEtiquette = 0.4
31+
dr.echelles["titre"] = 1.3
32+
var aj = Ajustement(); aj.dy = -4; aj.couleur = "#F2C14E"
33+
dr.ajustements["recto-titre"] = aj
34+
let sauvegarde = etat.design
35+
etat.design = dr
36+
if let data = Export.png(VStack(spacing: 18) { EtiquetteVue(mise: etat.mise, face: .a, u: Typo.ptParMM); EtiquetteVue(mise: etat.mise, face: .b, u: Typo.ptParMM) }
37+
.padding(10).background(Color.white), dpi: 300) {
38+
try? data.write(to: dossier.appendingPathComponent("etiquettes-pochette-en-fond.png"))
39+
}
40+
etat.elementSelectionne = "recto-titre"
41+
await capturer(JCardVue(mise: etat.mise, guides: true, u: 4).environment(\.editionJaquette, etat.edition).padding(12).background(W98.grisFonce),
42+
CGSize(width: 900, height: 470), dossier.appendingPathComponent("jaquette-element-selectionne.png"))
43+
etat.elementSelectionne = nil
44+
etat.design = sauvegarde
2845
for r in ["Audio", "IA"] {
2946
await capturer(Reglages(rubrique: r).environmentObject(etat).environmentObject(moteur), CGSize(width: 760, height: 560),
3047
dossier.appendingPathComponent("reglages-\(r.lowercased()).png"))

‎app/Tests/LaFleurCoreTests/LaFleurCoreTests.swift‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,3 +372,59 @@ final class RetouchesTests: XCTestCase {
372372
XCTAssertEqual(r.first?.licence, "Public domain")
373373
}
374374
}
375+
376+
/// L'IA change n'importe quel réglage par son chemin (demande 6).
377+
final class CheminsTests: XCTestCase {
378+
func testEcrireEtLire() throws {
379+
var d = Design()
380+
try Chemins.ecrire("variante.palette.fond", "#112233", dans: &d)
381+
XCTAssertEqual(d.variante.palette.fond, "#112233")
382+
try Chemins.ecrire("echelles.titre", "1,3", dans: &d)
383+
XCTAssertEqual(d.echelle("titre"), 1.3, accuracy: 1e-9)
384+
try Chemins.ecrire("ajustements.recto-titre.dx", "4", dans: &d)
385+
XCTAssertEqual(d.ajustement("recto-titre").dx, 4)
386+
XCTAssertEqual(d.ajustement("recto-titre").echelle, 1)
387+
try Chemins.ecrire("ajustements.etiquette-pochette.masque", "oui", dans: &d)
388+
XCTAssertTrue(d.ajustement("etiquette-pochette").masque)
389+
try Chemins.ecrire("etiquettePochette", "aucune", dans: &d)
390+
XCTAssertEqual(d.etiquettePochette, .aucune)
391+
try Chemins.ecrire("codeBarres", "non", dans: &d)
392+
XCTAssertFalse(d.codeBarres)
393+
try Chemins.ecrire("volets", "5", dans: &d)
394+
XCTAssertEqual(d.volets, 5)
395+
XCTAssertEqual(Chemins.lire("volets", dans: d), "5")
396+
XCTAssertEqual(Chemins.lire("variante.palette.fond", dans: d), "#112233")
397+
}
398+
399+
func testRefus() {
400+
var d = Design()
401+
XCTAssertThrowsError(try Chemins.ecrire("etiquettePochette", "ronde", dans: &d))
402+
XCTAssertThrowsError(try Chemins.ecrire("volets", "4.5", dans: &d))
403+
XCTAssertThrowsError(try Chemins.ecrire("codeBarres", "peut-être", dans: &d))
404+
XCTAssertEqual(d, Design(), "un refus ne change rien")
405+
}
406+
407+
func testProjetEtReglages() throws {
408+
var p = Projet(numeroCatalogue: "LFS-009")
409+
try Chemins.ecrire("cassette.bande", "typeI", dans: &p)
410+
XCTAssertEqual(p.cassette.bande, .typeI)
411+
try Chemins.ecrire("titre", "Pluie", dans: &p)
412+
XCTAssertEqual(p.titre, "Pluie")
413+
var r = Preferences()
414+
try Chemins.ecrire("platine.blanc", "3", dans: &r)
415+
XCTAssertEqual(r.platine.blanc, 3)
416+
// Les anciennes cassettes sans historique IA se relisent.
417+
XCTAssertTrue(p.echangesIA.isEmpty)
418+
p.echangesIA = [EchangeIA(demande: "titre plus gros", moteur: "Claude · claude-opus-5-5", reponse: "ok",
419+
changements: ["echelles.titre : — → 1.3"], cout: 0.01, designApres: Design(), refaisable: true)]
420+
let relu = try JSONDecoder().decode(Projet.self, from: JSONEncoder().encode(p))
421+
XCTAssertEqual(relu.echangesIA.first?.demande, "titre plus gros")
422+
}
423+
424+
func testCout() {
425+
let c = CompteurJetons()
426+
c.ajouter(entree: 1_000_000, sortie: 100_000)
427+
XCTAssertEqual(c.cout(modele: "claude-opus-5-5") ?? 0, 4 + 2, accuracy: 1e-9)
428+
XCTAssertNil(c.cout(modele: "modele-inconnu"))
429+
}
430+
}

0 commit comments

Comments
 (0)