diff --git a/.git-fixfiles b/.git-fixfiles deleted file mode 100644 index 048906ca68a8d..0000000000000 --- a/.git-fixfiles +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -git update-index --assume-unchanged cpp/iedriver/Generated/atoms.h -exit 0 diff --git a/Rakefile b/Rakefile index d707e5e8d9e4d..b4e4798fc72cd 100644 --- a/Rakefile +++ b/Rakefile @@ -6,6 +6,7 @@ $LOAD_PATH.unshift File.expand_path('.') require 'base64' require 'json' require 'rake' +require 'rbconfig' require 'net/http' require 'net/telnet' require 'stringio' @@ -20,23 +21,8 @@ orig_verbose = verbose verbose(false) # Location of all new (non-CrazyFun) methods -require 'rake_tasks/selenium_rake/browsers' -require 'rake_tasks/selenium_rake/checks' -require 'rake_tasks/selenium_rake/cpp_formatter' -require 'rake_tasks/selenium_rake/ie_generator' -require 'rake_tasks/selenium_rake/java_formatter' -require 'rake_tasks/selenium_rake/type_definitions_generator' - -# Our modifications to the Rake / Bazel libraries require 'rake/task' -require 'rake_tasks/rake/task' -require 'rake_tasks/rake/dsl' -require 'rake_tasks/bazel/task' - -# These are the final items mixed into the global NS -# These need moving into correct namespaces, and not be globally included require 'rake_tasks/bazel' -require 'rake_tasks/python' $DEBUG = orig_verbose != Rake::FileUtilsExt::DEFAULT $DEBUG = true if ENV['debug'] == 'true' @@ -52,14 +38,9 @@ end # If it looks like a bazel target, build it with bazel rule(%r{//.*}) do |task| - task.out = Bazel.execute('build', %w[], task.name) + Bazel.execute('build', %w[], task.name) end -# Spoof tasks to get CI working with bazel -task '//java/test/org/openqa/selenium/environment/webserver:webserver:uber' => [ - '//java/test/org/openqa/selenium/environment:webserver' -] - # use #java_release_targets to access this list JAVA_RELEASE_TARGETS = %w[ //java/src/org/openqa/selenium/chrome:chrome.publish @@ -139,163 +120,7 @@ task :update_manager do |_task, _arguments| @git.add('common/selenium_manager.bzl') end -# Ruby and Rust are automatically updated as part of version bumps in a separate step -desc 'Update dependencies for the release' -task :release_update do |_task, _arguments| - Rake::Task[:update_multitool].invoke - Rake::Task['java:update'].invoke - Rake::Task['node:update'].invoke -end - -desc 'Update multitool binaries to latest releases' -task :update_multitool do |_task, _arguments| - puts 'Updating multitool binary versions' - Bazel.execute('run', [], '//scripts:update_multitool_binaries') - @git.add('multitool.lock.json') -end - -task all: [ - :'selenium-java', - '//java/test/org/openqa/selenium/environment:webserver' -] - -task tests: [ - '//java/test/org/openqa/selenium/htmlunit:htmlunit', - '//java/test/org/openqa/selenium/firefox:test-synthesized', - '//java/test/org/openqa/selenium/ie:ie', - '//java/test/org/openqa/selenium/chrome:chrome', - '//java/test/org/openqa/selenium/edge:edge', - '//java/test/org/openqa/selenium/support:small-tests', - '//java/test/org/openqa/selenium/support:large-tests', - '//java/test/org/openqa/selenium/remote:small-tests', - '//java/test/org/openqa/selenium/remote/server/log:test', - '//java/test/org/openqa/selenium/remote/server:small-tests' -] -task chrome: ['//java/src/org/openqa/selenium/chrome'] -task grid: [:'selenium-server-standalone'] -task ie: ['//java/src/org/openqa/selenium/ie'] -task firefox: ['//java/src/org/openqa/selenium/firefox'] -task remote: %i[remote_server remote_client] -task remote_client: ['//java/src/org/openqa/selenium/remote'] -task remote_server: ['//java/src/org/openqa/selenium/remote/server'] -task safari: ['//java/src/org/openqa/selenium/safari'] -task selenium: ['//java/src/org/openqa/selenium:core'] -task support: ['//java/src/org/openqa/selenium/support'] - -desc 'Build the standalone server' -task 'selenium-server-standalone' => '//java/src/org/openqa/selenium/grid:executable-grid' - -task test_javascript: [ - '//javascript/atoms:test-chrome:run', - '//javascript/webdriver:test-chrome:run', - '//javascript/selenium-atoms:test-chrome:run', - '//javascript/selenium-core:test-chrome:run' -] -task test_chrome: ['//java/test/org/openqa/selenium/chrome:chrome:run'] -task test_edge: ['//java/test/org/openqa/selenium/edge:edge:run'] -task test_chrome_atoms: [ - '//javascript/atoms:test-chrome:run', - '//javascript/chrome-driver:test-chrome:run', - '//javascript/webdriver:test-chrome:run' -] -task test_htmlunit: [ - '//java/test/org/openqa/selenium/htmlunit:htmlunit:run' -] -task test_grid: [ - '//java/test/org/openqa/grid/common:common:run', - '//java/test/org/openqa/grid:grid:run', - '//java/test/org/openqa/grid/e2e:e2e:run', - '//java/test/org/openqa/selenium/remote:remote-driver-grid-tests:run' -] -task test_ie: [ - '//cpp/iedriverserver:win32', - '//cpp/iedriverserver:x64', - '//java/test/org/openqa/selenium/ie:ie:run' -] -task test_jobbie: [:test_ie] -task test_firefox: ['//java/test/org/openqa/selenium/firefox:marionette:run'] -task test_remote_server: [ - '//java/test/org/openqa/selenium/remote/server:small-tests:run', - '//java/test/org/openqa/selenium/remote/server/log:test:run' -] -task test_remote: [ - '//java/test/org/openqa/selenium/json:small-tests:run', - '//java/test/org/openqa/selenium/remote:common-tests:run', - '//java/test/org/openqa/selenium/remote:client-tests:run', - '//java/test/org/openqa/selenium/remote:remote-driver-tests:run', - :test_remote_server -] -task test_safari: ['//java/test/org/openqa/selenium/safari:safari:run'] -task test_support: [ - '//java/test/org/openqa/selenium/support:small-tests:run', - '//java/test/org/openqa/selenium/support:large-tests:run' -] - -task :test_java_webdriver do - if SeleniumRake::Checks.windows? - Rake::Task['test_ie'].invoke - elsif SeleniumRake::Checks.chrome? - Rake::Task['test_chrome'].invoke - elsif SeleniumRake::Checks.edge? - Rake::Task['test_edge'].invoke - else - Rake::Task['test_htmlunit'].invoke - Rake::Task['test_firefox'].invoke - Rake::Task['test_remote_server'].invoke - end -end - -task test_java: [ - '//java/test/org/openqa/selenium/atoms:test:run', - :test_java_small_tests, - :test_support, - :test_java_webdriver, - :test_selenium, - 'test_grid' -] - -task test_java_small_tests: [ - '//java/test/org/openqa/selenium:small-tests:run', - '//java/test/org/openqa/selenium/json:small-tests:run', - '//java/test/org/openqa/selenium/support:small-tests:run', - '//java/test/org/openqa/selenium/remote:common-tests:run', - '//java/test/org/openqa/selenium/remote:client-tests:run', - '//java/test/org/openqa/grid/selenium/node:node:run', - '//java/test/org/openqa/grid/selenium/proxy:proxy:run', - '//java/test/org/openqa/selenium/remote/server:small-tests:run', - '//java/test/org/openqa/selenium/remote/server/log:test:run' -] - -task :test do - if SeleniumRake::Checks.python? - Rake::Task['test_py'].invoke - else - Rake::Task['test_javascript'].invoke - Rake::Task['test_java'].invoke - end -end - -task test_py: [:py_prep_for_install_release, 'py:marionette_test'] -task build: %i[all firefox remote selenium tests] - -desc 'Clean build artifacts.' -task :clean do - rm_rf 'build/' - rm_rf 'java/build/' - rm_rf 'dist/' -end - -# Create a new IEGenerator instance -ie_generator = SeleniumRake::IEGenerator.new - -# Generate a C++ Header file for mapping between magic numbers and #defines -# in the C++ code. -ie_generator.generate_type_mapping( - name: 'ie_result_type_cpp', - src: 'cpp/iedriver/result_types.txt', - type: 'cpp', - out: 'cpp/iedriver/IEReturnTypes.h' -) +task grid: ['java:grid'] desc 'Generate Javadocs' task javadocs: %i[//java/src/org/openqa/selenium/grid:all-javadocs] do @@ -304,7 +129,8 @@ task javadocs: %i[//java/src/org/openqa/selenium/grid:all-javadocs] do out = 'bazel-bin/java/src/org/openqa/selenium/grid/all-javadocs.jar' cmd = %(cd build/docs/api/java && jar xf "../../../../#{out}" 2>&1) - cmd = cmd.tr('/', '\\').tr(':', ';') if SeleniumRake::Checks.windows? + windows = RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw32/ + cmd = cmd.tr('/', '\\').tr(':', ';') if windows raise 'could not unpack javadocs' unless system(cmd) File.open('build/docs/api/java/stylesheet.css', 'a') do |file| @@ -325,11 +151,19 @@ task javadocs: %i[//java/src/org/openqa/selenium/grid:all-javadocs] do end end -file 'cpp/iedriver/sizzle.h' => ['//third_party/js/sizzle:sizzle:header'] do - cp 'build/third_party/js/sizzle/sizzle.h', 'cpp/iedriver/sizzle.h' +desc 'Update dependencies for the release' +task :release_update do |_task, _arguments| + Rake::Task[:update_multitool].invoke + Rake::Task['java:update'].invoke + Rake::Task['node:update'].invoke end -task sizzle_header: ['cpp/iedriver/sizzle.h'] +desc 'Update multitool binaries to latest releases' +task :update_multitool do |_task, _arguments| + puts 'Updating multitool binary versions' + Bazel.execute('run', [], '//scripts:update_multitool_binaries') + @git.add('multitool.lock.json') +end task ios_driver: [ '//javascript/atoms/fragments:get_visible_text:ios', @@ -513,56 +347,12 @@ task :authors do @git.add('AUTHORS') end -namespace :side do - task atoms: [ - '//javascript/atoms/fragments:find-element' - ] do - # TODO: move directly to IDE's directory once the repositories are merged - mkdir_p 'build/javascript/atoms' - - atom = 'bazel-bin/javascript/atoms/fragments/find-element.js' - name = File.basename(atom) - - puts "Generating #{atom} as #{name}" - File.open(File.join(baseDir, name), 'w') do |f| - f << "// GENERATED CODE - DO NOT EDIT\n" - f << 'module.exports = ' - f << File.read(atom).strip - f << ";\n" - end - end -end - def node_version File.foreach('javascript/selenium-webdriver/package.json') do |line| return line.split(':').last.strip.tr('",', '') if line.include?('version') end end namespace :node do - atom_list = %w[ - //javascript/atoms/fragments:find-elements - //javascript/atoms/fragments:is-displayed - //javascript/webdriver/atoms:get-attribute - ] - - task atoms: atom_list do - base_dir = 'javascript/selenium-webdriver/lib/atoms' - mkdir_p base_dir - - ['bazel-bin/javascript/atoms/fragments/is-displayed.js', - 'bazel-bin/javascript/webdriver/atoms/get-attribute.js', - 'bazel-bin/javascript/atoms/fragments/find-elements.js'].each do |atom| - name = File.basename(atom) - puts "Generating #{atom} as #{name}" - File.open(File.join(base_dir, name), 'w') do |f| - f << "// GENERATED CODE - DO NOT EDIT\n" - f << 'module.exports = ' - f << File.read(atom).strip - f << ";\n" - end - end - end - desc 'Build Node npm package' task :build do |_task, arguments| args = arguments.to_a.compact @@ -830,25 +620,6 @@ namespace :rb do Bazel.execute('build', args, '//rb:selenium-devtools') if devtools || !webdriver end - task :atoms do - base_dir = 'rb/lib/selenium/webdriver/atoms' - mkdir_p base_dir - - { - '//javascript/atoms/fragments:find-elements': 'findElements.js', - '//javascript/atoms/fragments:is-displayed': 'isDisplayed.js', - '//javascript/webdriver/atoms:get-attribute': 'getAttribute.js' - }.each do |target, name| - puts "Generating #{target} as #{name}" - - atom = Bazel.execute('build', [], target.to_s) - - File.open(File.join(base_dir, name), 'w') do |f| - f << File.read(atom).strip - end - end - end - desc 'Update generated Ruby files for local development' task :local_dev do puts 'installing ruby, this may take a minute' @@ -1522,12 +1293,6 @@ namespace :all do end end -at_exit do - system 'sh', '.git-fixfiles' if File.exist?('.git') && SeleniumRake::Checks.linux? -rescue StandardError => e - puts "Do not exit execution when this errors... #{e.inspect}" -end - def updated_version(current, desired = nil, nightly = nil) if !desired.nil? && desired != 'nightly' # If desired is present, return full 3 digit version diff --git a/cpp/iedriverserver/build.desc b/cpp/iedriverserver/build.desc deleted file mode 100644 index 99b04639074ae..0000000000000 --- a/cpp/iedriverserver/build.desc +++ /dev/null @@ -1,29 +0,0 @@ -visualc_release(name = "win32", - deps = [ - "//javascript/ie-driver:atoms", - ":sizzle" - ], - platform = "Win32", - project = "IEDriverServer.vcxproj", - desc = "InternetExplorerDriver standalone server for 32-bit IE", - out = "Win32/Release/IEDriverServer.exe" -) - -visualc_release(name = "x64", - deps = [ - "//javascript/ie-driver:atoms", - ":sizzle" - ], - platform = "x64", - project = "IEDriverServer.vcxproj", - desc = "InternetExplorerDriver standalone server for 64-bit IE", - out = "x64/Release/IEDriverServer.exe" -) - -rake_task(name = "sizzle", - task_name = "sizzle_header", - out = "cpp/iedriver/Generated/sizzle.h") - -rake_task(name = "ie_result_type_cpp", - task_name = "ie_result_type_cpp", - out = "cpp/iedriver/Generated/IEReturnTypes.h") diff --git a/rake_tasks/bazel.rb b/rake_tasks/bazel.rb index b2d4a3617bd80..a5a6f3e1d9c15 100644 --- a/rake_tasks/bazel.rb +++ b/rake_tasks/bazel.rb @@ -3,10 +3,14 @@ require 'English' require 'open3' require 'rake' +require 'rbconfig' require 'io/wait' -require_relative 'selenium_rake/checks' module Bazel + def self.windows? + (RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw32/) != nil + end + def self.execute(kind, args, target, &block) verbose = Rake::FileUtilsExt.verbose_flag @@ -19,7 +23,7 @@ def self.execute(kind, args, target, &block) cmd_out = '' cmd_exit_code = 0 - if SeleniumRake::Checks.windows? + if windows? cmd += ['2>&1'] cmd_line = cmd.join(' ') cmd_out = `#{cmd_line}`.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '') diff --git a/rake_tasks/bazel/task.rb b/rake_tasks/bazel/task.rb deleted file mode 100644 index 8a3fde055add6..0000000000000 --- a/rake_tasks/bazel/task.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Bazel - class Task < Rake::Task - def needed? - true - end - - def invoke(*_args, &block) - self.out = Bazel::execute("build", name, &block) - - block&.call(cmd_out) - end - end -end diff --git a/rake_tasks/python.rb b/rake_tasks/python.rb deleted file mode 100644 index d3bc3c403d883..0000000000000 --- a/rake_tasks/python.rb +++ /dev/null @@ -1,20 +0,0 @@ - -def py_exe - if ENV.key?('python') - ENV['python'] - else - SeleniumRake::Checks.windows? ? 'C:\\Python27\\python.exe' : '/usr/bin/python' - end -end - -def tox_test(driver) - python_version = ENV['pyversion'] || 'py27' - tox_args = ['tox', '-c', 'py/tox.ini', '-r'] - tox_args += ['-e', "#{python_version}-#{driver}".downcase] - tox_args += ['--'] - tox_args += ['-k=' + ENV['method']] if ENV['method'] - tox_args += ['--tb=' + ENV['traceback']] if ENV['traceback'] - tox_args += ["--junitxml=build/test_logs/python-#{Time.now.to_i}.xml"] - mkdir_p 'build/test_logs' - sh tox_args.join(' '), verbose: true -end diff --git a/rake_tasks/rake/dsl.rb b/rake_tasks/rake/dsl.rb deleted file mode 100644 index b35d19487bdbb..0000000000000 --- a/rake_tasks/rake/dsl.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Rake - module DSL - def bazel(*args, &block) - Bazel::Task.define_task(*args, &block) - end - end -end diff --git a/rake_tasks/rake/task.rb b/rake_tasks/rake/task.rb deleted file mode 100644 index 2fea8abed3262..0000000000000 --- a/rake_tasks/rake/task.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Rake - class Task - attr_accessor :deps - - def out - if @debug - puts "We are reading the @out value currently!!! It is currently set to #{@out}" - puts self.inspect - end - @out - end - - def out=(value) - if @debug - puts "We are WRITING the @out value currently!!! WE ARE WRITING IT TO #{value}" - puts self.inspect - end - @out = value - end - end -end diff --git a/rake_tasks/selenium_rake/browsers.rb b/rake_tasks/selenium_rake/browsers.rb deleted file mode 100644 index dca18f5b4191a..0000000000000 --- a/rake_tasks/selenium_rake/browsers.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module SeleniumRake - class Browsers - BROWSERS = { - 'ff' => { - driver: 'Marionette', - }, - 'marionette' => { - driver: 'Marionette', - }, - 'ie' => { - driver: 'Ie', - }, - 'edge' => { - driver: 'Edge', - }, - 'chrome' => { - driver: 'Chrome', - }, - 'remote_firefox' => { - driver: 'Remote', - deps: [ - :remote_client, - :'selenium-server-standalone', - '//java/test/org/openqa/selenium/remote/server/auth:server' - ] - }, - 'safari' => { - driver: 'Safari', - } - }.freeze - end -end diff --git a/rake_tasks/selenium_rake/checks.rb b/rake_tasks/selenium_rake/checks.rb deleted file mode 100644 index e92a60119b15a..0000000000000 --- a/rake_tasks/selenium_rake/checks.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -require 'rbconfig' - -module SeleniumRake - class Checks - class << self - PRESENT_CACHE = {} - - def windows? - (RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw32/) != nil - end - - def mac? - (RbConfig::CONFIG['host_os'] =~ /darwin|mac os/) != nil - end - - def linux? - !windows? && !mac? - end - - def dir_separator - File::ALT_SEPARATOR || File::SEPARATOR - end - - def path_for(path) - windows? ? path.gsub('/', dir_separator) : path - end - - def classpath_separator? - if cygwin? - ';' - else - File::PATH_SEPARATOR - end - end - - def chrome? - present?('chromedriver') || present?('chromedriver.exe') - end - - def edge? - present?('msedgedriver') || present?('msedgedriver.exe') - end - - def opera? - present?('opera') || present?('Opera') - end - - def python? - present?('python') || present?('python.exe') - end - - private - - def cygwin? - RUBY_PLATFORM.downcase.include?('cygwin') - end - - def present?(arg) - return PRESENT_CACHE[arg] if PRESENT_CACHE.key?(arg) - return PRESENT_CACHE[arg] = true if exist_on_non_mac?(arg) - return PRESENT_CACHE[arg] = exist_on_mac?(arg) if mac? - PRESENT_CACHE[arg] = false - end - - def exist_on_non_mac?(arg) - prefixes.any? do |prefix| - File.exist?("#{prefix}#{File::SEPARATOR}#{arg}") - end - end - - def exist_on_mac?(arg) - File.exist?("/Applications/#{arg}.app") - end - - def prefixes - ENV['PATH'].split(File::PATH_SEPARATOR) - end - end - end -end diff --git a/rake_tasks/selenium_rake/cpp_formatter.rb b/rake_tasks/selenium_rake/cpp_formatter.rb deleted file mode 100644 index 5a93daa5c6d01..0000000000000 --- a/rake_tasks/selenium_rake/cpp_formatter.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -# This file auto-generates code for the IE driver. To make different language -# bindings easier to maintain, it generates code for mapping numeric return -# type identifiers (returned from wdGetScriptResultType) to a meaningful -# string identifier. -module SeleniumRake - class CppFormatter - def generate_file_header - <<~HEREDOC - /* AUTO GENERATED - Do not edit by hand. */ - /* See rake-tasks/selenium_rake/cpp_formatter.rb instead. */ - #ifndef __IE_RETURN_TYPES_H_ - #define __IE_RETURN_TYPES_H_ - HEREDOC - end - - def generate_file_footer - "#endif\n" - end - - def generate_line_string(numeric_type, type_desc) - "#define TYPE_#{type_desc} (#{numeric_type})\n" - end - end -end diff --git a/rake_tasks/selenium_rake/ie_generator.rb b/rake_tasks/selenium_rake/ie_generator.rb deleted file mode 100644 index fcffebb564e2f..0000000000000 --- a/rake_tasks/selenium_rake/ie_generator.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -# This file auto-generates code for the IE driver. To make different language -# bindings easier to maintain, it generates code for mapping numeric return -# type identifiers (returned from wdGetScriptResultType) to a meaningful -# string identifier. -module SeleniumRake - class IEGenerator - include Rake::DSL - - def generate_type_mapping(args) - types_mapping_file = args[:src] - generated_file = args[:out].to_s - - file generated_file => args[:src] do - generator = TypeDefinitionsGenerator.new types_mapping_file - method_name = "generate_#{args[:type]}_definitions" - if generator.respond_to?(method_name) - generator.send(method_name, generated_file) - else - puts "Cannot generate definitions for #{args[:type]}" - end - end - - task args[:name].to_s => generated_file - end - end -end diff --git a/rake_tasks/selenium_rake/java_formatter.rb b/rake_tasks/selenium_rake/java_formatter.rb deleted file mode 100644 index bb2507307a3fa..0000000000000 --- a/rake_tasks/selenium_rake/java_formatter.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -# This file auto-generates code for the IE driver. To make different language -# bindings easier to maintain, it generates code for mapping numeric return -# type identifiers (returned from wdGetScriptResultType) to a meaningful -# string identifier. -# -module SeleniumRake - class JavaFormatter - def generate_file_header - <<~HEREDOC - /* AUTO GENERATED - Do not edit by hand. */ - /* See rake-tasks/selenium_rake/java_formatter.rb instead. */ - package org.openqa.selenium.ie; - public class IeReturnTypes { - HEREDOC - end - - def generate_file_footer - "}\n" - end - - def generate_line_string(numeric_type, type_desc) - " public static final int #{type_desc} = #{numeric_type};\n" - end - end -end diff --git a/rake_tasks/selenium_rake/type_definitions_generator.rb b/rake_tasks/selenium_rake/type_definitions_generator.rb deleted file mode 100644 index c551666c80e25..0000000000000 --- a/rake_tasks/selenium_rake/type_definitions_generator.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -# This file auto-generates code for the IE driver. To make different language -# bindings easier to maintain, it generates code for mapping numeric return -# type identifiers (returned from wdGetScriptResultType) to a meaningful -# string identifier. -module SeleniumRake - class TypeDefinitionsGenerator - def initialize(type_definitions_file) - file = File.new(type_definitions_file, 'r') - @type_to_name_map = {} - while (line = file.gets) - (val, name) = line.split - @type_to_name_map[val.to_i] = name - end - end - - def generate_defs_file(dest_file, formatter) - file = File.new(dest_file, 'w') - file.puts formatter.generate_file_header - sorted_keys = @type_to_name_map.keys.sort - sorted_keys.each do |num_type| - str_type = @type_to_name_map[num_type] - file.puts(formatter.generate_line_string(num_type, str_type)) - end - file.puts formatter.generate_file_footer - file.close - end - - def generate_java_definitions(dest_file) - generate_defs_file(dest_file, JavaFormatter.new) - end - - def generate_cpp_definitions(dest_file) - generate_defs_file(dest_file, CppFormatter.new) - end - end -end