#!/usr/bin/env python
#
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Enables dalvik vm asserts in the android device."""

import argparse
import sys

import devil_chromium
from devil.android import device_blacklist
from devil.android import device_utils


def main():
  parser = argparse.ArgumentParser()

  parser.add_argument('--blacklist-file', help='Device blacklist JSON file.')

  set_asserts_group = parser.add_mutually_exclusive_group(required=True)
  set_asserts_group.add_argument(
      '--enable_asserts', dest='set_asserts', action='store_true',
      help='Sets the dalvik.vm.enableassertions property to "all"')
  set_asserts_group.add_argument(
      '--disable_asserts', dest='set_asserts', action='store_false',
      help='Removes the dalvik.vm.enableassertions property')

  args = parser.parse_args()

  devil_chromium.Initialize()

  blacklist = (device_blacklist.Blacklist(args.blacklist_file)
               if args.blacklist_file
               else None)

  # TODO(jbudorick): Accept optional serial number and run only for the
  # specified device when present.
  devices = device_utils.DeviceUtils.parallel(
      device_utils.DeviceUtils.HealthyDevices(blacklist))

  def set_java_asserts_and_restart(device):
    if device.SetJavaAsserts(args.set_asserts):
      device.RunShellCommand('stop')
      device.RunShellCommand('start')

  devices.pMap(set_java_asserts_and_restart)
  return 0


if __name__ == '__main__':
  sys.exit(main())
