18a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle#!/usr/bin/env ruby
28a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle#
32cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie# This script can be used to regenerate sequential resource ids when the
42cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie# R.java file is modified in the src/test/resources/res folder.
52cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie#
62cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie# Note: this script does *NOT* generate resource ids that are consistent
72cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie# with the Android aapt tool. This script will likely be removed at some
82cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie# near point in the future and replaced by something that invokes aapt
92cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie# directly.
102cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie
112cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael HoisieGIT_ROOT = `git rev-parse --show-toplevel`.chomp
122cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael HoisieSTART = 0x7f000000
132cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael HoisieINCR = 0x10000
148a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle
152cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisiepath_to_r = File.join(GIT_ROOT, "robolectric/src/test/java/org/robolectric/R.java")
168a347eb9bba2113cadc381d364c1018deb974a19Christian Ihleif path_to_r =~ /^\/path\/to/
178a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle  raise "please change the path to this file!"
188a347eb9bba2113cadc381d364c1018deb974a19Christian Ihleelse
198a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle  original_contents = File.read(path_to_r)
202cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie  num_classes = 0
212cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie  x = START
228a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle  new_contents = original_contents.gsub(/class|0x[0-9a-fA-F]+;/) do |match|
238a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle    if match == "class"
242cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie      x = START + INCR * num_classes
252cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie      num_classes += 1
268a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle      "class"
278a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle    else
282cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie      val = "0x#{"%x"%x};"
292cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie      x += 1
302cfb0fd1fc07a3653f938488b3a873df15fbeb16Michael Hoisie      val
318a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle    end
328a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle  end
338a347eb9bba2113cadc381d364c1018deb974a19Christian Ihle  File.open(path_to_r, "w") { |f| f << new_contents }
348a347eb9bba2113cadc381d364c1018deb974a19Christian Ihleend
35