chore: mantém ASCII o código dos testes novos
O lang-lint exige que a fonte deste repositório seja ASCII, e os testes que escrevi usavam acentos em texto de exemplo. Isto teria feito o CI vermelho. Onde o acento era só texto de exemplo, foi substituído. Nos dois testes onde o acento é o que está a ser testado - que um nome de pasta acentuado sobrevive ao parser, e que uma pasta pode chamar-se "Relatorios de Marco" - fica escrito como escape Unicode, que mantém o teste a verificar exactamente a mesma coisa sem pôr o caractere na fonte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
caec501ec5
commit
be933d241c
4 files changed
+27
-20
No files matched your search
@@ -43,7 +43,7 @@ func TestRuleDecidesTheFolder(t *testing.T) {
|
||||
|
||||
func TestMessageWithNoMatchingRuleIsUntouched(t *testing.T) {
|
||||
uc := newRules(&stubSieveScripts{script: filingRule})
|
||||
payload := []byte("From: amigo@example.test\r\nSubject: Almoço\r\n\r\ncorpo")
|
||||
payload := []byte("From: amigo@example.test\r\nSubject: Almoco\r\n\r\ncorpo")
|
||||
|
||||
decision := uc.For(context.Background(), uuid.New(), "me@example.test", "amigo@example.test", payload)
|
||||
if decision.Folder != "" || decision.Discard {
|
||||
@@ -85,7 +85,7 @@ func TestAFailingLookupStillDeliversTheMessage(t *testing.T) {
|
||||
// --- vacation ------------------------------------------------------------
|
||||
|
||||
const vacationRule = `require ["vacation"];
|
||||
vacation :subject "Fora do escritório" "Volto dia 30.";`
|
||||
vacation :subject "Fora do escritorio" "Volto dia 30.";`
|
||||
|
||||
func TestVacationRepliesToAPerson(t *testing.T) {
|
||||
uc := newRules(&stubSieveScripts{script: vacationRule})
|
||||
@@ -95,7 +95,7 @@ func TestVacationRepliesToAPerson(t *testing.T) {
|
||||
if decision.Vacation == nil {
|
||||
t.Fatal("no reply was produced")
|
||||
}
|
||||
if decision.Vacation.Subject != "Fora do escritório" {
|
||||
if decision.Vacation.Subject != "Fora do escritorio" {
|
||||
t.Errorf("subject %q", decision.Vacation.Subject)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ func TestRefusesAnAbsurdlyLongName(t *testing.T) {
|
||||
// Accents are ordinary in a Portuguese folder name.
|
||||
func TestAcceptsAccentedNames(t *testing.T) {
|
||||
store := &stubFolderStore{existing: standardFolders()}
|
||||
if err := newFolders(store).Create(context.Background(), "me@example.test", "Relatórios de Março"); err != nil {
|
||||
if err := newFolders(store).Create(context.Background(), "me@example.test", "Relat\u00f3rios de Mar\u00e7o"); err != nil {
|
||||
t.Errorf("an accented name was refused: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ func TestRuleFilesTheMessageInItsFolder(t *testing.T) {
|
||||
|
||||
func TestRuleThatDoesNotMatchLeavesTheMessageAlone(t *testing.T) {
|
||||
out := evaluate(t, uiRule, Message{Headers: map[string][]string{
|
||||
"subject": {"Almoço amanhã"},
|
||||
"subject": {"Almoco amanha"},
|
||||
}})
|
||||
if out.Folder != "" {
|
||||
t.Errorf("an unmatched rule filed into %q", out.Folder)
|
||||
@@ -78,10 +78,10 @@ func TestIsRequiresTheWholeValue(t *testing.T) {
|
||||
// :matches is Sieve's wildcard form - * and ? - and is what the interface
|
||||
// should offer instead of asking a human for a regular expression.
|
||||
func TestMatchesUsesWildcardsNotRegex(t *testing.T) {
|
||||
script := `if header :matches "From" "*@google.com" { fileinto "Relatórios"; }`
|
||||
script := `if header :matches "From" "*@google.com" { fileinto "Reports"; }`
|
||||
if out := evaluate(t, script, Message{Headers: map[string][]string{
|
||||
"from": {"noreply-dmarc-support@google.com"},
|
||||
}}); out.Folder != "Relatórios" {
|
||||
}}); out.Folder != "Reports" {
|
||||
t.Errorf("wildcard did not match: %q", out.Folder)
|
||||
}
|
||||
if out := evaluate(t, script, Message{Headers: map[string][]string{
|
||||
@@ -105,7 +105,7 @@ func TestWildcardDotIsLiteral(t *testing.T) {
|
||||
func TestAnyofMatchesWhenOneTestPasses(t *testing.T) {
|
||||
script := `if anyof (header :contains "Subject" "fatura", header :contains "From" "banco") { fileinto "Financeiro"; }`
|
||||
out := evaluate(t, script, Message{Headers: map[string][]string{
|
||||
"subject": {"Almoço"}, "from": {"aviso@banco.test"},
|
||||
"subject": {"Almoco"}, "from": {"aviso@banco.test"},
|
||||
}})
|
||||
if out.Folder != "Financeiro" {
|
||||
t.Errorf("anyof did not match: %q", out.Folder)
|
||||
@@ -186,7 +186,7 @@ func TestAddflagMarksTheMessage(t *testing.T) {
|
||||
// --- vacation ------------------------------------------------------------
|
||||
|
||||
const vacationScript = `require ["vacation"];
|
||||
vacation :subject "Fora do escritório" "Estou de férias até dia 30.";`
|
||||
vacation :subject "Fora do escritorio" "Estou de ferias ate dia 30.";`
|
||||
|
||||
func TestVacationProducesAReply(t *testing.T) {
|
||||
out := evaluate(t, vacationScript, Message{
|
||||
@@ -196,10 +196,10 @@ func TestVacationProducesAReply(t *testing.T) {
|
||||
if out.Vacation == nil {
|
||||
t.Fatal("no vacation reply was produced")
|
||||
}
|
||||
if out.Vacation.Subject != "Fora do escritório" {
|
||||
if out.Vacation.Subject != "Fora do escritorio" {
|
||||
t.Errorf("subject %q", out.Vacation.Subject)
|
||||
}
|
||||
if !strings.Contains(out.Vacation.Body, "férias") {
|
||||
if !strings.Contains(out.Vacation.Body, "ferias") {
|
||||
t.Errorf("body %q", out.Vacation.Body)
|
||||
}
|
||||
}
|
||||
@@ -266,9 +266,13 @@ if header :contains "Subject" "fatura" { fileinto "Financeiro"; } # fim
|
||||
// A folder name is used to route mail, so it must survive intact - including
|
||||
// the accents a Portuguese folder name has.
|
||||
func TestFolderNamesKeepTheirAccents(t *testing.T) {
|
||||
out := evaluate(t, `if header :contains "Subject" "x" { fileinto "Relatórios"; }`,
|
||||
// Written as an escape rather than the letter itself: the source of this
|
||||
// repository is kept ASCII (lang-lint), and the point of the test is that
|
||||
// the accented name survives the parser intact.
|
||||
accented := "Relat\u00f3rios"
|
||||
out := evaluate(t, `if header :contains "Subject" "x" { fileinto "`+accented+`"; }`,
|
||||
Message{Headers: map[string][]string{"subject": {"x"}}})
|
||||
if out.Folder != "Relatórios" {
|
||||
if out.Folder != accented {
|
||||
t.Errorf("folder %q", out.Folder)
|
||||
}
|
||||
}
|
||||
@@ -324,14 +328,14 @@ func TestMatchesSingleCharacterWildcard(t *testing.T) {
|
||||
|
||||
// A star in the middle has to match the run between two fixed parts.
|
||||
func TestMatchesStarInTheMiddle(t *testing.T) {
|
||||
script := `if header :matches "Subject" "Relatório * de agosto" { fileinto "X"; }`
|
||||
script := `if header :matches "Subject" "Relatorio * de agosto" { fileinto "X"; }`
|
||||
if out := evaluate(t, script, Message{Headers: map[string][]string{
|
||||
"subject": {"Relatório mensal de agosto"},
|
||||
"subject": {"Relatorio mensal de agosto"},
|
||||
}}); out.Folder != "X" {
|
||||
t.Errorf("star in the middle did not match: %q", out.Folder)
|
||||
}
|
||||
if out := evaluate(t, script, Message{Headers: map[string][]string{
|
||||
"subject": {"Relatório mensal de julho"},
|
||||
"subject": {"Relatorio mensal de julho"},
|
||||
}}); out.Folder != "" {
|
||||
t.Errorf("matched despite a different tail: %q", out.Folder)
|
||||
}
|
||||
|
||||
@@ -53,8 +53,8 @@ describe("turning a rule into Sieve", () => {
|
||||
// a script that did not parse - so one apostrophe silently disabled every
|
||||
// rule the user had.
|
||||
it("escapes a quote in the value", () => {
|
||||
const script = buildSieve([rule({ value: 'ele disse "olá"' })]);
|
||||
expect(script).toContain('\\"olá\\"');
|
||||
const script = buildSieve([rule({ value: 'ele disse "ola"' })]);
|
||||
expect(script).toContain('\\"ola\\"');
|
||||
expect(parseSieve(script)!).toHaveLength(1);
|
||||
});
|
||||
|
||||
@@ -116,9 +116,12 @@ describe("reading rules back out of Sieve", () => {
|
||||
});
|
||||
|
||||
it("round-trips the field and the target folder", () => {
|
||||
const [read] = parseSieve(buildSieve([rule({ field: "from", target: "Relatórios" })]))!;
|
||||
// Escaped rather than written as the letter: this repository keeps its
|
||||
// source ASCII, and an accented folder name still has to survive intact.
|
||||
const accented = "Relat\u00f3rios";
|
||||
const [read] = parseSieve(buildSieve([rule({ field: "from", target: accented })]))!;
|
||||
expect(read.field).toBe("from");
|
||||
expect(read.target).toBe("Relatórios");
|
||||
expect(read.target).toBe(accented);
|
||||
});
|
||||
|
||||
// A script written by hand, or by a desktop client over ManageSieve, may use
|
||||
|
||||
Reference in new issue
Block a user