1d1d611496
Changes since 21.2.0: Files whose names ends in '~' are ignored by pkglint since they are ignored by CVS as well. Variables with name BUILDLINK_TRANSFORM.* may contain '-Wl,-rpath,' directly in commands of the form 'rm:*', just like their counterpart BUILDLINK_TRANSFORM without a package name in the variable name. Several new tests.
282 lines
6.4 KiB
Go
282 lines
6.4 KiB
Go
package pkglint
|
|
|
|
import (
|
|
"gopkg.in/check.v1"
|
|
"netbsd.org/pkglint/regex"
|
|
)
|
|
|
|
func (s *Suite) Test_RawLine_Orig(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
t.CheckEquals(line.raw[0].orignl, "text\n")
|
|
t.CheckEquals(line.raw[0].Orig(), "text")
|
|
}
|
|
|
|
func (s *Suite) Test_NewLocation(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
loc := NewLocation("subdir/filename", 123)
|
|
|
|
t.CheckEquals(loc.Filename, NewCurrPathString("subdir/filename"))
|
|
t.CheckEquals(loc.lineno, 123)
|
|
}
|
|
|
|
func (s *Suite) Test_Location_Lineno(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
loc := NewLocation("subdir/filename", 123)
|
|
|
|
t.CheckEquals(loc.Lineno(0), 123)
|
|
}
|
|
|
|
func (s *Suite) Test_Location_File(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
loc := NewLocation("subdir/filename", 123)
|
|
|
|
t.CheckEquals(loc.File("other"), NewCurrPathString("subdir/other"))
|
|
}
|
|
|
|
func (s *Suite) Test_NewLine__assertion(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
t.ExpectAssert(func() { NewLine("filename", 123, "text", nil) })
|
|
}
|
|
|
|
func (s *Suite) Test_NewLineMulti(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := NewLineMulti("subdir/filename", 123, "", []*RawLine{nil, nil, nil})
|
|
|
|
t.CheckEquals(line.Filename(), NewCurrPathString("subdir/filename"))
|
|
t.CheckEquals(line.Linenos(), "123--125")
|
|
}
|
|
|
|
func (s *Suite) Test_NewLineEOF(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := NewLineEOF("subdir/filename")
|
|
|
|
t.CheckEquals(line.Filename(), NewCurrPathString("subdir/filename"))
|
|
t.CheckEquals(line.Linenos(), "EOF")
|
|
}
|
|
|
|
func (s *Suite) Test_NewLineWhole(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := NewLineWhole("subdir/filename")
|
|
|
|
t.CheckEquals(line.Filename(), NewCurrPathString("subdir/filename"))
|
|
t.CheckEquals(line.Linenos(), "")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Filename(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("subdir/filename", 123, "")
|
|
|
|
t.CheckEquals(line.Filename(), NewCurrPathString("subdir/filename"))
|
|
}
|
|
|
|
func (s *Suite) Test_Line_File(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("subdir/filename", 123, "")
|
|
|
|
t.CheckEquals(line.File("subsub/nested"),
|
|
NewCurrPathString("subdir/subsub/nested"))
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Linenos(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
single := t.NewLine("filename", 123, "")
|
|
whole := NewLineWhole("filename")
|
|
multi := NewLineMulti("filename", 123, "text", []*RawLine{nil, nil, nil})
|
|
|
|
t.CheckEquals(single.Linenos(), "123")
|
|
t.CheckEquals(whole.Linenos(), "")
|
|
t.CheckEquals(multi.Linenos(), "123--125")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_RelLine__assertion(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "")
|
|
whole := NewLineWhole("filename")
|
|
|
|
t.ExpectAssert(func() { line.RelLine(whole) })
|
|
}
|
|
|
|
func (s *Suite) Test_Line_RelLocation__assertion(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "")
|
|
whole := NewLineWhole("filename")
|
|
|
|
t.ExpectAssert(func() { line.RelLocation(whole.Location) })
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Rel(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
t.Chdir(".")
|
|
line1 := t.NewLine("subdir/filename", 123, "from")
|
|
|
|
rel := line1.Rel("other/filename")
|
|
|
|
t.CheckEquals(rel, NewRelPathString("../other/filename"))
|
|
}
|
|
|
|
func (s *Suite) Test_Line_IsMultiline(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
t.CheckEquals(t.NewLine("filename", 123, "text").IsMultiline(), false)
|
|
|
|
t.CheckEquals(NewLineEOF("filename").IsMultiline(), false)
|
|
|
|
multi := NewLineMulti("filename", 123, "text", []*RawLine{nil, nil, nil})
|
|
t.CheckEquals(multi.IsMultiline(), true)
|
|
}
|
|
|
|
func (s *Suite) Test_Line_RawText(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
t.SetUpCommandLine("--show-autofix")
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
t.CheckEquals(line.RawText(0), "text")
|
|
|
|
fix := line.Autofix()
|
|
fix.Notef("Replacing.")
|
|
fix.Replace("text", "replaced")
|
|
fix.Apply()
|
|
|
|
t.CheckEquals(line.RawText(0), "replaced")
|
|
|
|
t.CheckOutputLines(
|
|
"NOTE: filename:123: Replacing.",
|
|
"AUTOFIX: filename:123: Replacing \"text\" with \"replaced\".")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_IsCvsID(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
test := func(text string, prefix regex.Pattern, expectedID bool, expectedExpanded bool) {
|
|
line := t.NewLine("filename", 123, text)
|
|
|
|
id, expanded := line.IsCvsID(prefix)
|
|
|
|
t.CheckEquals(id, expectedID)
|
|
t.CheckEquals(expanded, expectedExpanded)
|
|
}
|
|
|
|
test(CvsID, ``, true, false)
|
|
|
|
test("$"+"NetBSD: ... $", ``, true, true)
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Errorf(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
line.Errorf("For your information.")
|
|
|
|
t.CheckOutputLines(
|
|
"ERROR: filename:123: For your information.")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Warnf(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
line.Warnf("For your information.")
|
|
|
|
t.CheckOutputLines(
|
|
"WARN: filename:123: For your information.")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Notef(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
line.Notef("For your information.")
|
|
|
|
t.CheckOutputLines(
|
|
"NOTE: filename:123: For your information.")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Explain(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
t.SetUpCommandLine("--explain")
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
line.Notef("For your information.")
|
|
line.Explain(
|
|
"First line",
|
|
"continues.")
|
|
|
|
t.CheckOutputLines(
|
|
"NOTE: filename:123: For your information.",
|
|
"",
|
|
"\tFirst line continues.",
|
|
"")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Explain__without_diagnostic(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
t.SetUpCommandLine("--explain")
|
|
line := t.NewLine("filename", 123, "text")
|
|
|
|
// It is unusual to have an explanation without any preceding
|
|
// diagnostic.
|
|
line.Explain(
|
|
"First line",
|
|
"continues.")
|
|
|
|
// There is no empty line above the explanation since that is the
|
|
// job of the SeparatorWriter, which only steps in if there is a
|
|
// diagnostic above the explanation.
|
|
t.CheckOutputLines(
|
|
"\tFirst line continues.",
|
|
"")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_String(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename", 123, "text")
|
|
t.CheckEquals(line.String(), "filename:123: text")
|
|
|
|
// Since Line.String is only used for debugging purposes, trailing
|
|
// whitespace is OK.
|
|
t.CheckEquals(NewLineEOF("filename").String(), "filename:EOF: ")
|
|
|
|
multi := NewLineMulti("filename", 123, "text", []*RawLine{nil, nil, nil})
|
|
t.CheckEquals(multi.String(), "filename:123--125: text")
|
|
}
|
|
|
|
func (s *Suite) Test_Line_Autofix__reuse_incomplete(c *check.C) {
|
|
t := s.Init(c)
|
|
|
|
line := t.NewLine("filename.mk", 1, "")
|
|
|
|
fix := line.Autofix()
|
|
fix.Warnf("Warning.")
|
|
// For some reason, the other required calls are left out.
|
|
|
|
t.ExpectAssert(func() { _ = line.Autofix() })
|
|
|
|
// Properly finish the standard call sequence for an Autofix.
|
|
fix.Apply()
|
|
|
|
t.CheckOutputLines(
|
|
"WARN: filename.mk:1: Warning.")
|
|
}
|