babelish_rnc 1.0.0.pre

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.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.babelish.sample +35 -0
  3. data/.gitignore +34 -0
  4. data/.hound.yml +4 -0
  5. data/.travis.yml +15 -0
  6. data/CONTRIBUTING.md +12 -0
  7. data/Dockerfile +6 -0
  8. data/Gemfile +8 -0
  9. data/LICENSE.txt +20 -0
  10. data/README.md +73 -0
  11. data/Rakefile +17 -0
  12. data/babelish.gemspec +41 -0
  13. data/babelish_rnc.gemspec +42 -0
  14. data/bin/babelish_rnc +6 -0
  15. data/lib/babelish_rnc.rb +31 -0
  16. data/lib/babelish_rnc/android2csv.rb +28 -0
  17. data/lib/babelish_rnc/base2csv.rb +103 -0
  18. data/lib/babelish_rnc/commandline.rb +188 -0
  19. data/lib/babelish_rnc/csv2android.rb +53 -0
  20. data/lib/babelish_rnc/csv2base.rb +189 -0
  21. data/lib/babelish_rnc/csv2json.rb +21 -0
  22. data/lib/babelish_rnc/csv2php.rb +25 -0
  23. data/lib/babelish_rnc/csv2strings.rb +34 -0
  24. data/lib/babelish_rnc/google_doc.rb +55 -0
  25. data/lib/babelish_rnc/json2csv.rb +20 -0
  26. data/lib/babelish_rnc/language.rb +30 -0
  27. data/lib/babelish_rnc/php2csv.rb +30 -0
  28. data/lib/babelish_rnc/strings2csv.rb +61 -0
  29. data/lib/babelish_rnc/version.rb +3 -0
  30. data/lib/babelish_rnc/xcode_macros.rb +49 -0
  31. data/test/babelish_rnc/commands/test_command_android2csv.rb +60 -0
  32. data/test/babelish_rnc/commands/test_command_csv2android.rb +35 -0
  33. data/test/babelish_rnc/commands/test_command_csv2strings.rb +139 -0
  34. data/test/babelish_rnc/commands/test_command_strings2csv.rb +110 -0
  35. data/test/babelish_rnc/test_android2csv.rb +53 -0
  36. data/test/babelish_rnc/test_base2csv.rb +43 -0
  37. data/test/babelish_rnc/test_bins.rb +32 -0
  38. data/test/babelish_rnc/test_commandline.rb +127 -0
  39. data/test/babelish_rnc/test_csv2android.rb +72 -0
  40. data/test/babelish_rnc/test_csv2base.rb +44 -0
  41. data/test/babelish_rnc/test_csv2json.rb +27 -0
  42. data/test/babelish_rnc/test_csv2php.rb +27 -0
  43. data/test/babelish_rnc/test_csv2strings.rb +154 -0
  44. data/test/babelish_rnc/test_json2csv.rb +34 -0
  45. data/test/babelish_rnc/test_php2csv.rb +73 -0
  46. data/test/babelish_rnc/test_strings2csv.rb +147 -0
  47. data/test/babelish_rnc/test_xcode_macros.rb +112 -0
  48. data/test/data/android-en.xml +9 -0
  49. data/test/data/android-fr.xml +9 -0
  50. data/test/data/android.xml +9 -0
  51. data/test/data/android_special_chars.csv +8 -0
  52. data/test/data/android_special_chars.xml +12 -0
  53. data/test/data/android_special_chars_test_result.xml +10 -0
  54. data/test/data/genstrings.strings +0 -0
  55. data/test/data/json.json +6 -0
  56. data/test/data/php_lang.php +8 -0
  57. data/test/data/test_comments.strings +2 -0
  58. data/test/data/test_data.csv +3 -0
  59. data/test/data/test_data.strings +2 -0
  60. data/test/data/test_data_fr_with_comments.strings +6 -0
  61. data/test/data/test_data_fr_with_comments.xml +9 -0
  62. data/test/data/test_data_multiple_langs.csv +3 -0
  63. data/test/data/test_data_with_comments.csv +3 -0
  64. data/test/data/test_data_with_percent.csv +3 -0
  65. data/test/data/test_data_with_percent_space.csv +4 -0
  66. data/test/data/test_data_with_semicolon.csv +3 -0
  67. data/test/data/test_data_with_spaces.csv +3 -0
  68. data/test/data/test_en.strings +2 -0
  69. data/test/data/test_fr.strings +2 -0
  70. data/test/data/test_space.strings +10 -0
  71. data/test/data/test_utf16.strings +0 -0
  72. data/test/data/test_with_nil.csv +3 -0
  73. data/test/data/test_with_nil.strings +4 -0
  74. data/test/data/xcode_empty.strings +7 -0
  75. data/test/test_helper.rb +17 -0
  76. metadata +311 -0
@@ -0,0 +1,110 @@
1
+ require 'test_helper'
2
+ class TestStrings2CSVCommand < Test::Unit::TestCase
3
+
4
+ def test_strings2csv
5
+ options = {:filenames => ["test/data/test_data.strings"]}
6
+ Commandline.new([], options).strings2csv
7
+
8
+ assert File.exist?("translations.csv")
9
+
10
+ # clean up
11
+ system("rm -f translations.csv")
12
+ end
13
+
14
+ def test_strings2csv_with_dryrun_option
15
+ options = {:filenames => ["test/data/test_data.strings"], :dryrun => true}
16
+ Commandline.new([], options).strings2csv
17
+
18
+ assert !File.exist?("translations.csv")
19
+
20
+ # clean up
21
+ system("rm -f translations.csv")
22
+ end
23
+
24
+ def test_strings2csv_with_output_file
25
+ options = {:filenames => ["test/data/test_data.strings"], :csv_filename => "myfile.csv"}
26
+ # -i, -o
27
+ Commandline.new([], options).strings2csv
28
+
29
+ assert File.exist?("myfile.csv")
30
+
31
+ # clean up
32
+ system("rm -f myfile.csv")
33
+ end
34
+
35
+ def test_strings2csv_with_headers
36
+ options = {:filenames => ["test/data/test_data.strings"], :headers => ["constants", "english"]}
37
+ # -i, -h
38
+ Commandline.new([], options).strings2csv
39
+
40
+ #TODO assertion or move test on at lib level
41
+
42
+ # clean up
43
+ system("rm -f translations.csv")
44
+ end
45
+
46
+ def test_strings2csv_with_two_files
47
+ options = {
48
+ :filenames => ["test/data/test_en.strings", "test/data/test_fr.strings"],
49
+ :headers => %w{Constants English French},
50
+ :csv_filename => "enfr.csv"
51
+ }
52
+ # --filenames, --headers, -o
53
+ Commandline.new([], options).strings2csv
54
+
55
+ #TODO assertion
56
+
57
+ # clean up
58
+ system("rm -f enfr.csv")
59
+ end
60
+
61
+ def test_strings2csv_with_empty_lines
62
+ options = {
63
+ :filenames => ["test/data/test_with_nil.strings"],
64
+ :csv_filename => "test_with_nil.csv"
65
+ }
66
+ # -i, -o
67
+
68
+
69
+ assert_nothing_raised do
70
+ Commandline.new([], options).strings2csv
71
+ end
72
+ assert system("diff test_with_nil.csv test/data/test_with_nil.csv"), "no difference on output"
73
+
74
+ # clean up
75
+ system("rm -f test_with_nil.csv")
76
+ end
77
+
78
+ def test_strings2csv_utf16
79
+ options = {
80
+ :filenames => ["test/data/test_utf16.strings"],
81
+ :csv_filename => "test_utf16.csv"
82
+ }
83
+ # -i, -o
84
+
85
+
86
+ assert_nothing_raised do
87
+ Commandline.new([], options).strings2csv
88
+ end
89
+
90
+ # clean up
91
+ system("rm -f test_utf16.csv")
92
+
93
+ end
94
+
95
+ def test_strings2csv_with_comments_outputs_right_headers
96
+ expected_content = <<-EOF
97
+ Variables,test/data/test_comments.strings,Comments
98
+ MY_CONSTANT,This 'is' ok,this is a comment
99
+ EOF
100
+
101
+ options = { :filenames => ["test/data/test_comments.strings"] }
102
+ Commandline.new([], options).strings2csv
103
+
104
+ csv_content = `cat translations.csv`
105
+
106
+ assert_equal expected_content, csv_content, "Content of generated file differs from expected one"
107
+ # clean up
108
+ system("rm -f translations.csv")
109
+ end
110
+ end
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+ class TestAndroid2CSV < Test::Unit::TestCase
3
+
4
+ def test_load_strings_with_wrong_file
5
+ assert_raise(Errno::ENOENT) do
6
+ output = BabelishRnc::Android2CSV.new.load_strings "file that does not exist.strings"
7
+ end
8
+ end
9
+
10
+ def test_load_strings
11
+ expected_output = [{"app_name" => "android2csv", "action_greetings" => "Hello", "ANOTHER_STRING" => "testEN", "empty" => ""}, {}]
12
+ output = BabelishRnc::Android2CSV.new.load_strings "test/data/android.xml"
13
+ assert_equal expected_output, output
14
+ end
15
+
16
+ def test_initialize
17
+ csv_filename = "file.csv"
18
+ filenames = %w{french.strings english.strings}
19
+ headers = %w{constants french english}
20
+ converter = BabelishRnc::Android2CSV.new(
21
+ :csv_filename => csv_filename,
22
+ :headers => headers,
23
+ :filenames => filenames)
24
+
25
+ assert_equal csv_filename, converter.csv_filename
26
+ assert_equal headers, converter.headers
27
+ assert_equal filenames, converter.filenames
28
+ end
29
+
30
+ def test_initialize_with_default_values
31
+ converter = BabelishRnc::Android2CSV.new
32
+ assert_not_nil converter.csv_filename
33
+ end
34
+
35
+ def test_special_chars
36
+ csv_filename = "./android_special_chars_output.csv"
37
+ filenames = "test/data/android_special_chars.xml"
38
+ headers = %w{variables german}
39
+
40
+ converter = BabelishRnc::Android2CSV.new(
41
+ :csv_filename => csv_filename,
42
+ :headers => headers,
43
+ :filenames => [filenames])
44
+
45
+ converter.convert
46
+
47
+ assert File.exist?(converter.csv_filename)
48
+ assert_equal File.read("test/data/android_special_chars.csv"), File.read(csv_filename)
49
+
50
+ # clean up
51
+ system("rm -rf ./" + csv_filename)
52
+ end
53
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+ class TestBase2Csv < Test::Unit::TestCase
3
+
4
+ def test_load_strings
5
+ expected_output = [{}, {}]
6
+ output = BabelishRnc::Base2Csv.new.send :load_strings, nil
7
+ assert_equal expected_output, output
8
+ end
9
+
10
+ def test_create_csv_file
11
+ keys = ["ERROR_HANDLER_WARNING_DISMISS", "ANOTHER_STRING"]
12
+ filename = "test_data"
13
+ strings = {filename => {"ERROR_HANDLER_WARNING_DISMISS" => "OK", "ANOTHER_STRING" => "hello"}}
14
+
15
+ converter = BabelishRnc::Base2Csv.new(:headers => %w{variables english}, :filenames => [filename])
16
+
17
+ converter.send :create_csv_file, keys, strings
18
+ assert File.exist?(converter.csv_filename)
19
+
20
+ # clean up
21
+ system("rm -rf ./" + converter.csv_filename)
22
+ end
23
+
24
+ def test_initialize
25
+ csv_filename = "file.csv"
26
+ filenames = %w{"french.strings english.strings"}
27
+ headers = %w{"constants french english"}
28
+ converter = BabelishRnc::Base2Csv.new({
29
+ :csv_filename => csv_filename,
30
+ :headers => headers,
31
+ :filenames => filenames
32
+ })
33
+
34
+ assert_equal csv_filename, converter.csv_filename
35
+ assert_equal headers, converter.headers
36
+ assert_equal filenames, converter.filenames
37
+ end
38
+
39
+ def test_initialize_with_default_values
40
+ converter = BabelishRnc::Base2Csv.new
41
+ assert_not_nil converter.csv_filename
42
+ end
43
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+ class TestBins < Test::Unit::TestCase
3
+
4
+ def test_csv2strings_with_google_doc
5
+ omit if ENV['TRAVIS']
6
+ assert_nothing_raised do
7
+ system("./bin/babelish_rnc csv2strings --fetch --filename my_strings --langs English:en")
8
+ end
9
+ assert_equal 0, $?.exitstatus
10
+ end
11
+
12
+ def test_csv2strings_with_google_doc_missing_langs
13
+ omit if ENV['TRAVIS']
14
+ assert_nothing_raised do
15
+ system("./bin/babelish_rnc csv2strings --fetch --filename my_strings")
16
+ end
17
+ assert_equal 1, $?.exitstatus
18
+ end
19
+
20
+ def test_csv2strings_with_config_file
21
+ system("cp .babelish.sample .babelish")
22
+
23
+ assert_nothing_raised NameError do
24
+ system("./bin/babelish_rnc csv2strings")
25
+ end
26
+ assert_equal 0, $?.exitstatus
27
+ end
28
+
29
+ def teardown
30
+ system("rm -f .babelish")
31
+ end
32
+ end
@@ -0,0 +1,127 @@
1
+ require 'test_helper'
2
+ class TestCommandLine < Test::Unit::TestCase
3
+
4
+ def test_init
5
+ assert_nothing_raised do
6
+ Commandline.new.init
7
+ end
8
+ # clean up
9
+ system("rm -f .babelish")
10
+ end
11
+
12
+ def test_csv2base_with_config_file_all_required_options
13
+ options = {
14
+ :filename => "test/data/test_data_multiple_langs.csv",
15
+ :langs => {"English" => "en", "French" => "fr"}
16
+ }
17
+ config_file = File.new(".babelish", "w")
18
+ config_file.write options.to_yaml
19
+ config_file.close
20
+
21
+ assert_nothing_raised do
22
+ Commandline.new.csv2strings
23
+ end
24
+
25
+ # clean up
26
+ system("rm -rf ./en.lproj/")
27
+ system("rm -rf ./fr.lproj/")
28
+ system("rm -f .babelish")
29
+ end
30
+
31
+
32
+ def test_csv2base_without_filename_fails
33
+ options = {
34
+ :langs => {"English" => "en", "French" => "fr"}
35
+ }
36
+ config_file = File.new(".babelish", "w")
37
+ config_file.write options.to_yaml
38
+ config_file.close
39
+
40
+ assert_raises do
41
+ Commandline.new.csv2strings
42
+ end
43
+
44
+ # clean up
45
+ system("rm -rf ./en.lproj/")
46
+ system("rm -rf ./fr.lproj/")
47
+ system("rm -f .babelish")
48
+ end
49
+
50
+ def test_base2csv_with_config_file_all_required_options
51
+ options = {
52
+ :filenames => ["test/data/test_en.strings", "test/data/test_fr.strings"],
53
+ }
54
+ config_file = File.new(".babelish", "w")
55
+ config_file.write options.to_yaml
56
+ config_file.close
57
+
58
+ assert_nothing_raised do
59
+ Commandline.new.strings2csv
60
+ end
61
+
62
+ # clean up
63
+ system("rm -f translations.csv")
64
+ system("rm -f .babelish")
65
+ end
66
+
67
+ def test_base2csv_with_config_without_filenames_fails
68
+ options = {}
69
+ config_file = File.new(".babelish", "w")
70
+ config_file.write options.to_yaml
71
+ config_file.close
72
+
73
+ assert_raises do
74
+ Commandline.new.strings2csv
75
+ end
76
+
77
+ # clean up
78
+ system("rm -f .babelish")
79
+ end
80
+
81
+ def test_base2csv_with_config_with_non_existent_filenames_fails
82
+ options = {:filenames => ['foo']}
83
+ config_file = File.new(".babelish", "w")
84
+ config_file.write options.to_yaml
85
+ config_file.close
86
+
87
+ _, stderr = capture_output do
88
+ Commandline.new.strings2csv
89
+ end
90
+ assert_match(/No such file or directory/, stderr)
91
+ assert_match(/foo/, stderr)
92
+
93
+ # clean up
94
+ system("rm -f .babelish")
95
+ end
96
+
97
+ def test_csv_download_without_gd_filename_fails
98
+ options = {}
99
+ config_file = File.new(".babelish", "w")
100
+ config_file.write options.to_yaml
101
+ config_file.close
102
+
103
+ assert_raises do
104
+ Commandline.new.csv_download
105
+ end
106
+
107
+ # clean up
108
+ system("rm -f .babelish")
109
+ end
110
+
111
+
112
+ def test_csv_download_with_required_params
113
+ omit if ENV['TRAVIS']
114
+ options = {:gd_filename => "my_strings"}
115
+ config_file = File.new(".babelish", "w")
116
+ config_file.write options.to_yaml
117
+ config_file.close
118
+
119
+ assert_nothing_raised do
120
+ Commandline.new.csv_download
121
+ end
122
+
123
+ # clean up
124
+ system("rm -f .babelish")
125
+ end
126
+
127
+ end
@@ -0,0 +1,72 @@
1
+ require "test_helper"
2
+ class TestCSV2Android < Test::Unit::TestCase
3
+
4
+ def test_converting_csv_to_xml
5
+ csv_file = "test/data/test_data.csv"
6
+ converter = BabelishRnc::CSV2Android.new(csv_file, "English" => "en")
7
+ converter.convert
8
+ assert File.exist?("values-en/strings.xml"), "the ouptut file does not exist"
9
+
10
+ # clean up
11
+ system("rm -rf ./values-en")
12
+ end
13
+
14
+ def test_converting_csv_with_special_chars
15
+ csv_file = "test/data/android_special_chars.csv"
16
+ converter = BabelishRnc::CSV2Android.new(csv_file, "german" => "de")
17
+ converter.convert
18
+ assert File.exist?("values-de/strings.xml"), "the ouptut file does not exist"
19
+ assert_equal File.read("test/data/android_special_chars_test_result.xml"), File.read("values-de/strings.xml")
20
+
21
+ # clean up
22
+ system("rm -rf ./values-de")
23
+ end
24
+
25
+ def test_converting_csv_to_dotstrings_one_output_option
26
+ csv_file = "test/data/test_data.csv"
27
+ single_file = "myApp.xml"
28
+ converter = BabelishRnc::CSV2Android.new(
29
+ csv_file,
30
+ { "English" => "en" },
31
+ :output_basename => "myApp",
32
+ :ignore_lang_path => true
33
+ )
34
+ converter.convert
35
+ assert File.exist?(single_file), "the ouptut file does not exist"
36
+
37
+ # clean up
38
+ system("rm -rf ./" + single_file)
39
+ end
40
+
41
+ def test_converting_with_comments
42
+ csv_file = "test/data/test_data_with_comments.csv"
43
+ french_file = "values-fr/strings.xml"
44
+ expected_output = File.read("test/data/test_data_fr_with_comments.xml")
45
+ converter = BabelishRnc::CSV2Android.new(
46
+ csv_file,
47
+ { "French" => "fr" },
48
+ :default_lang => "English",
49
+ :comments_column => 5
50
+ )
51
+ converter.convert
52
+ assert File.exist?(french_file), "the ouptut file does not exist"
53
+ result = File.read(french_file)
54
+ assert_equal expected_output, result
55
+
56
+ # clean up
57
+ system("rm -rf values-fr")
58
+ end
59
+
60
+ def test_converting_with_basename
61
+ csv_file = "test/data/test_data.csv"
62
+ converter = BabelishRnc::CSV2Android.new(csv_file,
63
+ { "English" => "en" },
64
+ { output_basename: "super_strings" })
65
+ converter.convert
66
+ exist = File.exist?("values-en/super_strings.xml")
67
+ assert exist, "the ouptut file does not exist"
68
+
69
+ # clean up
70
+ system("rm -rf ./values-en")
71
+ end
72
+ end
@@ -0,0 +1,44 @@
1
+ require 'test_helper'
2
+ class TestCsv2Base < Test::Unit::TestCase
3
+
4
+ def test_initialize
5
+ csv_filename = "file.csv"
6
+ excluded_states = ["German"]
7
+ state_column = "Local"
8
+ keys_column = 23
9
+ converter = BabelishRnc::Csv2Base.new(csv_filename, {"English" => ["en"]}, {
10
+ :excluded_states => excluded_states,
11
+ :state_column => state_column,
12
+ :keys_column => keys_column })
13
+
14
+ assert_equal csv_filename, converter.csv_filename
15
+ assert_equal excluded_states, converter.excluded_states
16
+ assert_equal state_column, converter.state_column
17
+ assert_equal keys_column, converter.keys_column
18
+ end
19
+
20
+ def test_initialize_with_default_values
21
+ converter = BabelishRnc::Csv2Base.new("file.csv", "English" => ["en"])
22
+ assert_not_nil converter.csv_filename
23
+ end
24
+
25
+ def test_initialize_with_custom_separator
26
+ converter = BabelishRnc::Csv2Base.new("file.csv", { "English" => ["en"] }, { :csv_separator => ";" })
27
+ assert_not_nil converter.csv_filename
28
+ end
29
+
30
+ def test_create_file_from_path
31
+ test_file = "test_file.txt"
32
+ BabelishRnc::Csv2Base.new("file.csv", "English" => ["en"]).create_file_from_path test_file
33
+ assert File.exist?(test_file)
34
+
35
+ # clean up
36
+ system("rm -rf ./" + test_file)
37
+ end
38
+
39
+ def test_get_row_format
40
+ expected_output = "\"test_key\" = \"test_value\""
41
+ output = BabelishRnc::Csv2Base.new("file.csv", "English" => ["en"]).get_row_format("test_key", "test_value")
42
+ assert_equal expected_output, output
43
+ end
44
+ end