diff --git a/CHANGELOG.md b/CHANGELOG.md index e221a6361..4537dbeda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ _None_ * Removes the `drawText` binary from the gem (instead depending on it being installed via `brew`). Because this update can not be safely applied with no side effects, it's considered a breaking change. [#312] * When doing Git operations, if no branch is provided, we'll use `trunk` as a default instead of `develop` [#335] +* Remove deprecated `android_merge_translators_strings`, `android_update_metadata`, and `ios_merge_translators_strings` actions [#337] ### New Features diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_merge_translators_strings.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_merge_translators_strings.rb deleted file mode 100644 index 06e3fb542..000000000 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_merge_translators_strings.rb +++ /dev/null @@ -1,106 +0,0 @@ -require 'fastlane/action' -require 'date' -require_relative '../../helper/github_helper' -require_relative '../../helper/ios/ios_version_helper' -require_relative '../../helper/android/android_version_helper' -module Fastlane - module Actions - class AndroidMergeTranslatorsStringsAction < Action - def self.run(params) - folder_path = File.expand_path(params[:strings_folder]) - - subfolders = Dir.entries(folder_path) - subfolders.each do |strings_folder| - merge_folder(File.join(folder_path, strings_folder)) if strings_folder.start_with?('values') - end - end - - def self.merge_folder(strings_folder) - main_file = File.join(strings_folder, 'strings.xml') - return unless File.exist?(main_file) - - UI.message("Merging in: #{strings_folder}") - - tmp_main_file = "#{main_file}.tmp" - FileUtils.cp(main_file, tmp_main_file) - - join_files = Dir.glob(File.join(strings_folder, 'strings-*.xml')) - extra_strings = [] - extra_keys = [] - join_files.each do |join_strings| - my_strings = File.read(join_strings).split("\n") - my_strings.each do |string| - if string.include?('').first - unless extra_keys.include?(string_key) - extra_strings << string - extra_keys << string_key - end - end - end - - File.delete(join_strings) - end - - File.open(main_file, 'w') do |f| - File.open(tmp_main_file).each do |line| - f.puts(extra_strings) if line.strip == '' - f.puts(check_line(line, extra_strings)) - end - end - - File.delete(tmp_main_file) - end - - def self.check_line(line, extra_strings) - return line unless line.include?('').first - extra_strings.each do |overwrite_string| - return '' if overwrite_string.strip.split('>').first == test_line - end - - return line - end - - def self.description - 'Merge strings for translators' - end - - def self.authors - ['Lorenzo Mattei'] - end - - def self.return_value - # If your method provides a return value, you can describe here what it does - end - - def self.details - # Optional: - 'Merges waiting and fuzzy strings into the main file for translators. This action is deprecated in favor of `android_download_translations`' - end - - def self.available_options - [ - FastlaneCore::ConfigItem.new(key: :strings_folder, - env_name: 'AMTS_STRING_FOLDER', - description: 'The folder that contains all the translations', - optional: false, - type: String), - ] - end - - def self.is_supported?(platform) - true - end - - def self.category - :deprecated - end - - def self.deprecated_notes - 'This action is deprecated in favor of `android_download_translations` (using an array for the status_filter parameter)' - end - end - end -end diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_update_metadata.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_update_metadata.rb deleted file mode 100644 index d0d4176e6..000000000 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_update_metadata.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fastlane - module Actions - module SharedValues - ANDROID_UPDATE_METADATA_CUSTOM_VALUE = :ANDROID_UPDATE_METADATA_CUSTOM_VALUE - end - - class AndroidUpdateMetadataAction < Action - def self.run(params) - require_relative '../../helper/android/android_git_helper' - - Fastlane::Helper::Android::GitHelper.update_metadata(ENV['validate_translations']) - end - - ##################################################### - # @!group Documentation - ##################################################### - - def self.description - 'Downloads translated metadata from the translation system' - end - - def self.details - 'Downloads translated metadata from the translation system. This action is deprecated in favor of `android_download_translations`' - end - - def self.available_options - end - - def self.output - end - - def self.return_value - end - - def self.authors - ['loremattei'] - end - - def self.is_supported?(platform) - platform == :android - end - - def self.category - :deprecated - end - - def self.deprecated_notes - 'This action is deprecated in favor of `android_download_translations`' - end - end - end -end diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_merge_translators_strings.rb b/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_merge_translators_strings.rb deleted file mode 100644 index c454857e0..000000000 --- a/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_merge_translators_strings.rb +++ /dev/null @@ -1,101 +0,0 @@ -require 'fastlane/action' -require 'date' -require_relative '../../helper/github_helper' -require_relative '../../helper/ios/ios_version_helper' -module Fastlane - module Actions - class IosMergeTranslatorsStringsAction < Action - def self.run(params) - folder_path = File.expand_path(params[:strings_folder]) - - subfolders = Dir.entries(folder_path) - subfolders.each do |strings_folder| - merge_folder(File.join(folder_path, strings_folder)) if strings_folder.ends_with?('.lproj') - end - end - - def self.merge_folder(strings_folder) - main_file = File.join(strings_folder, 'Localizable.strings') - tmp_main_file = File.join(strings_folder, 'Localizable_current.strings') - return unless File.exist?(main_file) && File.exist?(tmp_main_file) - - UI.message("Merging in: #{strings_folder}") - - join_files = Dir.glob(File.join(strings_folder, 'Localizable_*.strings')) - [tmp_main_file] - extra_strings = [] - extra_keys = [] - join_files.each do |join_strings| - my_strings = File.read(join_strings).split("\n") - my_strings.each do |string| - if string[/^"(.*)" = "(.*)";$/] - /^"(?.*)" = "/i =~ string - unless extra_keys.include?(string_key) - extra_strings << string - extra_keys << string_key - end - end - end - - File.delete(join_strings) - end - - File.open(main_file, 'w') do |f| - File.open(tmp_main_file).each do |line| - f.puts(check_line(line, extra_keys)) - end - f.puts(extra_strings) - end - - File.delete(tmp_main_file) - end - - def self.check_line(line, extra_keys) - return line unless line[/^"(.*)" = "(.*)";$/] - - /^"(?.*)" = "/i =~ line - return '' if extra_keys.include?(line_key) - - return line - end - - def self.description - 'Merge strings for translators' - end - - def self.authors - ['Lorenzo Mattei'] - end - - def self.return_value - # If your method provides a return value, you can describe here what it does - end - - def self.details - # Optional: - 'Merges waiting and fuzzy strings into the main file for translators' - end - - def self.available_options - [ - FastlaneCore::ConfigItem.new(key: :strings_folder, - env_name: 'IMTS_STRING_FOLDER', - description: 'The folder that contains all the translations', - optional: false, - type: String), - ] - end - - def self.category - :deprecated - end - - def self.deprecated_notes - 'This action is deprecated. For a similar feature, you might want to check `ios_merge_strings_file` instead' - end - - def self.is_supported?(platform) - :ios - end - end - end -end diff --git a/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_git_helper.rb b/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_git_helper.rb index 33dad2971..d9768e830 100644 --- a/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_git_helper.rb +++ b/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_git_helper.rb @@ -27,26 +27,6 @@ def self.commit_version_bump ) end end - - # Calls the `tools/update-translations.sh` script from the project repo, then lint them using the provided gradle task - # - # Deprecated. Use the `android_download_translations` action instead. - # - # @env PROJECT_ROOT_FOLDER The path to the git root of the project - # @env PROJECT_NAME The name of the directory containing the project code (especially containing the `build.gradle` file) - # - # @param [String] validate_translation_command The name of the gradle task to run to validate the translations - # - # @todo Remove this once every client has migrated to `android_download_translations` and we got rid of that legacy action. - # - def self.update_metadata(validate_translation_command) - Action.sh('./tools/update-translations.sh') - Action.sh('git', 'submodule', 'update', '--init', '--recursive') - Action.sh('./gradlew', validate_translation_command) - - res_dir = File.join(ENV['PROJECT_ROOT_FOLDER'], ENV['PROJECT_NAME'], 'src', 'main', 'res') - Fastlane::Helper::GitHelper.commit(message: 'Update translations', files: res_dir, push: true) - end end end end diff --git a/spec/android_merge_translators_strings_spec.rb b/spec/android_merge_translators_strings_spec.rb deleted file mode 100644 index e7695b7ae..000000000 --- a/spec/android_merge_translators_strings_spec.rb +++ /dev/null @@ -1,85 +0,0 @@ -require 'spec_helper' -require 'tmpdir' - -describe Fastlane::Actions::AndroidMergeTranslatorsStringsAction do - before do - @amtsTestUtils = AMTSTestUtils.new - @amtsTestUtils.create_test_folder - end - - it 'checks no merge' do - amts_run_test('test-merge-android-nomerge.json') - end - - it 'checks merge simple' do - amts_run_test('test-merge-android-merge-simple.json') - end - - it 'checks merge overwrite' do - amts_run_test('test-merge-android-merge-overwrite.json') - end - - it 'checks merge overwrite with double key in pending file' do - amts_run_test('test-merge-android-merge-overwrite-double.json') - end - - it 'checks merge overwrite with fuzzy strings' do - amts_run_test('test-merge-android-merge-overwrite-fuzzy.json') - end - - after do - @amtsTestUtils.delete_test_folder - end -end - -def amts_run_test(script) - test_script = @amtsTestUtils.get_test_from_file(script) - @amtsTestUtils.create_test_data(test_script) - run_described_fastlane_action(strings_folder: @amtsTestUtils.test_folder_path) - expect(@amtsTestUtils.read_result_data(test_script)).to eq(test_script['result']['content']) -end - -class AMTSTestUtils - attr_accessor :test_folder_path - - def initialize - @test_folder_path = File.join(Dir.tmpdir(), 'amts_tests') - end - - def create_test_folder - FileUtils.mkdir_p(@test_folder_path) - end - - def delete_test_folder - FileUtils.rm_rf(@test_folder_path) - end - - def get_test_from_file(filename) - filename = self.test_data_path_for("translations/#{filename}") - return JSON.parse(open(filename).read) - end - - def test_data_path_for(filename) - File.expand_path(File.join(File.dirname(__FILE__), 'test-data', filename)) - end - - def create_test_data(test_script) - test_script['test_data'].each do |test_file| - self.generate_test_file(test_file['file'], test_file['content']) - end - end - - def generate_test_file(filename, content) - file_path = File.join(@test_folder_path, filename) - - dir = File.dirname(file_path) - FileUtils.mkdir_p(dir) unless File.directory?(dir) - - File.open(file_path, 'w') { |f| f.write(content) } - end - - def read_result_data(test_script) - file_path = File.join(@test_folder_path, test_script['result']['file']) - return File.read(file_path) - end -end diff --git a/spec/ios_merge_translators_strings_spec.rb b/spec/ios_merge_translators_strings_spec.rb deleted file mode 100644 index 4ae829f8f..000000000 --- a/spec/ios_merge_translators_strings_spec.rb +++ /dev/null @@ -1,85 +0,0 @@ -require 'spec_helper' -require 'tmpdir' - -describe Fastlane::Actions::IosMergeTranslatorsStringsAction do - before do - @imtsTestUtils = IMTSTestUtils.new - @imtsTestUtils.create_test_folder - end - - it 'checks no merge' do - imts_run_test('test-merge-ios-nomerge.json') - end - - it 'checks merge simple' do - imts_run_test('test-merge-ios-merge-simple.json') - end - - it 'checks merge overwrite' do - imts_run_test('test-merge-ios-merge-overwrite.json') - end - - it 'checks merge overwrite with double key in pending file' do - imts_run_test('test-merge-ios-merge-overwrite-double.json') - end - - it 'checks merge overwrite with fuzzy strings' do - imts_run_test('test-merge-ios-merge-overwrite-fuzzy.json') - end - - after do - @imtsTestUtils.delete_test_folder - end -end - -def imts_run_test(script) - test_script = @imtsTestUtils.get_test_from_file(script) - @imtsTestUtils.create_test_data(test_script) - run_described_fastlane_action(strings_folder: @imtsTestUtils.test_folder_path) - expect(@imtsTestUtils.read_result_data(test_script)).to eq(test_script['result']['content']) -end - -class IMTSTestUtils - attr_accessor :test_folder_path - - def initialize - @test_folder_path = File.join(Dir.tmpdir(), 'imts_tests') - end - - def create_test_folder - FileUtils.mkdir_p(@test_folder_path) - end - - def delete_test_folder - FileUtils.rm_rf(@test_folder_path) - end - - def get_test_from_file(filename) - filename = self.test_data_path_for("translations/#{filename}") - return JSON.parse(open(filename).read) - end - - def test_data_path_for(filename) - File.expand_path(File.join(File.dirname(__FILE__), 'test-data', filename)) - end - - def create_test_data(test_script) - test_script['test_data'].each do |test_file| - self.generate_test_file(test_file['file'], test_file['content']) - end - end - - def generate_test_file(filename, content) - file_path = File.join(@test_folder_path, filename) - - dir = File.dirname(file_path) - FileUtils.mkdir_p(dir) unless File.directory?(dir) - - File.open(file_path, 'w') { |f| f.write(content) } - end - - def read_result_data(test_script) - file_path = File.join(@test_folder_path, test_script['result']['file']) - return File.read(file_path) - end -end diff --git a/spec/test-data/translations/test-merge-android-merge-overwrite-double.json b/spec/test-data/translations/test-merge-android-merge-overwrite-double.json deleted file mode 100644 index 141109f78..000000000 --- a/spec/test-data/translations/test-merge-android-merge-overwrite-double.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "test_data": - [ - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\n" - }, - { - "file": "values/strings-pending.xml", - "content": - "\n\n\tGoodbye\n\tTest_Overwrite\n\tTest_Overwrite2\n\n" - } - ], - "result": - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\n\tHi\n\tGoodbye\n\tTest_Overwrite\n\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-android-merge-overwrite-fuzzy.json b/spec/test-data/translations/test-merge-android-merge-overwrite-fuzzy.json deleted file mode 100644 index dc39d7d89..000000000 --- a/spec/test-data/translations/test-merge-android-merge-overwrite-fuzzy.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "test_data": - [ - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\n" - }, - { - "file": "values/strings-pending.xml", - "content": - "\n\n\tGoodbye\n\tTest_Overwrite\n\tTest_Overwrite2\n\n" - }, - { - "file": "values/strings-fuzzy.xml", - "content": - "\n\n\tHiFive\n\n" - } - ], - "result": - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\n\tHi\n\tGoodbye\n\tTest_Overwrite\n\tHiFive\n\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-android-merge-overwrite.json b/spec/test-data/translations/test-merge-android-merge-overwrite.json deleted file mode 100644 index c889237b3..000000000 --- a/spec/test-data/translations/test-merge-android-merge-overwrite.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "test_data": - [ - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\n" - }, - { - "file": "values/strings-pending.xml", - "content": - "\n\n\tGoodbye\n\tTest_Overwrite\n\n" - } - ], - "result": - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\n\tHi\n\tGoodbye\n\tTest_Overwrite\n\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-android-merge-simple.json b/spec/test-data/translations/test-merge-android-merge-simple.json deleted file mode 100644 index 695ce9aac..000000000 --- a/spec/test-data/translations/test-merge-android-merge-simple.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "test_data": - [ - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\n" - }, - { - "file": "values/strings-pending.xml", - "content": - "\n\n\tGoodbye\n\n" - } - ], - "result": - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\tGoodbye\n\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-android-nomerge.json b/spec/test-data/translations/test-merge-android-nomerge.json deleted file mode 100644 index cc5b2a912..000000000 --- a/spec/test-data/translations/test-merge-android-nomerge.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "test_data": - [ - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\n" - } - ], - "result": - { - "file": "values/strings.xml", - "content": - "\n\n\tHello\n\tTest\n\tHi\n\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-ios-merge-overwrite-double.json b/spec/test-data/translations/test-merge-ios-merge-overwrite-double.json deleted file mode 100644 index de5848e90..000000000 --- a/spec/test-data/translations/test-merge-ios-merge-overwrite-double.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "test_data": - [ - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n" - }, - { - "file": "en.lproj/Localizable_current.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string 1\" = \"String 1\";\n\"string 2\" = \"String 2\";\n\"string 3\" = \"String 3\";\n" - }, - { - "file": "en.lproj/Localizable_pending.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string goodbye\" = \"String GoodBye\";\n\"string 2\" = \"Test\";\n\"string 2\" = \"Test Overwrite 2\";\n" - } - ], - "result": - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string 1\" = \"String 1\";\n\n\"string 3\" = \"String 3\";\n\"string goodbye\" = \"String GoodBye\";\n\"string 2\" = \"Test\";\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-ios-merge-overwrite-fuzzy.json b/spec/test-data/translations/test-merge-ios-merge-overwrite-fuzzy.json deleted file mode 100644 index 38afd5f92..000000000 --- a/spec/test-data/translations/test-merge-ios-merge-overwrite-fuzzy.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "test_data": - [ - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n" - }, - { - "file": "en.lproj/Localizable_current.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string 1\" = \"String 1\";\n\"string 2\" = \"String 2\";\n\"string 3\" = \"String 3\";\n" - }, - { - "file": "en.lproj/Localizable_pending.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string goodbye\" = \"String GoodBye\";\n\"string 2\" = \"Test\";\n\"string 2\" = \"Test Overwrite 2\";\n" - }, - { - "file": "en.lproj/Localizable_fuzzy.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string highfive\" = \"String HigFive\";\n" - } - ], - "result": - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string 1\" = \"String 1\";\n\n\"string 3\" = \"String 3\";\n\"string highfive\" = \"String HigFive\";\n\"string goodbye\" = \"String GoodBye\";\n\"string 2\" = \"Test\";\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-ios-merge-overwrite.json b/spec/test-data/translations/test-merge-ios-merge-overwrite.json deleted file mode 100644 index e5613ca13..000000000 --- a/spec/test-data/translations/test-merge-ios-merge-overwrite.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "test_data": - [ - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n" - }, - { - "file": "en.lproj/Localizable_current.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string 1\" = \"String 1\";\n\"string 2\" = \"String 2\";\n\"string 3\" = \"String 3\";\n" - }, - { - "file": "en.lproj/Localizable_pending.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string goodbye\" = \"String GoodBye\";\n\"string 2\" = \"Test\";\n" - } - ], - "result": - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string 1\" = \"String 1\";\n\n\"string 3\" = \"String 3\";\n\"string goodbye\" = \"String GoodBye\";\n\"string 2\" = \"Test\";\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-ios-merge-simple.json b/spec/test-data/translations/test-merge-ios-merge-simple.json deleted file mode 100644 index 4a2ec1935..000000000 --- a/spec/test-data/translations/test-merge-ios-merge-simple.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "test_data": - [ - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n" - }, - { - "file": "en.lproj/Localizable_current.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\t\"string 1\" = \"String 1\";\n\t\"string 2\" = \"String 2\";\n\t\"string 3\" = \"String 3\";\n" - }, - { - "file": "en.lproj/Localizable_pending.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\"string goodbye\" = \"String GoodBye\";\n" - } - ], - "result": - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n\t\"string 1\" = \"String 1\";\n\t\"string 2\" = \"String 2\";\n\t\"string 3\" = \"String 3\";\n\"string goodbye\" = \"String GoodBye\";\n" - } -} \ No newline at end of file diff --git a/spec/test-data/translations/test-merge-ios-nomerge.json b/spec/test-data/translations/test-merge-ios-nomerge.json deleted file mode 100644 index 9ab105e64..000000000 --- a/spec/test-data/translations/test-merge-ios-nomerge.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "test_data": - [ - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial comment */\n" - }, - { - "file": "en.lproj/Localizable_current.strings", - "content": - "/* Translation-Revision-Date: Initial commend */\n\t\"string 1\" = \"String 1\";\n\t\"string 2\" = \"String 2\";\n\t\"string 3\" = \"String 3\";\n" - } - ], - "result": - { - "file": "en.lproj/Localizable.strings", - "content": - "/* Translation-Revision-Date: Initial commend */\n\t\"string 1\" = \"String 1\";\n\t\"string 2\" = \"String 2\";\n\t\"string 3\" = \"String 3\";\n" - } -} \ No newline at end of file