blob: 08277a5e0423063a2206bcd94eca23cfcd38fd51 [file]
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for the checks in //scripts/shac/underscore_vs_dash.star."""
load("//scripts/shac/underscore_vs_dash.star", "underscore_vs_dash")
def _existing_files(dirpath, names):
return {
"%s/%s" % (dirpath, name): testing.file(affected = False)
for name in names
}
def test_dash_among_underscores():
files = _existing_files("src/foo", ["a_%d.cc" % i for i in range(10)])
files["src/foo/new-file.cc"] = testing.file(action = "A")
res = testing.run(underscore_vs_dash, files = files)
asserts.eq(res.findings, (
testing.finding(
level = "warning",
message = "\n".join([
r"filename contains a '-' character. Similar files tend to use '\_'. Consider using '\_' instead.",
"",
"Of other '.cc' files under 'src/foo':",
r"* 10 use '\_'",
"* 0 use '-'",
"",
]),
filepath = "src/foo/new-file.cc",
),
))
def test_underscore_among_dashes():
files = _existing_files("src/foo", ["a-%d" % i for i in range(10)])
files["src/foo/new_file"] = testing.file(action = "A")
res = testing.run(underscore_vs_dash, files = files)
asserts.eq(res.findings, (
testing.finding(
level = "warning",
message = "\n".join([
r"filename contains a '\_' character. Similar files tend to use '-'. Consider using '-' instead.",
"",
"Of other extensionless files under 'src/foo':",
r"* 0 use '\_'",
"* 10 use '-'",
"",
]),
filepath = "src/foo/new_file",
),
))
def test_underscore_preferred_when_close():
# "_" is only discouraged when "-" substantially outnumbers it.
files = _existing_files("src/foo", ["a-%d.cc" % i for i in range(6)] + ["b_%d.cc" % i for i in range(4)])
files["src/foo/new_file.cc"] = testing.file(action = "A")
res = testing.run(underscore_vs_dash, files = files)
asserts.eq(res.findings, ())
def test_falls_back_to_parent_dir():
"""A new file in a new directory is compared with its parent's files."""
files = _existing_files("src", ["a_%d.cc" % i for i in range(10)])
files["src/foo/new-file.cc"] = testing.file(action = "A")
res = testing.run(underscore_vs_dash, files = files)
asserts.eq([f.filepath for f in res.findings], ["src/foo/new-file.cc"])
asserts.contains(res.findings[0].message, "files under 'src':")
def test_only_added_files():
files = _existing_files("src/foo", ["a_%d.cc" % i for i in range(10)])
files["src/foo/new-file.cc"] = testing.file(action = "M")
res = testing.run(underscore_vs_dash, files = files)
asserts.eq(res.findings, ())