diff --git a/test/shell/test_cross_build.sh b/test/shell/test_cross_build.sh index f9b6aeee3..5efe07fb6 100644 --- a/test/shell/test_cross_build.sh +++ b/test/shell/test_cross_build.sh @@ -2,6 +2,7 @@ dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) . "${dir}"/test_runner.sh . "${dir}"/test_helper.sh +. "${dir}"/test_scalafmt_helper.sh runner=$(get_test_runner "${1:-local}") cd test_cross_build @@ -12,4 +13,14 @@ function test_cross_build() { bazel shutdown; } +function test_scalafmt() { + run_formatting scalafmt binary2 binary2 + run_formatting scalafmt binary3 binary3 + run_formatting scalafmt library2 library2 + run_formatting scalafmt library3 library3 + run_formatting scalafmt test2 test2 + run_formatting scalafmt test3 test3 +} + $runner test_cross_build +$runner test_scalafmt diff --git a/test/shell/test_scalafmt.sh b/test/shell/test_scalafmt.sh index 24e138718..cefe2c88e 100755 --- a/test/shell/test_scalafmt.sh +++ b/test/shell/test_scalafmt.sh @@ -2,79 +2,22 @@ dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) . "${dir}"/test_runner.sh . "${dir}"/test_helper.sh +. "${dir}"/test_scalafmt_helper.sh runner=$(get_test_runner "${1:-local}") -backup_unformatted() { - FILE_PATH=$1 - FILENAME=$2 - cp $FILE_PATH/unformatted/unformatted-$FILENAME.scala $FILE_PATH/unformatted/unformatted-$FILENAME.backup.scala -} - -restore_unformatted_before_exit() { - FILE_PATH=$1 - FILENAME=$2 - cp $FILE_PATH/unformatted/unformatted-$FILENAME.backup.scala $FILE_PATH/unformatted/unformatted-$FILENAME.scala - rm -f $FILE_PATH/unformatted/unformatted-$FILENAME.backup.scala -} - -run_formatting() { - set +e - - FILE_PATH="$( dirname $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) )"/scalafmt - RULE_TYPE=$1 - FILENAME=$2 - - #on windows scalafmt targets need to be run using bash. - #TODO: improve the scalafmt funcitonality so we don't need to use the run_under mechanism - local run_under = "" - if is_windows; then - run_under="--run_under=bash" - fi - - bazel run //test/scalafmt:formatted-$RULE_TYPE.format-test $run_under - if [ $? -ne 0 ]; then - echo -e "${RED} formatted-$RULE_TYPE.format-test should be a formatted target. $NC" - exit 1 - fi - - bazel run //test/scalafmt:unformatted-$RULE_TYPE.format-test $run_under - if [ $? -eq 0 ]; then - echo -e "${RED} unformatted-$RULE_TYPE.format-test should be an unformatted target. $NC" - exit 1 - fi - - backup_unformatted $FILE_PATH $FILENAME - # format unformatted*.scala - - bazel run //test/scalafmt:unformatted-$RULE_TYPE.format $run_under - if [ $? -ne 0 ]; then - echo -e "${RED} unformatted-$RULE_TYPE.format should run formatting. $NC" - restore_unformatted_before_exit $FILE_PATH $FILENAME - exit 1 - fi - - diff $FILE_PATH/unformatted/unformatted-$FILENAME.scala $FILE_PATH/formatted/formatted-$FILENAME.scala - if [ $? -ne 0 ]; then - echo -e "${RED} unformatted-$FILENAME.scala should be the same as formatted-$FILENAME.scala after formatting. $NC" - restore_unformatted_before_exit $FILE_PATH $FILENAME - exit 1 - fi - restore_unformatted_before_exit $FILE_PATH $FILENAME -} - test_scalafmt_binary() { - run_formatting binary encoding + run_formatting test/scalafmt binary encoding } test_scalafmt_library() { - run_formatting library encoding + run_formatting test/scalafmt library encoding } test_scalafmt_test() { - run_formatting test test + run_formatting test/scalafmt test test } test_custom_conf() { - run_formatting custom-conf custom-conf + run_formatting test/scalafmt custom-conf custom-conf } $runner test_scalafmt_binary diff --git a/test/shell/test_scalafmt_helper.sh b/test/shell/test_scalafmt_helper.sh new file mode 100755 index 000000000..ca7302421 --- /dev/null +++ b/test/shell/test_scalafmt_helper.sh @@ -0,0 +1,57 @@ +backup_unformatted() { + FILE_PATH=$1 + FILENAME=$2 + cp $FILE_PATH/unformatted/unformatted-$FILENAME.scala $FILE_PATH/unformatted/unformatted-$FILENAME.backup.scala +} + +restore_unformatted_before_exit() { + FILE_PATH=$1 + FILENAME=$2 + cp $FILE_PATH/unformatted/unformatted-$FILENAME.backup.scala $FILE_PATH/unformatted/unformatted-$FILENAME.scala + rm -f $FILE_PATH/unformatted/unformatted-$FILENAME.backup.scala +} + +run_formatting() { + set +e + + PACKAGE_DIR=$1 + RULE_TYPE=$2 + FILENAME=$3 + + #on windows scalafmt targets need to be run using bash. + #TODO: improve the scalafmt funcitonality so we don't need to use the run_under mechanism + local run_under="" + if is_windows; then + run_under="--run_under=bash" + fi + + bazel run //$PACKAGE_DIR:formatted-$RULE_TYPE.format-test $run_under + if [ $? -ne 0 ]; then + echo -e "${RED} formatted-$RULE_TYPE.format-test should be a formatted target. $NC" + exit 1 + fi + + bazel run //$PACKAGE_DIR:unformatted-$RULE_TYPE.format-test $run_under + if [ $? -eq 0 ]; then + echo -e "${RED} unformatted-$RULE_TYPE.format-test should be an unformatted target. $NC" + exit 1 + fi + + backup_unformatted $PACKAGE_DIR $FILENAME + # format unformatted*.scala + + bazel run //$PACKAGE_DIR:unformatted-$RULE_TYPE.format $run_under + if [ $? -ne 0 ]; then + echo -e "${RED} unformatted-$RULE_TYPE.format should run formatting. $NC" + restore_unformatted_before_exit $PACKAGE_DIR $FILENAME + exit 1 + fi + + diff $FILE_PATH/unformatted/unformatted-$FILENAME.scala $FILE_PATH/formatted/formatted-$FILENAME.scala + if [ $? -ne 0 ]; then + echo -e "${RED} unformatted-$FILENAME.scala should be the same as formatted-$FILENAME.scala after formatting. $NC" + restore_unformatted_before_exit $PACKAGE_DIR $FILENAME + exit 1 + fi + restore_unformatted_before_exit $FILE_PATH $FILENAME +} diff --git a/test_cross_build/WORKSPACE b/test_cross_build/WORKSPACE index 8af44482e..e069134f8 100644 --- a/test_cross_build/WORKSPACE +++ b/test_cross_build/WORKSPACE @@ -11,6 +11,22 @@ http_archive( ], ) +http_archive( + name = "rules_proto", + sha256 = "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da", + strip_prefix = "rules_proto-7e4afce6fe62dbff0a4a03450143146f9f2d7488", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/7e4afce6fe62dbff0a4a03450143146f9f2d7488.tar.gz", + ], +) + +load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") + +rules_proto_dependencies() + +rules_proto_toolchains() + local_repository( name = "io_bazel_rules_scala", path = "..", @@ -38,3 +54,13 @@ rules_scala_toolchain_deps_repositories() load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") scala_register_toolchains() + +load("@io_bazel_rules_scala//testing:scalatest.bzl", "scalatest_repositories", "scalatest_toolchain") + +scalatest_repositories() + +scalatest_toolchain() + +load("@io_bazel_rules_scala//scala/scalafmt:scalafmt_repositories.bzl", "scalafmt_repositories") + +scalafmt_repositories() diff --git a/test_cross_build/scalafmt/.scalafmt2.conf b/test_cross_build/scalafmt/.scalafmt2.conf new file mode 100644 index 000000000..4edb960ca --- /dev/null +++ b/test_cross_build/scalafmt/.scalafmt2.conf @@ -0,0 +1,2 @@ +maxColumn = 40 +lineEndings=preserve diff --git a/test_cross_build/scalafmt/.scalafmt3.conf b/test_cross_build/scalafmt/.scalafmt3.conf new file mode 100644 index 000000000..30bc1767b --- /dev/null +++ b/test_cross_build/scalafmt/.scalafmt3.conf @@ -0,0 +1,3 @@ +runner.dialect=scala3 +maxColumn = 40 +lineEndings=preserve diff --git a/test_cross_build/scalafmt/BUILD b/test_cross_build/scalafmt/BUILD new file mode 100644 index 000000000..848a5c9c5 --- /dev/null +++ b/test_cross_build/scalafmt/BUILD @@ -0,0 +1,115 @@ +load( + "scalafmt_rules.bzl", + "scalafmt_scala_binary", + "scalafmt_scala_library", + "scalafmt_scala_test", +) + +filegroup( + name = "scala2-conf", + srcs = [".scalafmt2.conf"], +) + +filegroup( + name = "scala3-conf", + srcs = [".scalafmt3.conf"], +) + +scalafmt_scala_library( + name = "unformatted-library2", + srcs = ["unformatted/unformatted-library2.scala"], + config = ":scala2-conf", + format = True, + scala_version = "2.13.12", +) + +scalafmt_scala_library( + name = "formatted-library2", + srcs = ["formatted/formatted-library2.scala"], + config = ":scala2-conf", + format = True, + scala_version = "2.13.12", +) + +scalafmt_scala_library( + name = "unformatted-library3", + srcs = ["unformatted/unformatted-library3.scala"], + config = ":scala3-conf", + format = True, + scala_version = "3.3.1", +) + +scalafmt_scala_library( + name = "formatted-library3", + srcs = ["formatted/formatted-library3.scala"], + config = ":scala3-conf", + format = True, + scala_version = "3.3.1", +) + +scalafmt_scala_binary( + name = "unformatted-binary2", + srcs = ["unformatted/unformatted-binary2.scala"], + config = ":scala2-conf", + format = True, + main_class = "UnformattedBinary", + scala_version = "2.12.18", +) + +scalafmt_scala_library( + name = "formatted-binary2", + srcs = ["formatted/formatted-binary2.scala"], + config = ":scala2-conf", + format = True, + main_class = "UnformattedBinary", + scala_version = "2.12.18", +) + +scalafmt_scala_binary( + name = "unformatted-binary3", + srcs = ["unformatted/unformatted-binary3.scala"], + config = ":scala3-conf", + format = True, + main_class = "UnformattedBinary", + scala_version = "3.2.1", +) + +scalafmt_scala_library( + name = "formatted-binary3", + srcs = ["formatted/formatted-binary3.scala"], + config = ":scala3-conf", + format = True, + main_class = "UnformattedBinary", + scala_version = "3.2.1", +) + +scalafmt_scala_test( + name = "unformatted-test2", + srcs = ["unformatted/unformatted-test2.scala"], + config = ":scala2-conf", + format = True, + scala_version = "2.12.18", +) + +scalafmt_scala_test( + name = "formatted-test2", + srcs = ["formatted/formatted-test2.scala"], + config = ":scala2-conf", + format = True, + scala_version = "2.12.18", +) + +#default scala version is 3.1.0 +scalafmt_scala_test( + name = "unformatted-test3", + srcs = ["unformatted/unformatted-test3.scala"], + config = ":scala3-conf", + format = True, +) + +scalafmt_scala_test( + name = "formatted-test3", + srcs = ["formatted/formatted-test3.scala"], + config = ":scala3-conf", + format = True, +) diff --git a/test_cross_build/scalafmt/formatted/formatted-binary2.scala b/test_cross_build/scalafmt/formatted/formatted-binary2.scala new file mode 100644 index 000000000..1f86f06fd --- /dev/null +++ b/test_cross_build/scalafmt/formatted/formatted-binary2.scala @@ -0,0 +1,10 @@ +object UnformattedBinary { + val info = + " unformatted file " + + def main( + args: Array[String] + ): Unit = { + println(info) + } +} diff --git a/test_cross_build/scalafmt/formatted/formatted-binary3.scala b/test_cross_build/scalafmt/formatted/formatted-binary3.scala new file mode 100644 index 000000000..8e4b48908 --- /dev/null +++ b/test_cross_build/scalafmt/formatted/formatted-binary3.scala @@ -0,0 +1,5 @@ +@main def UnformattedBinary(): Unit = + val message = + " unformatted binary " + + println(message) diff --git a/test_cross_build/scalafmt/formatted/formatted-library2.scala b/test_cross_build/scalafmt/formatted/formatted-library2.scala new file mode 100644 index 000000000..5aec5d0e0 --- /dev/null +++ b/test_cross_build/scalafmt/formatted/formatted-library2.scala @@ -0,0 +1,4 @@ +object Unformatted { + val info = + " unformatted file " +} diff --git a/test_cross_build/scalafmt/formatted/formatted-library3.scala b/test_cross_build/scalafmt/formatted/formatted-library3.scala new file mode 100644 index 000000000..66e6ba101 --- /dev/null +++ b/test_cross_build/scalafmt/formatted/formatted-library3.scala @@ -0,0 +1,3 @@ +object Unformatted: + val info = + " unformatted file " diff --git a/test_cross_build/scalafmt/formatted/formatted-test2.scala b/test_cross_build/scalafmt/formatted/formatted-test2.scala new file mode 100644 index 000000000..7f1137317 --- /dev/null +++ b/test_cross_build/scalafmt/formatted/formatted-test2.scala @@ -0,0 +1,8 @@ +import org.scalatest.flatspec._ + +class Test extends AnyFlatSpec { + + "Test" should "be formatted" in { + assert(true) + } +} diff --git a/test_cross_build/scalafmt/formatted/formatted-test3.scala b/test_cross_build/scalafmt/formatted/formatted-test3.scala new file mode 100644 index 000000000..bc90e02f6 --- /dev/null +++ b/test_cross_build/scalafmt/formatted/formatted-test3.scala @@ -0,0 +1,7 @@ +import org.scalatest.flatspec._ + +class Test extends AnyFlatSpec: + + "Test" should "be formatted" in { + assert(true) + } diff --git a/test_cross_build/scalafmt/scalafmt_rules.bzl b/test_cross_build/scalafmt/scalafmt_rules.bzl new file mode 100644 index 000000000..b96d8f216 --- /dev/null +++ b/test_cross_build/scalafmt/scalafmt_rules.bzl @@ -0,0 +1,16 @@ +load( + "@io_bazel_rules_scala//scala:advanced_usage/scala.bzl", + "make_scala_binary", + "make_scala_library", + "make_scala_test", +) +load( + "@io_bazel_rules_scala//scala/scalafmt:phase_scalafmt_ext.bzl", + "ext_scalafmt", +) + +scalafmt_scala_binary = make_scala_binary(ext_scalafmt) + +scalafmt_scala_library = make_scala_library(ext_scalafmt) + +scalafmt_scala_test = make_scala_test(ext_scalafmt) diff --git a/test_cross_build/scalafmt/unformatted/unformatted-binary2.scala b/test_cross_build/scalafmt/unformatted/unformatted-binary2.scala new file mode 100644 index 000000000..41b22eba2 --- /dev/null +++ b/test_cross_build/scalafmt/unformatted/unformatted-binary2.scala @@ -0,0 +1,9 @@ + +object UnformattedBinary { + val info = " unformatted file " + + def main(args: Array[String]): Unit = + { + println(info) + } +} diff --git a/test_cross_build/scalafmt/unformatted/unformatted-binary3.scala b/test_cross_build/scalafmt/unformatted/unformatted-binary3.scala new file mode 100644 index 000000000..ec0d4c7ed --- /dev/null +++ b/test_cross_build/scalafmt/unformatted/unformatted-binary3.scala @@ -0,0 +1,4 @@ +@main def UnformattedBinary(): Unit = + val message = " unformatted binary " + + println(message) diff --git a/test_cross_build/scalafmt/unformatted/unformatted-library2.scala b/test_cross_build/scalafmt/unformatted/unformatted-library2.scala new file mode 100644 index 000000000..8544a2118 --- /dev/null +++ b/test_cross_build/scalafmt/unformatted/unformatted-library2.scala @@ -0,0 +1,3 @@ +object Unformatted { + val info = " unformatted file " +} diff --git a/test_cross_build/scalafmt/unformatted/unformatted-library3.scala b/test_cross_build/scalafmt/unformatted/unformatted-library3.scala new file mode 100644 index 000000000..8c3d2b609 --- /dev/null +++ b/test_cross_build/scalafmt/unformatted/unformatted-library3.scala @@ -0,0 +1,3 @@ +object Unformatted: + val info = " unformatted file " + \ No newline at end of file diff --git a/test_cross_build/scalafmt/unformatted/unformatted-test2.scala b/test_cross_build/scalafmt/unformatted/unformatted-test2.scala new file mode 100644 index 000000000..1bd719856 --- /dev/null +++ b/test_cross_build/scalafmt/unformatted/unformatted-test2.scala @@ -0,0 +1,9 @@ +import org.scalatest.flatspec._ + +class Test extends AnyFlatSpec +{ + + "Test" should "be formatted" in { + assert(true) + } +} diff --git a/test_cross_build/scalafmt/unformatted/unformatted-test3.scala b/test_cross_build/scalafmt/unformatted/unformatted-test3.scala new file mode 100644 index 000000000..33f3c9a99 --- /dev/null +++ b/test_cross_build/scalafmt/unformatted/unformatted-test3.scala @@ -0,0 +1,8 @@ +import org.scalatest.flatspec._ + +class Test extends + AnyFlatSpec: + + "Test" should "be formatted" in { + assert(true) + }