| $LOAD_PATH.unshift File.expand_path(".") | |
| require 'rake' | |
| require 'rake-tasks/files' | |
| require 'net/telnet' | |
| include Rake::DSL if defined?(Rake::DSL) | |
| Rake.application.instance_variable_set "@name", "go" | |
| orig_verbose = verbose | |
| verbose(false) | |
| # The CrazyFun build grammar. There's no magic here, just ruby | |
| require 'rake-tasks/crazy_fun' | |
| require 'rake-tasks/crazy_fun/mappings/android' | |
| require 'rake-tasks/crazy_fun/mappings/export' | |
| require 'rake-tasks/crazy_fun/mappings/folder' | |
| require 'rake-tasks/crazy_fun/mappings/gcc' | |
| require 'rake-tasks/crazy_fun/mappings/java' | |
| require 'rake-tasks/crazy_fun/mappings/javascript' | |
| require 'rake-tasks/crazy_fun/mappings/mozilla' | |
| require 'rake-tasks/crazy_fun/mappings/python' | |
| require 'rake-tasks/crazy_fun/mappings/rake' | |
| require 'rake-tasks/crazy_fun/mappings/rename' | |
| require 'rake-tasks/crazy_fun/mappings/ruby' | |
| require 'rake-tasks/crazy_fun/mappings/visualstudio' | |
| # The original build rules | |
| require 'rake-tasks/task-gen' | |
| require 'rake-tasks/checks' | |
| require 'rake-tasks/dotnet' | |
| require 'rake-tasks/zip' | |
| require 'rake-tasks/c' | |
| require 'rake-tasks/java' | |
| require 'rake-tasks/iphone' | |
| require 'rake-tasks/selenium' | |
| require 'rake-tasks/se-ide' | |
| require 'rake-tasks/ie_code_generator' | |
| require 'rake-tasks/gecko_sdks' | |
| $DEBUG = orig_verbose != :default ? true : false | |
| if (ENV['debug'] == 'true') | |
| $DEBUG = true | |
| end | |
| verbose($DEBUG) | |
| def version | |
| "2.28.0" | |
| end | |
| ide_version = "1.10.0" | |
| # The build system used by webdriver is layered on top of rake, and we call it | |
| # "crazy fun" for no readily apparent reason. | |
| # First off, create a new CrazyFun object. | |
| crazy_fun = CrazyFun.new | |
| # Secondly, we add the handlers, which are responsible for turning a build | |
| # rule into a (series of) rake tasks. For example if we're looking at a file | |
| # in subdirectory "subdir" contains the line: | |
| # | |
| # java_library(:name => "example", :srcs => ["foo.java"]) | |
| # | |
| # we would generate a rake target of "//subdir:example" which would generate | |
| # a Java JAR at "build/subdir/example.jar". | |
| # | |
| # If crazy fun doesn't know how to handle a particular output type ("java_library" | |
| # in the example above) then it will throw an exception, stopping the build | |
| AndroidMappings.new.add_all(crazy_fun) | |
| ExportMappings.new.add_all(crazy_fun) | |
| FolderMappings.new.add_all(crazy_fun) | |
| GccMappings.new.add_all(crazy_fun) | |
| JavaMappings.new.add_all(crazy_fun) | |
| JavascriptMappings.new.add_all(crazy_fun) | |
| MozillaMappings.new.add_all(crazy_fun) | |
| PythonMappings.new.add_all(crazy_fun) | |
| RakeMappings.new.add_all(crazy_fun) | |
| RenameMappings.new.add_all(crazy_fun) | |
| RubyMappings.new.add_all(crazy_fun) | |
| VisualStudioMappings.new.add_all(crazy_fun) | |
| # Not every platform supports building every binary needed, so we sometimes | |
| # need to fall back to prebuilt binaries. The prebuilt binaries are stored in | |
| # a directory structure identical to that used in the "build" folder, but | |
| # rooted at one of the following locations: | |
| ["android/prebuilt", "cpp/prebuilt", "ide/main/prebuilt", "javascript/firefox-driver/prebuilt"].each do |pre| | |
| crazy_fun.prebuilt_roots << pre | |
| end | |
| # Finally, find every file named "build.desc" in the project, and generate | |
| # rake tasks from them. These tasks are normal rake tasks, and can be invoked | |
| # from rake. | |
| crazy_fun.create_tasks(Dir["**/build.desc"]) | |
| # Notice that because we're using rake, anything you can do in a normal rake | |
| # build can also be done here. For example, here we set the default task | |
| task :default => [:test] | |
| task :all => [:'selenium-java', :'android'] | |
| task :all_zip => [:'selenium-java_zip'] | |
| task :chrome => [ "//java/client/src/org/openqa/selenium/chrome" ] | |
| task :common_core => [ "//common:core" ] | |
| task :grid => [ "//java/server/src/org/openqa/grid/selenium" ] | |
| task :htmlunit => [ "//java/client/src/org/openqa/selenium/htmlunit" ] | |
| task :ie => [ "//java/client/src/org/openqa/selenium/ie" ] | |
| task :firefox => [ "//java/client/src/org/openqa/selenium/firefox" ] | |
| task :'debug-server' => "//java/client/test/org/openqa/selenium/environment/webserver:webserver:run" | |
| task :remote => [:remote_common, :remote_server, :remote_client] | |
| task :remote_common => ["//java/client/src/org/openqa/selenium/remote:common"] | |
| task :remote_client => ["//java/client/src/org/openqa/selenium/remote"] | |
| task :remote_server => ["//java/server/src/org/openqa/selenium/remote/server"] | |
| task :safari => [ | |
| "//javascript/safari-driver:SafariDriver", | |
| "//java/client/src/org/openqa/selenium/safari", | |
| ] | |
| task :server_lite => ["//java/server/src/org/openqa/selenium/server:server_lite"] | |
| task :selenium => [ "//java/client/src/org/openqa/selenium" ] | |
| task :support => [ | |
| "//java/client/src/org/openqa/selenium/lift", | |
| "//java/client/src/org/openqa/selenium/support", | |
| ] | |
| task :iphone_client => ['//java/client/src/org/openqa/selenium/iphone'] | |
| task :iphone => [:iphone_server, :iphone_client] | |
| desc 'Build the standalone server' | |
| task 'selenium-server-standalone' => '//java/server/src/org/openqa/grid/selenium:selenium:uber' | |
| task :ide => [ "//ide:selenium-ide-multi" ] | |
| task :ide_proxy_setup => [ "//javascript/selenium-atoms", "se_ide:setup_proxy" ] | |
| task :ide_proxy_remove => [ "se_ide:remove_proxy" ] | |
| task :ide_bamboo => ["se_ide:assemble_ide_in_bamboo"] | |
| task :test_javascript => [ | |
| '//javascript/atoms:test:run', | |
| '//javascript/webdriver:test:run', | |
| '//javascript/selenium-atoms:test:run', | |
| '//javascript/selenium-core:test:run'] | |
| task :test_android => ["//java/client/test/org/openqa/selenium/android:android-test:run"] | |
| task :test_chrome => [ "//java/client/test/org/openqa/selenium/chrome:test:run" ] | |
| task :test_chrome_atoms => [ | |
| '//javascript/atoms:test_chrome:run', | |
| '//javascript/chrome-driver:test:run', | |
| '//javascript/webdriver:test_chrome:run'] | |
| task :test_htmlunit => [ | |
| "//java/client/test/org/openqa/selenium/htmlunit:test_basic:run", | |
| "//java/client/test/org/openqa/selenium/htmlunit:test_js:run" | |
| ] | |
| task :test_grid => [ | |
| "//java/server/test/org/openqa/grid/common:test:run", | |
| "//java/server/test/org/openqa/grid:test:run", | |
| "//java/server/test/org/openqa/grid/e2e:test:run" | |
| ] | |
| task :test_ie => [ "//java/client/test/org/openqa/selenium/ie:test:run" ] | |
| task :test_jobbie => [ :test_ie ] | |
| task :test_firefox => [ "//java/client/test/org/openqa/selenium/firefox:test_synthesized:run" ] | |
| if (!mac?) | |
| task :test_firefox => [ "//java/client/test/org/openqa/selenium/firefox:test_native:run" ] | |
| end | |
| task :test_opera => [ "//java/client/test/org/openqa/selenium/opera:test:run" ] | |
| task :test_opera_mobile => [ "//java/client/test/org/openqa/selenium/opera/mobile:test:run" ] | |
| task :test_remote_server => [ '//java/server/test/org/openqa/selenium/remote/server:test:run' ] | |
| task :test_remote => [ | |
| '//java/client/test/org/openqa/selenium/remote:common-tests:run', | |
| '//java/client/test/org/openqa/selenium/remote:client-tests:run', | |
| :test_remote_server | |
| ] | |
| task :test_safari => [ "//java/client/test/org/openqa/selenium/safari:test:run" ] | |
| task :test_support => [ | |
| "//java/client/test/org/openqa/selenium/lift:test:run", | |
| "//java/client/test/org/openqa/selenium/support:SmallTests:run", | |
| "//java/client/test/org/openqa/selenium/support:LargeTests:run" | |
| ] | |
| task :test_iphone => [:test_iphone_server, '//java/client/test/org/openqa/selenium/iphone:test:run'] | |
| task :android => [:android_client, :android_server] | |
| task :android_client => ['//java/client/src/org/openqa/selenium/android'] | |
| task :android_server => ['//android:android-server'] | |
| # TODO(simon): test-core should go first, but it's changing the least for now. | |
| task :test_selenium => [ :'test-rc', :'test-v1-emulation', :'test-selenium-backed-webdriver', :'test-core'] | |
| task :'test-selenium-backed-webdriver' => [ | |
| '//javascript/selenium-atoms:test:run', | |
| '//java/client/test/org/openqa/selenium/v1:selenium-backed-webdriver-test:run' | |
| ] | |
| task :'test-v1-emulation' => [ '//java/client/test/com/thoughtworks/selenium:firefox-emulation-test:run' ] | |
| task :'test-rc' => ['//java/client/test/org/openqa/selenium:RcBrowserLauncherTests:run', | |
| '//java/server/test/org/openqa/selenium/server:RcServerUnitTests:run', | |
| '//java/server/test/org/openqa/selenium/server:RcServerLargeTests:run', | |
| '//java/client/test/com/thoughtworks/selenium:firefox-rc-test:run', | |
| '//java/client/test/com/thoughtworks/selenium:firefox-proxy-rc-test:run', | |
| '//java/client/test/com/thoughtworks/selenium:firefox-singlewindow-rc-test:run'] | |
| task :'test-core' => [:'test-core-firefox'] | |
| if (windows?) | |
| task :'test-v1-emulation' => ['//java/client/test/com/thoughtworks/selenium:ie-emulation-test:run'] | |
| task :'test-rc' => ['//java/client/test/com/thoughtworks/selenium:ie-rc-test:run', | |
| '//java/client/test/com/thoughtworks/selenium:ie-proxy-rc-test:run', | |
| '//java/client/test/com/thoughtworks/selenium:ie-singlewindow-rc-test:run'] | |
| task :'test-core' => [:'test-core-ie'] | |
| # TODO(santi): why are these disabled? | |
| #elsif (mac?) | |
| # task :'test-rc' => ['//java/client/test/com/thoughtworks/selenium:safari-rc-test:run', | |
| # '//java/client/test/com/thoughtworks/selenium:safari-proxy-rc-test:run'] | |
| # task :'test-core' => [:'test-core-safari'] | |
| end | |
| task :test_java_webdriver => [ | |
| :test_htmlunit, | |
| :test_firefox, | |
| :test_remote_server, | |
| ] | |
| if (windows?) | |
| task :test_java_webdriver => [:test_ie] | |
| end | |
| if (present?("chromedriver")) | |
| task :test_java_webdriver => [:test_chrome] | |
| end | |
| if (opera?) | |
| task :test_java_webdriver => [:test_opera] | |
| end | |
| task :test_java => [ | |
| "//java/client/test/org/openqa/selenium/atoms:test:run", | |
| "//java/client/test/org/openqa/selenium:SmallTests:run", | |
| :test_support, | |
| :test_java_webdriver, | |
| :test_selenium, | |
| "test_grid", | |
| # Android should be installed and the tests should be ran | |
| # before commits. | |
| :test_android | |
| ] | |
| task :test_rb => [ | |
| "//rb:unit-test", | |
| "//rb:rc-client-unit-test", | |
| "//rb:firefox-test", | |
| "//rb:remote-test", | |
| "//rb:rc-client-integration-test", | |
| ("//rb:ie-test" if windows?), | |
| "//rb:chrome-test", | |
| "//rb:safari-test", | |
| "//rb:phantomjs-test" | |
| ].compact | |
| task :test_py => [ :py_prep_for_install_release, "//py:firefox_test:run" ] | |
| task :test_dotnet => [ | |
| "//dotnet/test:firefox:run" | |
| ] | |
| task :test => [ :test_javascript, :test_java, :test_rb ] | |
| if (msbuild_installed?) | |
| task :test => [ :test_dotnet ] | |
| end | |
| if (python?) | |
| task :test => [ :test_py ] | |
| end | |
| task :build => [:all, :iphone, :remote, :selenium] | |
| desc 'Clean build artifacts.' | |
| task :clean do | |
| rm_rf 'build/' | |
| rm_rf 'iphone/build/' | |
| rm_rf 'iphone/src/objc/atoms.h' | |
| rm_rf 'android/bin/' | |
| rm_rf 'android/build/' | |
| rm_rf 'android/libs/' | |
| rm_rf 'android/client/bin/' | |
| rm_rf 'java/client/build/' | |
| Android::Clean.new() | |
| end | |
| task :dotnet => [ "//dotnet", "//dotnet:support", "//dotnet:core", "//dotnet:webdriverbackedselenium" ] | |
| # Generate a C++ Header file for mapping between magic numbers and #defines | |
| # in the C++ code. | |
| ie_generate_type_mapping(:name => "ie_result_type_cpp", | |
| :src => "cpp/IEDriver/result_types.txt", | |
| :type => "cpp", | |
| :out => "cpp/IEDriver/IEReturnTypes.h") | |
| # Generate a Java class for mapping between magic numbers and Java static | |
| # class members describing them. | |
| ie_generate_type_mapping(:name => "ie_result_type_java", | |
| :src => "cpp/IEDriver/result_types.txt", | |
| :type => "java", | |
| :out => "java/client/src/org/openqa/selenium/ie/IeReturnTypes.java") | |
| GeckoSDKs.new do |sdks| | |
| sdks.add 'third_party/gecko-1.9.2/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/3.6.23/sdk/xulrunner-3.6.23.en-US.linux-i686.sdk.tar.bz2', | |
| 'f13055d2b793b6ab32797cc292f18de4' | |
| sdks.add 'third_party/gecko-2/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/2.0/sdk/xulrunner-2.0.en-US.linux-i686.sdk.tar.bz2', | |
| '1ec6039ee99596551845f27d4bc83436' | |
| sdks.add 'third_party/gecko-2/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/2.0/sdk/xulrunner-2.0.en-US.linux-x86_64.sdk.tar.bz2', | |
| '101eb57d3f76f77e9c94d3cb25a8d56c' | |
| sdks.add 'third_party/gecko-2/mac', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/2.0/sdk/xulrunner-2.0.en-US.mac-x86_64.sdk.tar.bz2', | |
| 'ac2ddb114107680fe75ee712cddf1ab4' | |
| sdks.add 'third_party/gecko-2/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/2.0/sdk/xulrunner-2.0.en-US.win32.sdk.zip', | |
| '5cfa95a2d46334ce6283a772eff19382' | |
| sdks.add 'third_party/gecko-10/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/10.0/sdk/xulrunner-10.0.en-US.linux-i686.sdk.tar.bz2', | |
| '9ce89327cab356bc133675e5307cbdd3' | |
| sdks.add 'third_party/gecko-10/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/10.0/sdk/xulrunner-10.0.en-US.linux-x86_64.sdk.tar.bz2', | |
| '251cd1529050aa656a633a26883f12ac' | |
| sdks.add 'third_party/gecko-10/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/10.0/sdk/xulrunner-10.0.en-US.win32.sdk.zip', | |
| 'c160fb382345282603ded4bf87abff45' | |
| sdks.add 'third_party/gecko-11/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/11.0/sdk/xulrunner-11.0.en-US.linux-i686.sdk.tar.bz2', | |
| '917b8cba75988a3943773519d2b74228' | |
| sdks.add 'third_party/gecko-11/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/11.0/sdk/xulrunner-11.0.en-US.linux-x86_64.sdk.tar.bz2', | |
| 'f5e84aa2ec8a1ce13ed50ad2c311ae9e' | |
| sdks.add 'third_party/gecko-11/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/11.0/sdk/xulrunner-11.0.en-US.win32.sdk.zip', | |
| '783dcb0b01a849836c9e3627a87d2dc4' | |
| sdks.add 'third_party/gecko-12/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/12.0/sdk/xulrunner-12.0.en-US.linux-i686.sdk.tar.bz2', | |
| '7a355c79aeffd975e9c4a4da407e0b78' | |
| sdks.add 'third_party/gecko-12/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/12.0/sdk/xulrunner-12.0.en-US.linux-x86_64.sdk.tar.bz2', | |
| 'e9cfc4708a551235e3223cf5b3cc771e' | |
| sdks.add 'third_party/gecko-12/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/12.0/sdk/xulrunner-12.0.en-US.win32.sdk.zip', | |
| '18daaa5a06bea14f811351bbb0723092' | |
| sdks.add 'third_party/gecko-13/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/13.0/sdk/xulrunner-13.0.en-US.linux-i686.sdk.tar.bz2', | |
| 'da05198bf5d7452f7ac3c43d894a1779' | |
| sdks.add 'third_party/gecko-13/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/13.0/sdk/xulrunner-13.0.en-US.linux-x86_64.sdk.tar.bz2', | |
| '68886fdc8ea8361e6243d8318d7210b8' | |
| sdks.add 'third_party/gecko-13/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/13.0/sdk/xulrunner-13.0.en-US.win32.sdk.zip', | |
| '8d613999d51be945c7498c9d63946dcc' | |
| sdks.add 'third_party/gecko-14/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/14.0.1/sdk/xulrunner-14.0.1.en-US.linux-i686.sdk.tar.bz2', | |
| '8af526ccdd0cf1c41fc825d19218fac8' | |
| sdks.add 'third_party/gecko-14/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/14.0.1/sdk/xulrunner-14.0.1.en-US.linux-x86_64.sdk.tar.bz2', | |
| '246ec6eff6b2ce90a14bf29f3a2f529d' | |
| sdks.add 'third_party/gecko-14/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/14.0.1/sdk/xulrunner-14.0.1.en-US.win32.sdk.zip', | |
| 'ace1b22a31a3566f92755c5464868cb3' | |
| sdks.add 'third_party/gecko-15/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/15.0.1/sdk/xulrunner-15.0.1.en-US.linux-i686.sdk.tar.bz2', | |
| '4c72e60b1af10a5c46a4fae4082d3358' | |
| sdks.add 'third_party/gecko-15/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/15.0.1/sdk/xulrunner-15.0.1.en-US.linux-x86_64.sdk.tar.bz2', | |
| '28bb789e3c49e1510fc085b07e87deae' | |
| sdks.add 'third_party/gecko-15/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/15.0.1/sdk/xulrunner-15.0.1.en-US.win32.sdk.zip', | |
| '1273ae07fe999c6f4cd3768fb100f741' | |
| sdks.add 'third_party/gecko-16/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/16.0.2/sdk/xulrunner-16.0.2.en-US.linux-i686.sdk.tar.bz2', | |
| '600018d47b803d36abdbb2c12d0aa0d5' | |
| sdks.add 'third_party/gecko-16/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/16.0.2/sdk/xulrunner-16.0.2.en-US.linux-x86_64.sdk.tar.bz2', | |
| 'f2bcdce0c60bb59dba7492dcc38aac0d' | |
| sdks.add 'third_party/gecko-16/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/16.0.2/sdk/xulrunner-16.0.2.en-US.win32.sdk.zip', | |
| 'dc016c839bdcab13c95a5bee65008055' | |
| sdks.add 'third_party/gecko-17/linux', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/17.0/sdk/xulrunner-17.0.en-US.linux-i686.sdk.tar.bz2', | |
| '78629c1187112b8daf09d60d5fbd44c1' | |
| sdks.add 'third_party/gecko-17/linux64', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/17.0/sdk/xulrunner-17.0.en-US.linux-x86_64.sdk.tar.bz2', | |
| '7c4fff0850516934b493e46e8c40c247' | |
| sdks.add 'third_party/gecko-17/win32', | |
| 'http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/17.0/sdk/xulrunner-17.0.en-US.win32.sdk.zip', | |
| '5c0a467a581778bda72a6a3daea2f8f0' | |
| end | |
| task :'selenium-server_zip' do | |
| temp = "build/selenium-server_zip" | |
| mkdir_p temp | |
| sh "cd #{temp} && jar xf ../selenium-server.zip" | |
| rm_f "build/selenium-server.zip" | |
| Dir["#{temp}/webdriver-*.jar"].each { |file| rm_rf file } | |
| mv "#{temp}/selenium-server.jar", "#{temp}/selenium-server-#{version}.jar" | |
| sh "cd #{temp} && jar cMf ../selenium-server.zip *" | |
| end | |
| {"firefox" => "*chrome", | |
| "ie" => "*iexploreproxy", | |
| "opera" => "*opera", | |
| "safari" => "*safari"}.each_pair do |k,v| | |
| selenium_test(:name => "test-core-#{k}", | |
| :srcs => [ "common/test/js/core/*.js" ], | |
| :deps => [ | |
| "//java/server/test/org/openqa/selenium:server-with-tests:uber", | |
| ], | |
| :browser => v ) | |
| end | |
| task :javadocs => [:common, :firefox, :htmlunit, :ie, :remote, :support, :chrome, :selenium] do | |
| mkdir_p "build/javadoc" | |
| sourcepath = "" | |
| classpath = '.' | |
| Dir["third_party/java/*/*.jar"].each do |jar| | |
| classpath << ":" + jar unless jar.to_s =~ /.*-src.*\.jar/ | |
| end | |
| [File.join(%w(java client src))].each do |m| | |
| sourcepath += File::PATH_SEPARATOR + m | |
| end | |
| p sourcepath | |
| cmd = "javadoc -notimestamp -d build/javadoc -sourcepath #{sourcepath} -classpath #{classpath} -subpackages org.openqa.selenium -subpackages com.thoughtworks " | |
| cmd << " -exclude org.openqa.selenium.internal.selenesedriver:org.openqa.selenium.internal.seleniumemulation:org.openqa.selenium.remote.internal" | |
| if (windows?) | |
| cmd = cmd.gsub(/\//, "\\").gsub(/:/, ";") | |
| end | |
| sh cmd | |
| end | |
| task :py_prep_for_install_release => ["//javascript/firefox-driver:webdriver", :chrome] do | |
| if python? then | |
| firefox_py_home = "py/selenium/webdriver/firefox/" | |
| xpi_zip_build = 'build/javascript/firefox-driver/webdriver.xpi' | |
| x86 = firefox_py_home + "x86/" | |
| amd64 = firefox_py_home + "amd64/" | |
| if (windows?) then | |
| xpi_zip_build = xpi_zip_build.gsub(/\//, "\\") | |
| firefox_py_home = firefox_py_home .gsub(/\//, "\\") | |
| x86 = x86.gsub(/\//,"\\") | |
| amd64 = amd64.gsub(/\//,"\\") | |
| end | |
| mkdir_p x86 unless File.exists?(x86) | |
| mkdir_p amd64 unless File.exists?(amd64) | |
| cp "cpp/prebuilt/i386/libnoblur.so", x86+"x_ignore_nofocus.so", :verbose => true | |
| cp "cpp/prebuilt/amd64/libnoblur64.so", amd64+"x_ignore_nofocus.so", :verbose => true | |
| cp xpi_zip_build , firefox_py_home, :verbose => true | |
| end | |
| end | |
| task :py_install => :py_prep_for_install_release do | |
| sh "python setup.py install" | |
| end | |
| task :py_release => :py_prep_for_install_release do | |
| sh "grep -v test setup.py > setup_release.py; mv setup_release.py setup.py" | |
| sh "python setup.py sdist upload" | |
| sh "svn revert setup.py" | |
| end | |
| task :test_selenium_py => [:'selenium-core', :'selenium-server-standalone'] do | |
| if python? then | |
| sh "python2.6 selenium/test/py/runtests.py", :verbose => true | |
| end | |
| end | |
| #### iPhone #### | |
| task :iphone_server do | |
| sdk = iPhoneSDK? | |
| if sdk != nil then | |
| puts "Building iWebDriver iphone app." | |
| sh "cd iphone && xcodebuild -sdk #{sdk} ARCHS=i386 -target iWebDriver -configuration Debug", :verbose => false | |
| else | |
| puts "XCode not found. Not building the iphone driver." | |
| end | |
| end | |
| # This does not depend on :iphone_server because the dependancy is specified in xcode | |
| task :test_iphone_server do | |
| sdk = iPhoneSDK? | |
| if sdk != nil then | |
| sh "cd iphone && xcodebuild -sdk #{sdk} ARCHS=i386 -target Tests -configuration Debug" | |
| else | |
| puts "XCode and/or iPhoneSDK not found. Not testing iphone_server." | |
| end | |
| end | |
| file "iphone/src/objc/atoms.h" => ["//iphone:atoms"] do |task| | |
| puts "Writing: #{task}" | |
| cp "build/iphone/atoms.h", "iphone/src/objc/atoms.h" | |
| end | |
| task :iphone_atoms => ["iphone/src/objc/atoms.h"] | |
| file "cpp/IEDriver/sizzle.h" => [ "//third_party/js/sizzle:sizzle:header" ] do | |
| cp "build/third_party/js/sizzle/sizzle.h", "cpp/IEDriver/sizzle.h" | |
| end | |
| task :sizzle_header => [ "cpp/IEDriver/sizzle.h" ] | |
| file "build/javascript/deps.js" => FileList[ | |
| "third_party/closure/goog/**/*.js", | |
| "third_party/js/wgxpath/**/*.js", | |
| "javascript/*/**/*.js", # Don't depend on js files directly in javascript/ | |
| ] do | |
| our_cmd = "java -jar third_party/py/jython.jar third_party/closure/bin/calcdeps.py " | |
| our_cmd << "--output_mode=deps --path=javascript --path=third_party/js/wgxpath " | |
| our_cmd << "--dep=third_party/closure/goog" | |
| # Generate the deps. The file paths will be as they appear on the filesystem, | |
| # but for our tests, the WebDriverJS source files are served from /js/src and | |
| # the Closure Library source is under /third_party/closure/goog, so we need | |
| # to modify the generated paths to match that scheme. | |
| output = "" | |
| io = IO.popen(our_cmd) | |
| io.each do |line| | |
| line = line.gsub("\\\\", "/") | |
| output << line.gsub(/common\/(.*)\/js/, 'js/\1') | |
| end | |
| built_deps = "build/javascript/deps.js" | |
| puts "Writing #{built_deps}" | |
| mkdir_p File.dirname(built_deps) | |
| File.open(built_deps, "w") do |f| f.write(output); end | |
| cp built_deps, "javascript/deps.js" | |
| end | |
| desc "Calculate dependencies required for testing the automation atoms" | |
| task :calcdeps => "build/javascript/deps.js" | |
| task :test_webdriverjs => [ | |
| "//javascript/webdriver:test:run" | |
| ] | |
| desc "Generate a single file with WebDriverJS' public API" | |
| task :webdriverjs => [ "//javascript/webdriver:webdriver" ] | |
| task :release => [ | |
| '//java/server/src/org/openqa/selenium/server:server:zip', | |
| '//java/server/src/org/openqa/grid/selenium:selenium:zip', | |
| '//java/client/src/org/openqa/selenium:client-combined:zip', | |
| '//android:android-server' | |
| ] do |t| | |
| # Unzip each of the deps and rename the pieces that need renaming | |
| renames = { | |
| "client-combined-nodeps-srcs.jar" => "selenium-java-#{version}-srcs.jar", | |
| "client-combined-nodeps.jar" => "selenium-java-#{version}.jar", | |
| "selenium-nodeps-srcs.jar" => "selenium-server-#{version}-srcs.jar", | |
| "selenium-nodeps.jar" => "selenium-server-#{version}.jar", | |
| "selenium-standalone.jar" => "selenium-server-standalone-#{version}.jar", | |
| } | |
| t.prerequisites.each do |pre| | |
| zip = Rake::Task[pre].out | |
| next unless zip =~ /\.zip$/ | |
| temp = zip + "rename" | |
| rm_rf temp | |
| deep = File.join(temp, "/selenium-#{version}") | |
| mkdir_p deep | |
| cp 'java/CHANGELOG', deep | |
| sh "cd #{deep} && jar xf ../../#{File.basename(zip)}" | |
| renames.each do |from, to| | |
| src = File.join(deep, from) | |
| next unless File.exists?(src) | |
| mv src, File.join(deep, to) | |
| end | |
| rm_f File.join(deep, "client-combined-standalone.jar") | |
| rm zip | |
| sh "cd #{temp} && jar cMf ../#{File.basename(zip)} *" | |
| rm_rf temp | |
| end | |
| mkdir_p "build/dist" | |
| cp "build/java/server/src/org/openqa/grid/selenium/selenium-standalone.jar", "build/dist/selenium-server-standalone-#{version}.jar" | |
| cp "build/java/server/src/org/openqa/grid/selenium/selenium.zip", "build/dist/selenium-server-#{version}.zip" | |
| cp "build/java/client/src/org/openqa/selenium/client-combined.zip", "build/dist/selenium-java-#{version}.zip" | |
| end | |
| task :push_release => [:release] do | |
| py = "java -jar third_party/py/jython.jar" | |
| if (python?) | |
| py = "python" | |
| end | |
| print "Enter your googlecode username:" | |
| googlecode_username = STDIN.gets.chomp | |
| print "Enter your googlecode password (NOT your gmail password, the one you use for svn, available at https://code.google.com/hosting/settings):" | |
| googlecode_password = STDIN.gets.chomp | |
| [ | |
| {:file => "build/dist/selenium-server-standalone-#{version}.jar", :description => "Use this if you want to use the Selenium RC or Remote WebDriver or use Grid 2 without needing any additional dependencies"}, | |
| {:file => "build/dist/selenium-server-#{version}.zip", :description => "All variants of the Selenium Server: stand-alone, jar with dependencies and sources."}, | |
| {:file => "build/dist/selenium-java-#{version}.zip", :description => "The Java bindings for Selenium 2, including the WebDriver API and the Selenium RC clients. Download this if you plan on just using the client-side pieces of Selenium"} | |
| ].each do |file| | |
| puts "Uploading file #{file[:file]}..." | |
| sh "#{py} third_party/py/googlecode/googlecode_upload.py -s '#{file[:description]}' -p selenium #{file[:file]} -l Featured -u #{googlecode_username} -w #{googlecode_password}" | |
| end | |
| end | |
| desc 'Build the selenium client jars' | |
| task 'selenium-java' => '//java/client/src/org/openqa/selenium:client-combined:project' | |
| desc 'Build and package Selenium IDE' | |
| task :release_ide => [:ide] do | |
| cp 'build/ide/selenium-ide.xpi', "build/ide/selenium-ide-#{ide_version}.xpi" | |
| end | |
| # TODO: do this properly | |
| namespace :docs do | |
| task :mime_types do | |
| sh "svn propset svn:mime-type text/html #{Dir['docs/api/**/*.html'].join ' '}" | |
| sh "svn propset svn:mime-type application/javascript #{Dir['docs/api/**/*.js'].join ' '}" | |
| sh "svn propset svn:mime-type text/css #{Dir['docs/api/**/*.css'].join ' '}" | |
| end | |
| end | |
| namespace :safari do | |
| desc "Build the SafariDriver extension" | |
| task :extension => [ "//javascript/safari-driver:SafariDriver" ] | |
| desc "Build the SafariDriver extension and java client" | |
| task :build => [ | |
| :extension, | |
| "//java/client/src/org/openqa/selenium/safari" | |
| ] | |
| desc "Run the SafariDriver's java test suite" | |
| task :test => [ "//java/client/test/org/openqa/selenium/safari:test:run" ] | |
| desc "Re-install the SafariDriver extension; OSX only" | |
| task :reinstall => [ :extension ] do |t| | |
| raise StandardError, "Task #{t.name} is only available on OSX" unless mac? | |
| sh "osascript javascript/safari-driver/reinstall.scpt" | |
| end | |
| end | |
| at_exit do | |
| if File.exist?(".git") && !Platform.windows? | |
| sh "sh .git-fixfiles" | |
| end | |
| end | |