From 93ea471cbb45a4b47ebeceaadcc2e639996bf418 Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Wed, 17 Mar 2010 21:27:15 -0700 Subject: [PATCH] Externalize ADT JUnit launch strings. Bug 1722668 Change-Id: I260525aaccbd6e243b43d4229ef943978f9c1cf1 --- .../adt/internal/launch/LaunchMessages.java | 54 ++++++++++++++++++++++ .../launch/junit/AndroidJUnitLaunchAction.java | 9 ++-- .../junit/AndroidJUnitLaunchConfigDelegate.java | 18 ++++---- .../junit/AndroidJUnitLaunchConfigurationTab.java | 13 ++++-- .../junit/InstrumentationRunnerValidator.java | 8 ++-- .../launch/junit/runtime/RemoteAdtTestRunner.java | 9 ++-- .../adt/internal/launch/messages.properties | 38 +++++++++++++++ 7 files changed, 126 insertions(+), 23 deletions(-) create mode 100644 eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchMessages.java create mode 100644 eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/messages.properties diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchMessages.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchMessages.java new file mode 100644 index 000000000..c10521580 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchMessages.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.launch; + +import org.eclipse.osgi.util.NLS; + +public class LaunchMessages extends NLS { + private static final String BUNDLE_NAME = "com.android.ide.eclipse.adt.internal.launch.messages"; //$NON-NLS-1$ + + // generic messages that could be used by multiple classes + public static String LaunchDialogTitle; + public static String NonAndroidProjectError; + public static String ParseFileFailure_s; + + // specialized, class-specific messages + public static String AndroidJUnitLaunchAction_LaunchDesc_s; + public static String AndroidJUnitLaunchAction_LaunchFail; + public static String AndroidJUnitLaunchAction_LaunchInstr_2s; + public static String AndroidJUnitDelegate_NoRunnerConfigMsg_s; + public static String AndroidJUnitDelegate_NoRunnerConsoleMsg_4s; + public static String AndroidJUnitDelegate_NoRunnerMsg_s; + public static String AndroidJUnitDelegate_NoTargetMsg_3s; + public static String AndroidJUnitTab_LoaderLabel; + public static String AndroidJUnitTab_LoadInstrError_s; + public static String AndroidJUnitTab_NoRunnerError; + public static String AndroidJUnitTab_TestContainerText; + public static String InstrValidator_NoTestLibMsg_s; + public static String InstrValidator_WrongRunnerTypeMsg_s; + public static String RemoteAdtTestRunner_RunCompleteMsg; + public static String RemoteAdtTestRunner_RunFailedMsg_s; + public static String RemoteAdtTestRunner_RunStoppedMsg; + + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, LaunchMessages.class); + } + + private LaunchMessages() { + } +} diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java index 523db3e88..fcb859acf 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java @@ -19,6 +19,7 @@ import com.android.ddmlib.IDevice; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.launch.DelayedLaunchInfo; import com.android.ide.eclipse.adt.internal.launch.IAndroidLaunchAction; +import com.android.ide.eclipse.adt.internal.launch.LaunchMessages; import com.android.ide.eclipse.adt.internal.launch.junit.runtime.AndroidJUnitLaunchInfo; import com.android.ide.eclipse.adt.internal.launch.junit.runtime.RemoteAdtTestRunner; @@ -56,7 +57,7 @@ class AndroidJUnitLaunchAction implements IAndroidLaunchAction { * @see IAndroidLaunchAction#doLaunchAction(DelayedLaunchInfo, IDevice) */ public boolean doLaunchAction(DelayedLaunchInfo info, IDevice device) { - String msg = String.format("Launching instrumentation %s on device %s", + String msg = String.format(LaunchMessages.AndroidJUnitLaunchAction_LaunchInstr_2s, mLaunchInfo.getRunner(), device.getSerialNumber()); AdtPlugin.printToConsole(info.getProject(), msg); @@ -72,7 +73,8 @@ class AndroidJUnitLaunchAction implements IAndroidLaunchAction { // TODO: need to add AMReceiver-type functionality somewhere } catch (CoreException e) { - AdtPlugin.printErrorToConsole(info.getProject(), "Failed to launch test"); + AdtPlugin.printErrorToConsole(info.getProject(), + LaunchMessages.AndroidJUnitLaunchAction_LaunchFail); } return true; } @@ -81,7 +83,8 @@ class AndroidJUnitLaunchAction implements IAndroidLaunchAction { * {@inheritDoc} */ public String getLaunchDescription() { - return String.format("%s JUnit launch", mLaunchInfo.getRunner()); + return String.format(LaunchMessages.AndroidJUnitLaunchAction_LaunchDesc_s, + mLaunchInfo.getRunner()); } /** diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java index 5c5a79a38..6ad67ad2c 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java @@ -23,6 +23,7 @@ import com.android.ide.eclipse.adt.internal.launch.AndroidLaunchConfiguration; import com.android.ide.eclipse.adt.internal.launch.AndroidLaunchController; import com.android.ide.eclipse.adt.internal.launch.IAndroidLaunchAction; import com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate; +import com.android.ide.eclipse.adt.internal.launch.LaunchMessages; import com.android.ide.eclipse.adt.internal.launch.junit.runtime.AndroidJUnitLaunchInfo; import com.android.ide.eclipse.adt.internal.project.AndroidManifestParser; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; @@ -63,8 +64,8 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate { String runner = getRunner(project, configuration, manifestParser); if (runner == null) { - AdtPlugin.displayError("Android Launch", - String.format("%1$s is not configured correctly for running tests. See Console for details.", + AdtPlugin.displayError(LaunchMessages.LaunchDialogTitle, + String.format(LaunchMessages.AndroidJUnitDelegate_NoRunnerMsg_s, project.getName())); androidLaunch.stopLaunch(); return; @@ -72,8 +73,8 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate { // get the target app's package String targetAppPackage = getTargetPackage(manifestParser, runner); if (targetAppPackage == null) { - AdtPlugin.displayError("Android Launch", - String.format("%1$s is not configured correctly for running tests:\nA targetPackage attribute for instrumentation %2$s in its %3$s could not be found!", + AdtPlugin.displayError(LaunchMessages.LaunchDialogTitle, + String.format(LaunchMessages.AndroidJUnitDelegate_NoTargetMsg_3s, project.getName(), runner, AndroidConstants.FN_ANDROID_MANIFEST)); androidLaunch.stopLaunch(); return; @@ -178,13 +179,12 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate { BaseProjectHelper.getJavaProject(project), manifestParser); runner = instrFinder.getValidInstrumentationTestRunner(); if (runner != null) { - AdtPlugin.printErrorToConsole(project, - String.format("Warning: No instrumentation runner found for the launch, " + - "using %1$s", runner)); + AdtPlugin.printErrorToConsole(project, String.format( + LaunchMessages.AndroidJUnitDelegate_NoRunnerConfigMsg_s, runner)); return runner; } - AdtPlugin.printErrorToConsole(project, - String.format("%1$s does not specify a %2$s instrumentation or does not declare uses-library %3$s in its %4$s", + AdtPlugin.printErrorToConsole(project, String.format( + LaunchMessages.AndroidJUnitDelegate_NoRunnerConsoleMsg_4s, project.getName(), AndroidConstants.CLASS_INSTRUMENTATION_RUNNER, AndroidConstants.LIBRARY_TEST_RUNNER, diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java index fc96d7a84..0850e14c5 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigurationTab.java @@ -17,6 +17,7 @@ package com.android.ide.eclipse.adt.internal.launch.junit; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; +import com.android.ide.eclipse.adt.internal.launch.LaunchMessages; import com.android.ide.eclipse.adt.internal.launch.MainLaunchConfigTab; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.project.ProjectChooserHelper; @@ -242,7 +243,7 @@ public class AndroidJUnitLaunchConfigurationTab extends AbstractLaunchConfigurat private void createTestContainerSelectionGroup(Composite comp) { mTestContainerRadioButton = new Button(comp, SWT.RADIO); mTestContainerRadioButton.setText( - "Run all tests in the selected project, or package"); + LaunchMessages.AndroidJUnitTab_TestContainerText); GridData gd = new GridData(); gd.horizontalSpan = 3; mTestContainerRadioButton.setLayoutData(gd); @@ -280,7 +281,7 @@ public class AndroidJUnitLaunchConfigurationTab extends AbstractLaunchConfigurat private void createInstrumentationGroup(Composite comp) { Label loaderLabel = new Label(comp, SWT.NONE); - loaderLabel.setText("Instrumentation runner:"); + loaderLabel.setText(LaunchMessages.AndroidJUnitTab_LoaderLabel); GridData gd = new GridData(); gd.horizontalIndent = 0; loaderLabel.setLayoutData(gd); @@ -663,7 +664,8 @@ public class AndroidJUnitLaunchConfigurationTab extends AbstractLaunchConfigurat try { if (!project.hasNature(AndroidConstants.NATURE)) { - setErrorMessage("Specified project is not an Android project"); + setErrorMessage( + LaunchMessages.NonAndroidProjectError); return; } String className = mTestText.getText().trim(); @@ -694,7 +696,7 @@ public class AndroidJUnitLaunchConfigurationTab extends AbstractLaunchConfigurat private void validateInstrumentation() { String instrumentation = getSelectedInstrumentation(); if (instrumentation == null) { - setErrorMessage("Instrumentation runner not specified"); + setErrorMessage(LaunchMessages.AndroidJUnitTab_NoRunnerError); return; } String result = mInstrValidator.validateInstrumentationRunner(instrumentation); @@ -966,7 +968,8 @@ public class AndroidJUnitLaunchConfigurationTab extends AbstractLaunchConfigurat return; } } catch (CoreException e) { - AdtPlugin.logAndPrintError(e, project.getName(), "Failed to load instrumentations from %1$s", + AdtPlugin.logAndPrintError(e, project.getName(), + LaunchMessages.AndroidJUnitTab_LoadInstrError_s, AndroidConstants.FN_ANDROID_MANIFEST); } // if we reach this point, either project is null, or we got an exception during diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/InstrumentationRunnerValidator.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/InstrumentationRunnerValidator.java index 71c66280b..cadb7c104 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/InstrumentationRunnerValidator.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/InstrumentationRunnerValidator.java @@ -17,6 +17,7 @@ package com.android.ide.eclipse.adt.internal.launch.junit; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; +import com.android.ide.eclipse.adt.internal.launch.LaunchMessages; import com.android.ide.eclipse.adt.internal.project.AndroidManifestParser; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.project.AndroidManifestParser.Instrumentation; @@ -47,7 +48,7 @@ class InstrumentationRunnerValidator { null /* errorListener */, true /* gatherData */, false /* markErrors */); init(manifestParser); } catch (CoreException e) { - AdtPlugin.printErrorToConsole(javaProject.getProject(), "Failed to parse %1$s", + AdtPlugin.printErrorToConsole(javaProject.getProject(), LaunchMessages.ParseFileFailure_s, AndroidConstants.FN_ANDROID_MANIFEST); } } @@ -132,7 +133,7 @@ class InstrumentationRunnerValidator { */ String validateInstrumentationRunner(String instrumentation) { if (!mHasRunnerLibrary) { - return String.format("The application does not declare uses-library %1$s", + return String.format(LaunchMessages.InstrValidator_NoTestLibMsg_s, AndroidConstants.LIBRARY_TEST_RUNNER); } // check if this instrumentation is the standard test runner @@ -141,7 +142,8 @@ class InstrumentationRunnerValidator { String result = BaseProjectHelper.testClassForManifest(mJavaProject, instrumentation, AndroidConstants.CLASS_INSTRUMENTATION_RUNNER, true); if (result != BaseProjectHelper.TEST_CLASS_OK) { - return String.format("The instrumentation runner must be of type %s", + return String.format( + LaunchMessages.InstrValidator_WrongRunnerTypeMsg_s, AndroidConstants.CLASS_INSTRUMENTATION_RUNNER); } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java index e2afc4085..af8725431 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java @@ -20,6 +20,7 @@ import com.android.ddmlib.testrunner.ITestRunListener; import com.android.ddmlib.testrunner.RemoteAndroidTestRunner; import com.android.ddmlib.testrunner.TestIdentifier; import com.android.ide.eclipse.adt.AdtPlugin; +import com.android.ide.eclipse.adt.internal.launch.LaunchMessages; import org.eclipse.jdt.internal.junit.runner.MessageIds; import org.eclipse.jdt.internal.junit.runner.RemoteTestRunner; @@ -154,7 +155,7 @@ public class RemoteAdtTestRunner extends RemoteTestRunner { */ private void reportError(String errorMessage) { AdtPlugin.printErrorToConsole(mLaunchInfo.getProject(), - String.format("Test run failed: %s", errorMessage)); + String.format(LaunchMessages.RemoteAdtTestRunner_RunFailedMsg_s, errorMessage)); // is this needed? //notifyTestRunStopped(-1); } @@ -192,7 +193,8 @@ public class RemoteAdtTestRunner extends RemoteTestRunner { */ public void testRunEnded(long elapsedTime) { notifyTestRunEnded(elapsedTime); - AdtPlugin.printToConsole(mLaunchInfo.getProject(), "Test run complete"); + AdtPlugin.printToConsole(mLaunchInfo.getProject(), + LaunchMessages.RemoteAdtTestRunner_RunCompleteMsg); } /* (non-Javadoc) @@ -214,7 +216,8 @@ public class RemoteAdtTestRunner extends RemoteTestRunner { */ public void testRunStopped(long elapsedTime) { notifyTestRunStopped(elapsedTime); - AdtPlugin.printToConsole(mLaunchInfo.getProject(), "Test run stopped"); + AdtPlugin.printToConsole(mLaunchInfo.getProject(), + LaunchMessages.RemoteAdtTestRunner_RunStoppedMsg); } /* (non-Javadoc) diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/messages.properties b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/messages.properties new file mode 100644 index 000000000..756aa616b --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/messages.properties @@ -0,0 +1,38 @@ +# +# Copyright (C) 2010 The Android Open Source Project +# +# Licensed under the Eclipse Public License, Version 1.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.eclipse.org/org/documents/epl-v10.php +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# generic messages that could be used by multiple classes +LaunchDialogTitle=Android Launch +NonAndroidProjectError=Specified project is not an Android project +ParseFileFailure_s=Failed to parse %1$s file + +# specialized, class-specific messages +AndroidJUnitLaunchAction_LaunchDesc_s=%1$s JUnit launch +AndroidJUnitLaunchAction_LaunchFail=Failed to launch test +AndroidJUnitLaunchAction_LaunchInstr_2s=Launching instrumentation %1$s on device %2$s +AndroidJUnitDelegate_NoRunnerConfigMsg_s=Warning: No instrumentation runner found for the launch, using %1$s +AndroidJUnitDelegate_NoRunnerConsoleMsg_4s=%1$s does not specify a %2$s instrumentation or does not declare uses-library %3$s in its %4$s +AndroidJUnitDelegate_NoRunnerMsg_s=%1$s is not configured correctly for running tests. See Console for details. +AndroidJUnitDelegate_NoTargetMsg_3s=%1$s is not configured correctly for running tests:\nA targetPackage attribute for instrumentation %2$s in its %3$s could not be found\! +AndroidJUnitTab_LoaderLabel=Instrumentation runner: +AndroidJUnitTab_LoadInstrError_s=Failed to load instrumentations from %1$s +AndroidJUnitTab_NoRunnerError=Instrumentation runner not specified +AndroidJUnitTab_TestContainerText=Run all tests in the selected project, or package +InstrValidator_NoTestLibMsg_s=The application does not declare uses-library %1$s +InstrValidator_WrongRunnerTypeMsg_s=The instrumentation runner must be of type %1$s +RemoteAdtTestRunner_RunCompleteMsg=Test run complete +RemoteAdtTestRunner_RunFailedMsg_s=Test run failed: %1$s +RemoteAdtTestRunner_RunStoppedMsg=Test run stopped -- 2.11.0