-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathguardflags_test.go
More file actions
171 lines (160 loc) · 5.53 KB
/
Copy pathguardflags_test.go
File metadata and controls
171 lines (160 loc) · 5.53 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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
//go:build windows && amd64
// NVENCForgeGUI (https://github.com/burnersen/NVENCForgeGUI)
// Copyright (C) 2026 burnersen
// SPDX-License-Identifier: GPL-3.0-only
package main
import (
"strings"
"testing"
)
// hasArg sagt, ob ein Schalter in der Befehlszeile steht.
func hasArg(args []string, want string) bool {
for _, a := range args {
if a == want {
return true
}
}
return false
}
// TestCropOffSendsNoCrop: ein leeres Kästchen muss beim Konverter ankommen.
// Ohne "-nocrop" gewönne autoCrop=true aus der INI, und es würde geschnitten,
// obwohl im Fenster nichts danach aussieht.
func TestCropOffSendsNoCrop(t *testing.T) {
args, err := buildConverterArgs(RunRequest{
Files: []string{"film.mkv"},
Crop: cropOff,
}, false)
if err != nil {
t.Fatalf("unerwarteter Fehler: %v", err)
}
if !hasArg(args, "-nocrop") {
t.Errorf("-nocrop fehlt in %v", args)
}
if hasArg(args, "-crop") {
t.Errorf("-crop darf hier nicht dabei sein: %v", args)
}
}
// TestCropUnsetSendsNothing: solange nicht feststeht, dass die Programmdatei
// den Gegenschalter kennt, darf er nicht mitgeschickt werden — eine ältere
// Ausgabe würde ihn bei jedem Lauf als unbekannte Option anmeckern.
func TestCropUnsetSendsNothing(t *testing.T) {
args, err := buildConverterArgs(RunRequest{Files: []string{"film.mkv"}}, false)
if err != nil {
t.Fatalf("unerwarteter Fehler: %v", err)
}
for _, flag := range []string{"-crop", "-nocrop", "-cropcheck"} {
if hasArg(args, flag) {
t.Errorf("%s wurde ungefragt mitgeschickt: %v", flag, args)
}
}
}
// TestCropOnAndCheckStayExclusive: beide Schalter zusammen wären
// widersprüchlich — "-cropcheck" konvertiert nichts, "-crop" schon.
func TestCropOnAndCheckStayExclusive(t *testing.T) {
for _, mode := range []string{cropOn, cropCheck} {
args, err := buildConverterArgs(RunRequest{
Files: []string{"film.mkv"},
Crop: mode,
}, false)
if err != nil {
t.Fatalf("unerwarteter Fehler: %v", err)
}
count := 0
for _, flag := range []string{"-crop", "-nocrop", "-cropcheck"} {
if hasArg(args, flag) {
count++
}
}
if count != 1 {
t.Errorf("bei Crop=%q stehen %d Crop-Schalter in %v", mode, count, args)
}
}
}
// TestCodecH265SendsCounterSwitch: wählt das Fenster ausdrücklich H.265, muss
// "-h265" mitgehen. Der Schalter überstimmt ein früheres "-av1" auf derselben
// Befehlszeile; gegen die Konfigurationsdatei richtet er nichts aus, denn die
// hat gar keinen Schlüssel, der AV1 einschaltet.
func TestCodecH265SendsCounterSwitch(t *testing.T) {
args, err := buildConverterArgs(RunRequest{
Files: []string{"film.mkv"},
Codec: codecH265,
CounterFlags: true,
}, false)
if err != nil {
t.Fatalf("unerwarteter Fehler: %v", err)
}
if !hasArg(args, "-h265") {
t.Errorf("-h265 fehlt in %v", args)
}
if hasArg(args, "-av1") {
t.Errorf("-av1 darf hier nicht dabei sein: %v", args)
}
}
// TestCodecH265StaysAwayFromOlderConverters: Ohne die Gegenschalter ist "-h265"
// eine unbekannte Option, über die eine ältere Programmdatei bei JEDEM Lauf
// meckert. Zu überstimmen gibt es dort auch nichts — codec=av1 in der INI gibt
// es erst ab NVENCForge 1.23.0.
func TestCodecH265StaysAwayFromOlderConverters(t *testing.T) {
args, err := buildConverterArgs(RunRequest{
Files: []string{"film.mkv"},
Codec: codecH265,
}, false)
if err != nil {
t.Fatalf("unerwarteter Fehler: %v", err)
}
if hasArg(args, "-h265") {
t.Errorf("-h265 ging an eine exe, die es nicht kennt: %v", args)
}
}
// TestSuppressShutdownSendsNoShutdown ist der Schutz gegen den Schaden, der bis
// v1.0.1 im Fenster steckte, hier über die Konfigurationsdatei ausgelöst: mit
// autoShutdown=true würde der Konverter abschalten, sobald SEINE eine Datei
// fertig ist, und den Rest des Stapels mitreißen.
func TestSuppressShutdownSendsNoShutdown(t *testing.T) {
args, err := buildConverterArgs(RunRequest{
Files: []string{"film.mkv"},
SuppressConverterShutdown: true,
}, false)
if err != nil {
t.Fatalf("unerwarteter Fehler: %v", err)
}
if !hasArg(args, "-noshutdown") {
t.Errorf("-noshutdown fehlt in %v", args)
}
// Und "-shutdown" bleibt weiterhin tabu: abgeschaltet wird von shutdown.go,
// erst wenn wirklich alles leer ist.
if hasArg(args, "-shutdown") {
t.Errorf("-shutdown darf NIE an den Konverter gehen: %v", args)
}
}
// TestToolModesStayClean: Zerlegen, Zusammenfügen und der DaVinci-Weg vertragen
// keine zusätzlichen Schalter — der Konverter hielte sie für Dateinamen. Sie
// brauchen den Abschalt-Schutz auch nicht: diese Modi kehren zurück, bevor im
// Konverter überhaupt abgeschaltet werden könnte.
func TestToolModesStayClean(t *testing.T) {
for mode := range modeFlags {
// Zusammenfügen braucht zu einem Video mindestens eine Beigabe, sonst
// gäbe es nichts zusammenzufügen und der Argumentbau lehnt zu Recht ab.
// needsJoinOrder statt einer eigenen Liste: die bliebe sonst zurück,
// sobald ein weiterer Zusammenfüge-Weg dazukommt.
queue := []string{"film.mkv"}
if needsJoinOrder(mode) {
queue = append(queue, "ton.mka")
}
args, err := buildConverterArgs(RunRequest{
Files: queue,
Mode: mode,
Crop: cropOff,
Codec: codecH265,
SuppressConverterShutdown: true,
}, false)
if err != nil {
t.Fatalf("Modus %q: unerwarteter Fehler: %v", mode, err)
}
for _, flag := range []string{"-nocrop", "-h265", "-noshutdown"} {
if hasArg(args, flag) {
t.Errorf("Modus %q bekam %s mit: %v", mode, flag, strings.Join(args, " "))
}
}
}
}