Maison >développement back-end >Golang >syntaxe golang testscript .txtar pour le texte contenu dans stderr ou stdout

syntaxe golang testscript .txtar pour le texte contenu dans stderr ou stdout

王林
王林avant
2024-02-12 16:15:05514parcourir

golang testscript .txtar 语法,用于 stderr 或 stdout 中包含的文本

Contenu de la question

J'apprends à utiliser le module https://github.com/rogpeppe/go-internal testscript pour tester les programmes cli.

Quand j'utilise cette ligne dans le fichier .txtar :

stderr /No help topic/gm

...La sortie d'erreur réelle est :

No help topic for 'totalfoobar'

Je reçois une erreur usage: stderr [-count=N] 'pattern'.

J'ai regardé la documentation ici et pour être honnête, c'est difficile à comprendre. Je ne vois aucune explication sur ce que signifie -count=N.

J'ai essayé toutes les variantes ci-dessous :

stderr -count=1 No help topic for 'totalfoobar'
stderr No help topic for 'totalfoobar'
stderr *No help topic*

Quelle que soit la chaîne, l'assertion échoue toujours avec la même erreur.

Q : Comment puis-je obtenir une substring de la sortie totale stderr/stdout pour des tests plus flexibles ?

Solution de contournement

Citer le modèle avec des guillemets simples :

// parse parses a single line as a list of space-separated arguments
// subject to environment variable expansion (but not resplitting).
// Single quotes around text disable splitting and expansion.
// To embed a single quote, double it: 'Don”t communicate by sharing memory.'
func (ts *TestScript) parse(line string) []string

Le résultat est finalement transmis en tant que paramètre args à scriptMatch. L'implémentation de scriptMatch montre qu'elle ne nécessite que args 参数传递给 scriptMatch 最后。 scriptMatch 的实现表明,除了可选的 -count 标志之外,它只需要 1 参数。如果 No help topic1 paramètres en plus de l'indicateur facultatif -count. Si Aucun sujet d'aide n'est cité, il sera analysé en 3

paramètres, ce qui n'est pas comme prévu :

extraUsage := ""
want := 1
// [code truncated]
if len(args) != want {
    ts.Fatalf("usage: %s [-count=N] 'pattern'%s", name, extraUsage)
}

Au fait, le modèle avec lequel il compile est le suivant :

re, err := regexp.Compile(`(?m)` + pattern)

N'oubliez pas que vous devez écrire des expressions régulières en utilisant la syntaxe Go. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer