old_contents: # Copyright (C) 2016 The Android Open Source Project
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  # http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  # Skylark rule to generate a Junit4 TestSuite
  # Assumes srcs are all .java Test files
  # Assumes junit4 is already added to deps by the user.
  
  # See https://github.com/bazelbuild/bazel/issues/1017 for background.
  
  _OUTPUT = """import org.junit.runners.Suite;
  import org.junit.runner.RunWith;
  
  @RunWith(Suite.class)
  @Suite.SuiteClasses({%s})
  public class %s {}
  """
  
  _PREFIXES = ("org", "com", "edu")
  
  def _SafeIndex(l, val):
      for i, v in enumerate(l):
          if val == v:
              return i
      return -1
  
  def _AsClassName(fname):
      fname = [x.path for x in fname.files][0]
      toks = fname[:-5].split("/")
      findex = -1
      for s in _PREFIXES:
          findex = _SafeIndex(toks, s)
          if findex != -1:
              break
      if findex == -1:
          fail("%s does not contain any of %s" % (fname, _PREFIXES))
      return ".".join(toks[findex:]) + ".class"
  
  def _impl(ctx):
      classes = ",".join(
          [_AsClassName(x) for x in ctx.attr.srcs],
      )
      ctx.actions.write(output = ctx.outputs.out, content = _OUTPUT % (
          classes,
          ctx.attr.outname,
      ))
  
  _GenSuite = rule(
      attrs = {
          "srcs": attr.label_list(allow_files = True),
          "outname": attr.string(),
      },
      outputs = {"out": "%{name}.java"},
      implementation = _impl,
  )
  
  def junit_tests(name, srcs, **kwargs):
      s_name = name + "TestSuite"
      _GenSuite(
          name = s_name,
          srcs = srcs,
          outname = s_name,
      )
      native.java_test(
          name = name,
          test_class = s_name,
          srcs = srcs + [":" + s_name],
          **kwargs
      )
  
new_contents: # Copyright (C) 2016 The Android Open Source Project
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  # http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  # Skylark rule to generate a Junit4 TestSuite
  # Assumes srcs are all .java Test files
  # Assumes junit4 is already added to deps by the user.
  
  # See https://github.com/bazelbuild/bazel/issues/1017 for background.
  
  _OUTPUT = """import org.junit.runners.Suite;
  import org.junit.runner.RunWith;
  
  @RunWith(Suite.class)
  @Suite.SuiteClasses({%s})
  public class %s {}
  """
  
  _PREFIXES = ("org", "com", "edu")
  
  def _SafeIndex(l, val):
      for i, v in enumerate(l):
          if val == v:
              return i
      return -1
  
  def _AsClassName(fname):
      fname = [x.path for x in fname.files][0]
      toks = fname[:-5].split("/")
      findex = -1
      for s in _PREFIXES:
          findex = _SafeIndex(toks, s)
          if findex != -1:
              break
      if findex == -1:
          fail("%s does not contain any of %s" % (fname, _PREFIXES))
      return ".".join(toks[findex:]) + ".class"
  
  def _impl(ctx):
      classes = ",".join(
          [_AsClassName(x) for x in ctx.attr.srcs],
      )
      ctx.actions.write(output = ctx.outputs.out, content = _OUTPUT % (
          classes,
          ctx.attr.outname,
      ))
  
  _GenSuite = rule(
      attrs = {
          "srcs": attr.label_list(allow_files = True),
          "outname": attr.string(),
      },
      outputs = {"out": "%{name}.java"},
      implementation = _impl,
  )
  
  def junit_tests(name, srcs, **kwargs):
      s_name = name.replace("-", "_") + "TestSuite"
      _GenSuite(
          name = s_name,
          srcs = srcs,
          outname = s_name,
      )
      native.java_test(
          name = name,
          test_class = s_name,
          srcs = srcs + [":" + s_name],
          **kwargs
      )
  
subject: Allow dash in name of junit_tests rule