motiro 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +280 -0
- data/README +28 -0
- data/README.en +175 -0
- data/README.pt-br +175 -0
- data/Rakefile +10 -0
- data/app/controllers/account_controller.rb +62 -0
- data/app/controllers/application.rb +72 -0
- data/app/controllers/edition_controller.rb +13 -0
- data/app/controllers/javascript_controller.rb +21 -0
- data/app/controllers/report_controller.rb +79 -0
- data/app/controllers/root_controller.rb +7 -0
- data/app/controllers/wiki_controller.rb +102 -0
- data/app/core/cache_reporter.rb +53 -0
- data/app/core/cache_reporter_fetcher.rb +33 -0
- data/app/core/chief_editor.rb +69 -0
- data/app/core/reporter.rb +105 -0
- data/app/core/reporter_driver.rb +36 -0
- data/app/core/reporter_fetcher.rb +39 -0
- data/app/core/settings.rb +43 -0
- data/app/core/version.rb +1 -0
- data/app/core/wiki_page_not_found.rb +33 -0
- data/app/core/wiki_reporter.rb +83 -0
- data/app/helpers/account_helper.rb +2 -0
- data/app/helpers/application_helper.rb +68 -0
- data/app/helpers/default_page_provider.rb +28 -0
- data/app/helpers/report_helper.rb +2 -0
- data/app/helpers/root_helper.rb +2 -0
- data/app/helpers/wiki_helper.rb +3 -0
- data/app/models/change.rb +96 -0
- data/app/models/diff_table_builder.rb +285 -0
- data/app/models/event.rb +18 -0
- data/app/models/headline.rb +109 -0
- data/app/models/page.rb +114 -0
- data/app/models/page_sweeper.rb +26 -0
- data/app/models/user.rb +85 -0
- data/app/ports/chdir_runner.rb +36 -0
- data/app/ports/reporter_loader.rb +9 -0
- data/app/ports/runner.rb +64 -0
- data/app/reporters/darcs_connection.rb +54 -0
- data/app/reporters/darcs_reporter.rb +104 -0
- data/app/reporters/darcs_settings.rb +9 -0
- data/app/reporters/darcs_temp_repo.rb +40 -0
- data/app/reporters/events_reporter.rb +28 -0
- data/app/reporters/features_reporter.rb +24 -0
- data/app/reporters/subversion_reporter.rb +203 -0
- data/app/reporters/svn_connection.rb +62 -0
- data/app/reporters/svn_settings.rb +40 -0
- data/app/views/account/_authorization.rhtml +54 -0
- data/app/views/account/_availability.rhtml +5 -0
- data/app/views/account/availability.rhtml +1 -0
- data/app/views/account/login.rhtml +22 -0
- data/app/views/account/logout.rhtml +10 -0
- data/app/views/javascript/motiro.rjs +132 -0
- data/app/views/javascript/niftycube.rjs +300 -0
- data/app/views/layouts/_bottom.rhtml +5 -0
- data/app/views/layouts/_header.rhtml +7 -0
- data/app/views/layouts/_top.rhtml +25 -0
- data/app/views/layouts/application.rhtml +3 -0
- data/app/views/layouts/scaffold.rhtml +13 -0
- data/app/views/layouts/wiki_edit.rhtml +26 -0
- data/app/views/report/list.rhtml +32 -0
- data/app/views/report/older.rhtml +26 -0
- data/app/views/report/rss.rxml +29 -0
- data/app/views/report/show.rhtml +20 -0
- data/app/views/root/index.rhtml +33 -0
- data/app/views/wiki/_editbar.rhtml +26 -0
- data/app/views/wiki/_properties_edit.rhtml +5 -0
- data/app/views/wiki/_properties_show.rhtml +5 -0
- data/app/views/wiki/edit.rhtml +56 -0
- data/app/views/wiki/properties_edit.rhtml +1 -0
- data/app/views/wiki/show.rhtml +9 -0
- data/bin/motiro +44 -0
- data/config/boot.rb +19 -0
- data/config/database.yml +14 -0
- data/config/environment.rb +64 -0
- data/config/environments/development.rb +20 -0
- data/config/environments/production.rb +19 -0
- data/config/environments/test.rb +19 -0
- data/config/motiro.yml +43 -0
- data/config/routes.rb +79 -0
- data/db/migrate/005_globalize_migration.rb +11363 -0
- data/db/migrate/006_remove_headline_title.rb +14 -0
- data/db/migrate/007_stretch_rid.rb +11 -0
- data/db/migrate/008_add_page_editors.rb +12 -0
- data/db/migrate/009_add_page_original_author.rb +12 -0
- data/db/migrate/010_remove_empty_string_defaults_from_pages.rb +17 -0
- data/db/migrate/011_add_title_and_kind_to_pages.rb +13 -0
- data/db/migrate/012_page_modification_info.rb +13 -0
- data/db/migrate/013_nullify_initial_page_attributes.rb +21 -0
- data/db/migrate/014_events_are_wiki_pages.rb +13 -0
- data/db/migrate/015_migrate_previous_event_data.rb +23 -0
- data/db/migrate/1_initial_structure.rb +36 -0
- data/db/migrate/2_add_authentication.rb +12 -0
- data/db/migrate/3_drop_articles.rb +26 -0
- data/db/migrate/4_add_page_editing.rb +14 -0
- data/db/motirodb.sqlite.initial +0 -0
- data/db/schema_version +1 -0
- data/db/translation/pt-BR.rb +76 -0
- data/doc/README_FOR_APP +2 -0
- data/installer/rails_installer_defaults.yml +5 -0
- data/lib/import_translations.rb +154 -0
- data/lib/login_system.rb +89 -0
- data/lib/relative_time.rb +48 -0
- data/lib/string_extensions.rb +10 -0
- data/lib/stub_hash.rb +22 -0
- data/lib/tasks/packaging.rake +93 -0
- data/lib/tasks/testing.rake +32 -0
- data/lib/tick_daemon.rb +41 -0
- data/lib/translator.rb +67 -0
- data/lib/wiki_renderer.rb +42 -0
- data/lib/wiki_url_generator.rb +29 -0
- data/log/.keepdir +0 -0
- data/public/404.html +8 -0
- data/public/500.html +8 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +24 -0
- data/public/dispatch.rb +10 -0
- data/public/favicon.ico +0 -0
- data/public/images/calendar.png +0 -0
- data/public/images/rss.png +0 -0
- data/public/javascripts/controls.js +750 -0
- data/public/javascripts/dragdrop.js +584 -0
- data/public/javascripts/effects.js +854 -0
- data/public/javascripts/prototype.js +1785 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/motiro.css +269 -0
- data/public/stylesheets/niftyCorners.css +35 -0
- data/public/stylesheets/scaffold.css +74 -0
- data/script/about +3 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/process/spinner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/ticker +29 -0
- data/test/acceptance/account_test.rb +186 -0
- data/test/acceptance/darcs_test.rb +62 -0
- data/test/acceptance/events_test.rb +47 -0
- data/test/acceptance/main_page_test.rb +92 -0
- data/test/acceptance/subversion_test.rb +319 -0
- data/test/acceptance/ts_all_suites.rb +27 -0
- data/test/acceptance/wiki_test.rb +202 -0
- data/test/contract/darcs_test.rb +51 -0
- data/test/contract/remote_darcs_test.rb +61 -0
- data/test/contract/svn_test.rb +53 -0
- data/test/fixtures/changes.yml +25 -0
- data/test/fixtures/headlines.yml +45 -0
- data/test/fixtures/pages.yml +98 -0
- data/test/fixtures/users.yml +31 -0
- data/test/functional/account_controller_test.rb +96 -0
- data/test/functional/report_controller_test.rb +113 -0
- data/test/functional/report_features_test.rb +38 -0
- data/test/functional/report_subversion_test.rb +79 -0
- data/test/functional/root_controller_test.rb +127 -0
- data/test/functional/wiki_controller_test.rb +280 -0
- data/test/lib/acceptance_test_case.rb +43 -0
- data/test/lib/configuration.rb +53 -0
- data/test/lib/darcs_excerpts.rb +181 -0
- data/test/lib/darcs_repo.rb +77 -0
- data/test/lib/live_mode_test.rb +51 -0
- data/test/lib/local_svn.rb +157 -0
- data/test/lib/netutils.rb +42 -0
- data/test/lib/platform_thread.rb +62 -0
- data/test/lib/repoutils.rb +23 -0
- data/test/lib/selenium_extensions.rb +32 -0
- data/test/lib/stubio.rb +37 -0
- data/test/lib/svn_excerpts.rb +288 -0
- data/test/lib/test_configuration.rb +14 -0
- data/test/lib/webserver.rb +71 -0
- data/test/meta/configuration_test.rb +72 -0
- data/test/meta/darcs_repo_test.rb +118 -0
- data/test/meta/local_svn_test.rb +125 -0
- data/test/meta/platform_thread_test.rb +46 -0
- data/test/meta/stubio_test.rb +44 -0
- data/test/mocks/headline.rb +34 -0
- data/test/mocks/svn_reporter.rb +29 -0
- data/test/stubs/svn_settings.rb +19 -0
- data/test/stubs/url_generator.rb +24 -0
- data/test/test_helper.rb +36 -0
- data/test/unit/cache_reporter_fetcher_test.rb +46 -0
- data/test/unit/cache_reporter_test.rb +97 -0
- data/test/unit/caching_test.rb +78 -0
- data/test/unit/change_test.rb +152 -0
- data/test/unit/chdir_runner_test.rb +77 -0
- data/test/unit/chief_editor_test.rb +234 -0
- data/test/unit/darcs_connection_test.rb +109 -0
- data/test/unit/darcs_reporter_test.rb +146 -0
- data/test/unit/darcs_settings_test.rb +37 -0
- data/test/unit/darcs_temp_repo_test.rb +51 -0
- data/test/unit/default_page_provider_test.rb +46 -0
- data/test/unit/diff_table_builder_test.rb +602 -0
- data/test/unit/headline_test.rb +259 -0
- data/test/unit/page_test.rb +145 -0
- data/test/unit/relative_time_test.rb +56 -0
- data/test/unit/reporter_driver_test.rb +85 -0
- data/test/unit/reporter_fetcher_test.rb +31 -0
- data/test/unit/reporter_test.rb +81 -0
- data/test/unit/runner_test.rb +93 -0
- data/test/unit/settings_test.rb +55 -0
- data/test/unit/string_extensions_test.rb +10 -0
- data/test/unit/svn_connection_test.rb +183 -0
- data/test/unit/svn_reporter_interaction_test.rb +38 -0
- data/test/unit/svn_reporter_test.rb +286 -0
- data/test/unit/svn_settings_test.rb +86 -0
- data/test/unit/translator_test.rb +96 -0
- data/test/unit/user_test.rb +125 -0
- data/test/unit/wiki_renderer_test.rb +87 -0
- data/test/unit/wiki_reporter_test.rb +94 -0
- data/test/unit/wiki_url_generator_test.rb +31 -0
- data/vendor/motiro-installer.rb +159 -0
- data/vendor/plugins/globalize/LICENSE +9 -0
- data/vendor/plugins/globalize/README +49 -0
- data/vendor/plugins/globalize/data/country_data.csv +240 -0
- data/vendor/plugins/globalize/data/language_data.csv +188 -0
- data/vendor/plugins/globalize/data/translation_data.csv +3421 -0
- data/vendor/plugins/globalize/generators/globalize/USAGE +10 -0
- data/vendor/plugins/globalize/generators/globalize/globalize_generator.rb +42 -0
- data/vendor/plugins/globalize/generators/globalize/templates/migration.rb.gz +0 -0
- data/vendor/plugins/globalize/generators/globalize/templates/tiny_migration.rb.gz +0 -0
- data/vendor/plugins/globalize/init.rb +30 -0
- data/vendor/plugins/globalize/lib/globalize/localization/core_ext.rb +170 -0
- data/vendor/plugins/globalize/lib/globalize/localization/core_ext_hooks.rb +33 -0
- data/vendor/plugins/globalize/lib/globalize/localization/db_translate.rb +494 -0
- data/vendor/plugins/globalize/lib/globalize/localization/db_view_translator.rb +152 -0
- data/vendor/plugins/globalize/lib/globalize/localization/locale.rb +173 -0
- data/vendor/plugins/globalize/lib/globalize/localization/rfc_3066.rb +40 -0
- data/vendor/plugins/globalize/lib/globalize/models/country.rb +24 -0
- data/vendor/plugins/globalize/lib/globalize/models/currency.rb +188 -0
- data/vendor/plugins/globalize/lib/globalize/models/language.rb +84 -0
- data/vendor/plugins/globalize/lib/globalize/models/model_translation.rb +4 -0
- data/vendor/plugins/globalize/lib/globalize/models/translation.rb +9 -0
- data/vendor/plugins/globalize/lib/globalize/models/view_translation.rb +14 -0
- data/vendor/plugins/globalize/lib/globalize/rails/action_mailer.rb +125 -0
- data/vendor/plugins/globalize/lib/globalize/rails/action_view.rb +79 -0
- data/vendor/plugins/globalize/lib/globalize/rails/active_record.rb +129 -0
- data/vendor/plugins/globalize/lib/globalize/rails/active_record_helper.rb +33 -0
- data/vendor/plugins/globalize/populators/pop_dates.rb +81 -0
- data/vendor/plugins/globalize/populators/pop_migration.rb +18 -0
- data/vendor/plugins/globalize/populators/pop_pluralization.rb +26 -0
- data/vendor/plugins/globalize/populators/pop_seps.rb +32 -0
- data/vendor/plugins/globalize/tasks/data.rake +130 -0
- data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.en-US.plain.text.rhtml +1 -0
- data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.en.plain.text.rhtml +1 -0
- data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.he.plain.text.rhtml +1 -0
- data/vendor/plugins/globalize/test/action_mailer_test/globalize_mailer/test.plain.text.rhtml +1 -0
- data/vendor/plugins/globalize/test/action_mailer_test.rb +54 -0
- data/vendor/plugins/globalize/test/config/database.yml.default +16 -0
- data/vendor/plugins/globalize/test/config/database.yml.example +22 -0
- data/vendor/plugins/globalize/test/core_ext_test.rb +61 -0
- data/vendor/plugins/globalize/test/currency_test.rb +141 -0
- data/vendor/plugins/globalize/test/date_helper_test.rb +634 -0
- data/vendor/plugins/globalize/test/db/schema.rb +90 -0
- data/vendor/plugins/globalize/test/db_translation_test.rb +374 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_categories.yml +7 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_categories_products.yml +7 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_countries.yml +41 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_languages.yml +64 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_manufacturers.yml +5 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_products.yml +29 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_simples.yml +5 -0
- data/vendor/plugins/globalize/test/fixtures/globalize_translations.yml +354 -0
- data/vendor/plugins/globalize/test/locale_test.rb +27 -0
- data/vendor/plugins/globalize/test/mime_responds_test.rb +358 -0
- data/vendor/plugins/globalize/test/model_test.rb +17 -0
- data/vendor/plugins/globalize/test/standard_data_test_helper.rb +33 -0
- data/vendor/plugins/globalize/test/test_helper.rb +19 -0
- data/vendor/plugins/globalize/test/test_standard_data.rb +54 -0
- data/vendor/plugins/globalize/test/validation_test.rb +29 -0
- data/vendor/plugins/globalize/test/view_picking_test.rb +49 -0
- data/vendor/plugins/globalize/test/view_translation_test.rb +237 -0
- data/vendor/plugins/globalize/test/views/layouts/standard.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/all_types_with_layout.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/all_types_with_layout.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.en.rxml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.fr.rxml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults.rxml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.en.rxml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.fr.rxml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rjs +1 -0
- data/vendor/plugins/globalize/test/views/respond_to/using_defaults_with_type_list.rxml +1 -0
- data/vendor/plugins/globalize/test/views/test.he-IL.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/test.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/test2.he.rhtml +1 -0
- data/vendor/plugins/globalize/test/views/test2.rhtml +1 -0
- data/vendor/plugins/test_xml/MIT-LICENSE +20 -0
- data/vendor/plugins/test_xml/README +20 -0
- data/vendor/plugins/test_xml/Rakefile +22 -0
- data/vendor/plugins/test_xml/init.rb +7 -0
- data/vendor/plugins/test_xml/lib/xml_assertions.rb +22 -0
- data/vendor/plugins/test_xml/test/test_xml_test.rb +40 -0
- metadata +505 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Motiro - A project tracking tool
|
|
2
|
+
# Copyright (C) 2006-2007 Thiago Arrais
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
7
|
+
# any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
19
|
+
|
|
20
|
+
require 'stubio'
|
|
21
|
+
require 'ports/runner'
|
|
22
|
+
|
|
23
|
+
class RunnerTest < Test::Unit::TestCase
|
|
24
|
+
|
|
25
|
+
def test_feeds_inner_process_given_input
|
|
26
|
+
FlexMock.use('creator') do |creator|
|
|
27
|
+
command = 'svn diff https://svn.sourceforge.net/svnroot/motiro/ -r363:364'
|
|
28
|
+
output = "diff\n"
|
|
29
|
+
|
|
30
|
+
pio = StubIO.new(output)
|
|
31
|
+
creator.should_receive(:popen).with(command, 'r+').once.
|
|
32
|
+
and_return(pio)
|
|
33
|
+
|
|
34
|
+
runner = Runner.new(creator)
|
|
35
|
+
assert_equal output, runner.run(command, "t\n")
|
|
36
|
+
assert_equal "t\n", pio.string
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_augments_and_cleans_environment
|
|
41
|
+
FlexMock.use('creator') do |creator|
|
|
42
|
+
command = 'svn log -v https://svn.sourceforge.net/svnroot/motiro/ -r363'
|
|
43
|
+
creator.should_receive(:popen).with(command, 'r+').once.
|
|
44
|
+
returns do
|
|
45
|
+
assert_equal 'test_value', ENV['TEST_VAR']
|
|
46
|
+
StringIO.new
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Runner.new(creator).run(command, '', 'TEST_VAR' => 'test_value')
|
|
50
|
+
|
|
51
|
+
assert_nil ENV['TEST_VAR']
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_cleans_overlapping_environment
|
|
56
|
+
FlexMock.use('creator') do |creator|
|
|
57
|
+
command = 'svn diff https://svn.sourceforge.net/svnroot/motiro/ -r363:364'
|
|
58
|
+
output = "diff\n"
|
|
59
|
+
creator.should_receive(:popen).with(command, 'r+').once.
|
|
60
|
+
and_return(StringIO.new)
|
|
61
|
+
|
|
62
|
+
Runner.new(creator).run(command, '', 'FIRST_TEST_VAR' => 'first_value',
|
|
63
|
+
'SECOND_TEST_VAR' => 'second_value')
|
|
64
|
+
|
|
65
|
+
assert_equal 'original_value', ENV['FIRST_TEST_VAR']
|
|
66
|
+
assert_nil ENV['SECOND_TEST_VAR']
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_recovers_from_broken_pipe_io_error
|
|
71
|
+
FlexMock.use('creator') do |creator|
|
|
72
|
+
command = 'svn diff https://svn.sourceforge.net/svnroot/motiro/ -r363:364'
|
|
73
|
+
output = "diff command output\n"
|
|
74
|
+
pio = StubIO.new(output)
|
|
75
|
+
def pio.<<(_); raise Errno::EPIPE; end
|
|
76
|
+
|
|
77
|
+
creator.should_receive(:popen).with(command, 'r+').
|
|
78
|
+
and_return(pio).
|
|
79
|
+
once
|
|
80
|
+
|
|
81
|
+
assert_equal output, Runner.new(creator).run(command)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def setup
|
|
86
|
+
ENV['FIRST_TEST_VAR'] = 'original_value'
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def teardown
|
|
90
|
+
ENV.delete 'FIRST_TEST_VAR'
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
2
|
+
|
|
3
|
+
require 'stringio'
|
|
4
|
+
|
|
5
|
+
require 'core/settings'
|
|
6
|
+
|
|
7
|
+
class SettingsProviderTest < Test::Unit::TestCase
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@expected_file_name = File.expand_path(File.dirname(__FILE__) +
|
|
11
|
+
'../../../config/motiro.yml')
|
|
12
|
+
@opener = FlexMock.new
|
|
13
|
+
|
|
14
|
+
@opener.should_receive(:open).with(@expected_file_name).
|
|
15
|
+
once.
|
|
16
|
+
returns( StringIO.new( "package_size: 8\n" +
|
|
17
|
+
"update_interval: 10\n" +
|
|
18
|
+
"darcs:\n" +
|
|
19
|
+
" repo: http://eclipsefp.sf.net/repos/trunk\n"))
|
|
20
|
+
|
|
21
|
+
@provider = SubversionSettingsProvider.new(@opener)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def teardown
|
|
25
|
+
@opener.mock_verify
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_active_reporters
|
|
29
|
+
assert_equal ['darcs'], @provider.active_reporter_ids
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_fetches_package_size
|
|
33
|
+
assert_equal 8, @provider.package_size
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_fectches_update_interval
|
|
37
|
+
assert_equal 10, @provider.update_interval
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_dynamically_fetches_parameters
|
|
41
|
+
assert_equal 8, @provider.package_size
|
|
42
|
+
@opener.mock_verify
|
|
43
|
+
|
|
44
|
+
@opener.should_receive(:open).with(@expected_file_name).
|
|
45
|
+
returns do
|
|
46
|
+
StringIO.new("package_size: 5\n" +
|
|
47
|
+
"svn:\n" +
|
|
48
|
+
" repo: http://svn.berlios.de/svnroot/repos/motiro\n")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
assert_equal 5, @provider.package_size
|
|
52
|
+
assert_equal ['svn'], @provider.active_reporter_ids
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Motiro - A project tracking tool
|
|
2
|
+
# Copyright (C) 2006-2007 Thiago Arrais
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
7
|
+
# any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
19
|
+
|
|
20
|
+
require 'test/unit'
|
|
21
|
+
|
|
22
|
+
require 'reporters/svn_connection'
|
|
23
|
+
|
|
24
|
+
require 'stubs/svn_settings'
|
|
25
|
+
|
|
26
|
+
class SubversionConnectionTest < Test::Unit::TestCase
|
|
27
|
+
|
|
28
|
+
def test_reads_repo_url
|
|
29
|
+
FlexMock.use do |runner|
|
|
30
|
+
settings = StubConnectionSettingsProvider.new(
|
|
31
|
+
:repo => 'svn://svn.berlios.de/motiro')
|
|
32
|
+
|
|
33
|
+
runner.should_receive(:run).once.
|
|
34
|
+
with('svn log svn://svn.berlios.de/motiro -v -rHEAD:1 --limit=5',
|
|
35
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
36
|
+
|
|
37
|
+
connection = SubversionConnection.new(settings, runner)
|
|
38
|
+
|
|
39
|
+
connection.log
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_issues_commands_with_credentials
|
|
44
|
+
FlexMock.use do |runner|
|
|
45
|
+
settings = StubConnectionSettingsProvider.new(
|
|
46
|
+
:repo => 'http://rapidsvn.tigris.org/svn/rapidsvn/trunk',
|
|
47
|
+
:repo_user => 'guest',
|
|
48
|
+
:repo_password => 'with spaces')
|
|
49
|
+
|
|
50
|
+
runner.should_receive(:run).once.
|
|
51
|
+
with("svn --username='guest' --password='with spaces' log http://rapidsvn.tigris.org/svn/rapidsvn/trunk -v -rHEAD:1 --limit=5",
|
|
52
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
53
|
+
runner.should_receive(:run).once.
|
|
54
|
+
with("svn --username='guest' --password='with spaces' info -r18 --xml http://rapidsvn.tigris.org/svn/rapidsvn/trunk/trunk/file_a.txt",
|
|
55
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
56
|
+
runner.should_receive(:run).once.
|
|
57
|
+
with("svn --username='guest' --password='with spaces' diff http://rapidsvn.tigris.org/svn/rapidsvn/trunk -r17:18",
|
|
58
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
59
|
+
|
|
60
|
+
connection = SubversionConnection.new(settings, runner)
|
|
61
|
+
|
|
62
|
+
connection.log
|
|
63
|
+
connection.info('/trunk/file_a.txt', 18)
|
|
64
|
+
connection.diff(18)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_limit_query_size
|
|
69
|
+
FlexMock.use do |runner|
|
|
70
|
+
settings = StubConnectionSettingsProvider.new :package_size => 3
|
|
71
|
+
|
|
72
|
+
runner.should_receive(:run).once.
|
|
73
|
+
with('svn log http://svn.fake.domain.org/fake_repo -v -rHEAD:1 --limit=3',
|
|
74
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
75
|
+
|
|
76
|
+
connection = SubversionConnection.new(settings, runner)
|
|
77
|
+
|
|
78
|
+
connection.log
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_limit_to_one_revision
|
|
83
|
+
FlexMock.use do |runner|
|
|
84
|
+
settings = StubConnectionSettingsProvider.new
|
|
85
|
+
|
|
86
|
+
runner.should_receive(:run).twice.
|
|
87
|
+
with('svn log http://svn.fake.domain.org/fake_repo -v -r7',
|
|
88
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
89
|
+
|
|
90
|
+
connection = SubversionConnection.new(settings, runner)
|
|
91
|
+
|
|
92
|
+
connection.log(:only => 7)
|
|
93
|
+
connection.log(:only => '7')
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_diff
|
|
98
|
+
FlexMock.use do |runner|
|
|
99
|
+
settings = StubConnectionSettingsProvider.new
|
|
100
|
+
|
|
101
|
+
runner.should_receive(:run).once.
|
|
102
|
+
with('svn diff http://svn.fake.domain.org/fake_repo -r14:15',
|
|
103
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
104
|
+
|
|
105
|
+
connection = SubversionConnection.new(settings, runner)
|
|
106
|
+
|
|
107
|
+
connection.diff(15)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_cache_results_to_avoid_network_usage
|
|
112
|
+
FlexMock.use do |runner|
|
|
113
|
+
settings = StubConnectionSettingsProvider.new
|
|
114
|
+
expected_diff_output = 'diff output'
|
|
115
|
+
|
|
116
|
+
runner.should_receive(:run).with_any_args.
|
|
117
|
+
once.
|
|
118
|
+
returns(expected_diff_output)
|
|
119
|
+
|
|
120
|
+
connection = SubversionConnection.new(settings, runner)
|
|
121
|
+
assert_equal expected_diff_output, connection.diff(18)
|
|
122
|
+
assert_equal expected_diff_output, connection.diff(18)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_info
|
|
127
|
+
FlexMock.use do |runner|
|
|
128
|
+
settings = StubConnectionSettingsProvider.new
|
|
129
|
+
|
|
130
|
+
runner.should_receive(:run).once.
|
|
131
|
+
with('svn info -r18 --xml http://svn.fake.domain.org/fake_repo/trunk/file_a.txt',
|
|
132
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
133
|
+
|
|
134
|
+
connection = SubversionConnection.new(settings, runner)
|
|
135
|
+
|
|
136
|
+
connection.info('/trunk/file_a.txt', 18)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_uses_english_locale_and_temporarily_accepts_ssl_certificate
|
|
141
|
+
FlexMock.use do |runner|
|
|
142
|
+
runner.should_receive(:run).once.
|
|
143
|
+
with('svn log http://svn.fake.domain.org/fake_repo -v -rHEAD:1 --limit=5',
|
|
144
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
145
|
+
|
|
146
|
+
connection = SubversionConnection.new(StubConnectionSettingsProvider.new,
|
|
147
|
+
runner)
|
|
148
|
+
|
|
149
|
+
connection.log
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_unlimited_logging
|
|
154
|
+
FlexMock.use do |runner|
|
|
155
|
+
settings = StubConnectionSettingsProvider.new
|
|
156
|
+
|
|
157
|
+
runner.should_receive(:run).once.
|
|
158
|
+
with('svn log http://svn.fake.domain.org/fake_repo -v',
|
|
159
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
160
|
+
|
|
161
|
+
connection = SubversionConnection.new(settings, runner)
|
|
162
|
+
|
|
163
|
+
connection.log(:all)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_log_history_from_some_revision
|
|
168
|
+
FlexMock.use do |runner|
|
|
169
|
+
settings = StubConnectionSettingsProvider.new
|
|
170
|
+
|
|
171
|
+
runner.should_receive(:run).once.
|
|
172
|
+
with('svn log http://svn.fake.domain.org/fake_repo -v -rHEAD:13 --limit=5',
|
|
173
|
+
"t\n", 'LC_MESSAGES' => 'C')
|
|
174
|
+
|
|
175
|
+
connection = SubversionConnection.new(settings, runner)
|
|
176
|
+
|
|
177
|
+
connection.log(:history_from => 'r12')
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# TODO what happens if we ask for an inexistent revision
|
|
182
|
+
|
|
183
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Motiro - A project tracking tool
|
|
2
|
+
# Copyright (C) 2006-2007 Thiago Arrais
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
7
|
+
# any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
19
|
+
|
|
20
|
+
require 'reporters/subversion_reporter'
|
|
21
|
+
|
|
22
|
+
class SubversionReporterInteractionTest < Test::Unit::TestCase
|
|
23
|
+
|
|
24
|
+
def test_asks_for_specific_revision
|
|
25
|
+
FlexMock.use do |conn|
|
|
26
|
+
conn.should_receive(:log).with(:only => '113').returns('').once
|
|
27
|
+
SubversionReporter.new(conn).headline('r113')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_asks_for_non_cached_revisions_only
|
|
32
|
+
FlexMock.use do |conn|
|
|
33
|
+
conn.should_receive(:log).with(:history_from => 'r206').returns('').once
|
|
34
|
+
SubversionReporter.new(conn).latest_headlines('r206')
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# Motiro - A project tracking tool
|
|
2
|
+
# Copyright (C) 2006-2007 Thiago Arrais
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
|
7
|
+
# any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program; if not, write to the Free Software
|
|
16
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17
|
+
|
|
18
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
19
|
+
|
|
20
|
+
require 'svn_excerpts'
|
|
21
|
+
require 'reporters/subversion_reporter'
|
|
22
|
+
|
|
23
|
+
class SubversionReporterTest < Test::Unit::TestCase
|
|
24
|
+
|
|
25
|
+
def setup
|
|
26
|
+
@svn_log = "------------------------------------------------------------------------\n"
|
|
27
|
+
@svn_log += "r1 | thiagoarrais | 2006-02-14 15:45:13 -0400 (Ter, 14 Fev 2006) | 1 line\n"
|
|
28
|
+
@svn_log += "Caminhos mudados:\n"
|
|
29
|
+
@svn_log += " A /trunk\n"
|
|
30
|
+
@svn_log += "\n"
|
|
31
|
+
@svn_log += "Criacao do trunk do projeto\n"
|
|
32
|
+
@svn_log += "------------------------------------------------------------------------\n"
|
|
33
|
+
@svn_diff = ''
|
|
34
|
+
@svn_info = ''
|
|
35
|
+
|
|
36
|
+
@svn_connection = FlexMock.new('svn connection')
|
|
37
|
+
@svn_connection.mock_handle(:log) do
|
|
38
|
+
@svn_log
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@svn_connection.mock_handle(:diff) do
|
|
42
|
+
@svn_diff
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
@svn_connection.mock_handle(:info) do
|
|
46
|
+
@svn_info
|
|
47
|
+
end
|
|
48
|
+
@reporter = SubversionReporter.new(@svn_connection)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_one_revision
|
|
52
|
+
hl = @reporter.latest_headline
|
|
53
|
+
assert_equal 'thiagoarrais', hl.author
|
|
54
|
+
assert_equal Time.local(2006, 02, 14, 15, 45, 13), hl.happened_at
|
|
55
|
+
assert_equal 'Criacao do trunk do projeto', hl.title
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_more_revisions
|
|
59
|
+
@svn_log = R13 + @svn_log
|
|
60
|
+
|
|
61
|
+
hls = @reporter.latest_headlines
|
|
62
|
+
|
|
63
|
+
assert_equal 'thiagoarrais', hls[0].author
|
|
64
|
+
assert_equal Time.local(2006, 02, 19, 8, 50, 07), hls[0].happened_at
|
|
65
|
+
assert_equal 'Leitura de uma revisao SVN pronta', hls[0].title
|
|
66
|
+
|
|
67
|
+
assert_equal 'thiagoarrais', hls[1].author
|
|
68
|
+
assert_equal Time.local(2006, 02, 14, 15, 45, 13), hls[1].happened_at
|
|
69
|
+
assert_equal 'Criacao do trunk do projeto', hls[1].title
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_revision_with_empty_comment
|
|
73
|
+
@svn_log = R15 + @svn_log
|
|
74
|
+
|
|
75
|
+
hl = @reporter.latest_headline
|
|
76
|
+
|
|
77
|
+
assert_equal 'thiagoarrais', hl.author
|
|
78
|
+
assert_equal Time.local(2006, 02, 19, 9, 13, 7), hl.happened_at
|
|
79
|
+
assert_equal '', hl.title
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_revision_with_multiline_comment
|
|
83
|
+
@svn_log = R7 + @svn_log
|
|
84
|
+
|
|
85
|
+
hls = @reporter.latest_headlines
|
|
86
|
+
|
|
87
|
+
hl7 = hls[0]
|
|
88
|
+
assert_equal 'gilbertogil', hl7.author
|
|
89
|
+
assert_equal Time.local(2006, 02, 17, 18, 7, 55), hl7.happened_at
|
|
90
|
+
assert_equal 'Correcao para a revisao anterior (r6)', hl7.title
|
|
91
|
+
|
|
92
|
+
hl1 = hls[1]
|
|
93
|
+
assert_equal 'thiagoarrais', hl1.author
|
|
94
|
+
assert_equal Time.local(2006, 02, 14, 15, 45, 13), hl1.happened_at
|
|
95
|
+
assert_equal 'Criacao do trunk do projeto', hl1.title
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_comment_with_dashes
|
|
99
|
+
@svn_log = R2 + @svn_log
|
|
100
|
+
|
|
101
|
+
hls = @reporter.latest_headlines
|
|
102
|
+
|
|
103
|
+
hl2 = hls[0]
|
|
104
|
+
assert_equal 'gilbertogil', hl2.author
|
|
105
|
+
assert_equal Time.local(2006, 02, 17, 18, 7, 55), hl2.happened_at
|
|
106
|
+
assert_equal 'Estou tentando enganar o SubversionReporter', hl2.title
|
|
107
|
+
|
|
108
|
+
hl1 = hls[1]
|
|
109
|
+
assert_equal 'thiagoarrais', hl1.author
|
|
110
|
+
assert_equal Time.local(2006, 02, 14, 15, 45, 13), hl1.happened_at
|
|
111
|
+
assert_equal 'Criacao do trunk do projeto', hl1.title
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_collect_all_available_headlines
|
|
115
|
+
@svn_log = R13 + R7 + @svn_log
|
|
116
|
+
|
|
117
|
+
hls = @reporter.latest_headlines
|
|
118
|
+
assert_equal 3, hls.size
|
|
119
|
+
|
|
120
|
+
assert_equal 'Leitura de uma revisao SVN pronta', hls[0].title
|
|
121
|
+
assert_equal 'Correcao para a revisao anterior (r6)', hls[1].title
|
|
122
|
+
assert_equal 'Criacao do trunk do projeto', hls[2].title
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_record_full_comment
|
|
126
|
+
@svn_log = R7 + @svn_log
|
|
127
|
+
|
|
128
|
+
hls = @reporter.latest_headlines
|
|
129
|
+
|
|
130
|
+
expectedComment = "Correcao para a revisao anterior (r6)\n"
|
|
131
|
+
expectedComment += "\n"
|
|
132
|
+
expectedComment += "Esqueci de colocar o svn_reporter. Foi mal!\n"
|
|
133
|
+
|
|
134
|
+
assert_equal(expectedComment, hls[0].description)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_name
|
|
138
|
+
assert_equal 'subversion', @reporter.name
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_sets_reported_by_field
|
|
142
|
+
hls = @reporter.latest_headlines
|
|
143
|
+
headline = hls[0]
|
|
144
|
+
|
|
145
|
+
assert_equal @reporter.name, headline.reported_by
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_retrieves_headline_from_revision_id
|
|
149
|
+
hls = @reporter.latest_headlines
|
|
150
|
+
headline = hls[0]
|
|
151
|
+
|
|
152
|
+
headline_from_rid = @reporter.headline(headline.rid)
|
|
153
|
+
|
|
154
|
+
assert_not_nil headline_from_rid
|
|
155
|
+
assert_equal 'Criacao do trunk do projeto', headline_from_rid.description
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def test_fills_headline_with_details
|
|
159
|
+
hls = @reporter.latest_headlines
|
|
160
|
+
headline = hls[0]
|
|
161
|
+
|
|
162
|
+
changes = headline.changes
|
|
163
|
+
assert_not_nil changes
|
|
164
|
+
assert_equal 1, changes.size
|
|
165
|
+
|
|
166
|
+
assert_equal 'Criacao do trunk do projeto', headline.description
|
|
167
|
+
assert_equal ' A /trunk', changes[0].summary
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_records_diff_output
|
|
171
|
+
@svn_log = R105 + @svn_log
|
|
172
|
+
@svn_diff = R105DIFF
|
|
173
|
+
|
|
174
|
+
expected_diff = "@@ -0,0 +1,7 @@\n"
|
|
175
|
+
expected_diff += "+class Change < ActiveRecord::Base\n"
|
|
176
|
+
expected_diff += "+\n"
|
|
177
|
+
expected_diff += "+ def to_s\n"
|
|
178
|
+
expected_diff += "+ return summary\n"
|
|
179
|
+
expected_diff += "+ end\n"
|
|
180
|
+
expected_diff += "+\n"
|
|
181
|
+
expected_diff += "+end"
|
|
182
|
+
|
|
183
|
+
hls = @reporter.latest_headlines
|
|
184
|
+
change = hls[0].changes[0]
|
|
185
|
+
|
|
186
|
+
assert_equal ' A /trunk/app/models/change.rb', change.summary
|
|
187
|
+
assert_equal expected_diff, change.diff
|
|
188
|
+
|
|
189
|
+
# TODO directory nodes
|
|
190
|
+
# TODO only directory diff (no diff output)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_records_multiple_files_diff
|
|
194
|
+
@svn_log = R6 + "-------------\n"
|
|
195
|
+
@svn_diff = R6DIFF
|
|
196
|
+
|
|
197
|
+
expected_diff_for_connection = R6C1DIFF
|
|
198
|
+
|
|
199
|
+
expected_diff_for_headline = R6C2DIFF
|
|
200
|
+
|
|
201
|
+
hls = @reporter.latest_headlines
|
|
202
|
+
changes = hls[0].changes
|
|
203
|
+
|
|
204
|
+
assert_equal ' A /trunk/src/test/stubs/svn_connection.rb', changes[0].summary
|
|
205
|
+
assert_equal expected_diff_for_connection, changes[0].diff
|
|
206
|
+
|
|
207
|
+
assert_equal ' A /trunk/src/test/unit/headline_test.rb', changes[1].summary
|
|
208
|
+
assert_equal expected_diff_for_headline, changes[1].diff
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def test_method_headline_records_diff_output
|
|
212
|
+
@svn_log = R105
|
|
213
|
+
@svn_diff = R105DIFF
|
|
214
|
+
|
|
215
|
+
expected_diff = "@@ -0,0 +1,7 @@\n"
|
|
216
|
+
expected_diff += "+class Change < ActiveRecord::Base\n"
|
|
217
|
+
expected_diff += "+\n"
|
|
218
|
+
expected_diff += "+ def to_s\n"
|
|
219
|
+
expected_diff += "+ return summary\n"
|
|
220
|
+
expected_diff += "+ end\n"
|
|
221
|
+
expected_diff += "+\n"
|
|
222
|
+
expected_diff += "+end"
|
|
223
|
+
|
|
224
|
+
headline = @reporter.headline('r105')
|
|
225
|
+
change = headline.changes[0]
|
|
226
|
+
|
|
227
|
+
assert_equal ' A /trunk/app/models/change.rb', change.summary
|
|
228
|
+
assert_equal expected_diff, change.diff
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def test_correctly_associates_resources_with_diff_when_moving
|
|
232
|
+
@svn_log = R124
|
|
233
|
+
@svn_diff = R124DIFF
|
|
234
|
+
|
|
235
|
+
headline = @reporter.headline('r124')
|
|
236
|
+
change_for_html_fragment = find_in(headline.changes) do |change|
|
|
237
|
+
Regexp.new('A /trunk/app/views/report/html_fragment.rhtml').
|
|
238
|
+
match(change.summary)
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
assert_not_nil change_for_html_fragment
|
|
242
|
+
|
|
243
|
+
change_for_svn_html_fragment = find_in(headline.changes) do |change|
|
|
244
|
+
Regexp.new('D /trunk/app/views/report/subversion_html_fragment.rhtml').
|
|
245
|
+
match(change.summary)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
assert_not_nil change_for_svn_html_fragment
|
|
249
|
+
|
|
250
|
+
assert_nil change_for_html_fragment.diff.match(/^-/)
|
|
251
|
+
assert_not_nil change_for_html_fragment.diff.match(/^\+/)
|
|
252
|
+
|
|
253
|
+
assert_nil change_for_svn_html_fragment.diff.match(/^\+/)
|
|
254
|
+
assert_not_nil change_for_svn_html_fragment.diff.match(/^-/)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def test_records_node_type
|
|
258
|
+
@svn_log = R10
|
|
259
|
+
@svn_diff = '' # simulate a connection timeout
|
|
260
|
+
|
|
261
|
+
@svn_info = R10INFO
|
|
262
|
+
|
|
263
|
+
headline = @reporter.headline('r10')
|
|
264
|
+
|
|
265
|
+
change = headline.changes.first
|
|
266
|
+
assert_equal 'file', change.resource_kind
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def teardown
|
|
270
|
+
@svn_connection.mock_verify
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
private
|
|
274
|
+
|
|
275
|
+
def find_in(arr)
|
|
276
|
+
arr.each do |item|
|
|
277
|
+
return item if yield(item)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
return nil
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
#TODO test similar paths (see SubversionReporter#diff_for)
|
|
284
|
+
#TODO simulate a connection timeout on live and cached modes
|
|
285
|
+
|
|
286
|
+
end
|