###############################################################################
# Copyright (c) 2000, 2003 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials 
# are made available under the terms of the Common Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/cpl-v10.html
# 
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
#
# Miscellaneous
#
Wizard.title.new.testcase=New JUnit Test Case
Wizard.title.new.testsuite=New JUnit Test Suite
#
# CheckedTableSelectionDialog
#
CheckedTableSelectionDialog.emptyListMessage=No entries available.
CheckedTableSelectionDialog.selectAll=&Select All
CheckedTableSelectionDialog.deselectAll=&Deselect All

#
# NewTestCaseCreationWizard Page 1
#
NewTestClassWizPage.title=JUnit Test Case
NewTestClassWizPage.description=Select the name of the new JUnit test case. Optionally, specify the class and methods to be tested.
NewTestClassWizPage.methodStub.testRunner=&Add TestRunner statement for:
NewTestClassWizPage.methodStub.setUp=set&Up()
NewTestClassWizPage.methodStub.tearDown=tearDow&n()
NewTestClassWizPage.methodStub.constructor=&constructor()
NewTestClassWizPage.method.Stub.label=Which method stubs would you like to create?
NewTestClassWizPage.class_to_test.label=&Class to test:
NewTestClassWizPage.class_to_test.browse=B&rowse...
NewTestClassWizPage.class_to_test.dialog.title=Class to Test
NewTestClassWizPage.class_to_test.dialog.message=Class for which tests shall be written:
NewTestClassWizPage.marker.message=\ Implement {0}().
NewTestClassWizPage.error.superclass.not_exist=Superclass does not exist.
NewTestClassWizPage.error.superclass.is_interface=Superclass is an interface.
NewTestClassWizPage.error.superclass.not_implementing_test_interface=Superclass does not implement the ''{0}'' interface.
NewTestClassWizPage.error.superclass.empty=Super class name is empty
NewTestClassWizPage.testcase.label=&Name:
NewTestClassWizPage.error.class_to_test.not_valid=Class to test is not valid.
NewTestClassWizPage.error.class_to_test.not_exist=Class to test does not exist in current project.
NewTestClassWizPage.warning.class_to_test.is_interface=Warning: Class to test ''{0}'' is an interface.
NewTestClassWizPage.warning.class_to_test.not_visible=Warning: {0} ''{1}'' is not visible.
NewTestClassWizPage.comment.class_to_test=Class to test for {0} {1}
NewTestClassWizPage.error.junitNotOnbuildpath=junit.jar is not on the project\'s build path. 
NewTestClassWizPage.info.add_to_classpath=Warning: {0} ''{1}'' is not visible.

Interface=Interface
Class=Class

#
# NewTestCaseCreationWizard Page 2
#
NewTestClassWizPage2.selected_methods.label_one={0} method selected.
NewTestClassWizPage2.selected_methods.label_many={0} methods selected.
NewTestClassWizPage2.title=Test Methods
NewTestClassWizPage2.description=Select methods for which test method stubs should be created.
NewTestClassWizPage2.create_tasks.text=Create &tasks for generated test methods
NewTestClassWizPage2.create_final_method_stubs.text=Create &final method stubs
NewTestClassWizPage2.create_constructor.text=&Create test case constructor
NewTestClassWizPage2.methods_tree.label=Available &methods:
NewTestClassWizPage2.selectAll=&Select All
NewTestClassWizPage2.deselectAll=&Deselect All
NewTestClassWizPage2.method.Stub.label=Would you like to create a method stub for main?

#
# NewTestSuiteCreationWizard
#
NewTestSuiteWiz.unsavedchangesDialog.title=Unsaved changes
NewTestSuiteWiz.unsavedchangesDialog.message={0} contains unsaved changes. Save before updating?

#
# NewTestSuiteCreationWizard Page
#
NewTestSuiteWizPage.title=JUnit Test Suite
NewTestSuiteWizPage.description=Create a new JUnit Test Suite class for a package
NewTestSuiteWizPage.classes_in_suite.label=Test &Classes to include in Suite:
NewTestSuiteWizPage.selectAll=&Select All
NewTestSuiteWizPage.deselectAll=D&eselect All
NewTestSuiteWizPage.createType.beginTask=Creating test suite....
NewTestSuiteWizPage.createType.updating.suite_method=Updating existing suite() method
NewTestSuiteWizPage.createType.updateErrorDialog.title=Error updating class
NewTestSuiteWizPage.createType.updateErrorDialog.message=There is no source associated with this class file
NewTestSuiteWizPage.classes_in_suite.error.no_testclasses_selected=Warning: No Test Classes selected
NewTestSuiteWizPage.suiteName.text=&Test suite:
NewTestSuiteWizPage.typeName.error.name_empty=Test suite name is empty
NewTestSuiteWizPage.typeName.error.name_qualified=Test suite name must not be qualified
NewTestSuiteWizPage.typeName.error.name_not_valid=Test suite name is not valid. 
NewTestSuiteWizPage.typeName.error.name.name_discouraged=Warning: Test suite name is discouraged. 
NewTestSuiteWizPage.typeName.warning.already_exists=Warning: Test suite already exists. suite() method will be replaced.
NewTestSuiteWizPage.cannotUpdateDialog.title=Cannot update suite() method
NewTestSuiteWizPage.cannotUpdateDialog.message=The code in suite() that the wizard replaces must start with {0} and end with {1}
NewTestSuiteWizPage.error_tile=New Test Suite
NewTestSuiteWizPage.error_message=Creation of new test suite failed:
NewTestClassWizPage.treeCaption.classSelected={0} class selected
NewTestClassWizPage.treeCaption.classesSelected={0} classes selected
NewTestSuiteCreationWizardPage.infinite_recursion=Warning: Adding a test suite as a test case in itself will result in infinite recursion and StackOverflowError

#
# UpdateTestSuite
#
UpdateAllTests.selected_methods.label_one={0} type selected.
UpdateAllTests.selected_methods.label_many={0} types selected.
UpdateAllTests.title=Recreate Test Suite
UpdateAllTests.message=&Test Classes to be included
UpdateAllTests.beginTask=Recreating suite() method....
UpdateAllTests.cannotUpdate.errorDialog.title=Cannot recreate suite() method.
UpdateAllTests.cannotUpdate.errorDialog.message=The code in suite() that the wizard replaces must start with {0} and end with {1}
UpdateAllTests.cannotFind.errorDialog.title=Cannot find suite() method.
UpdateAllTests.cannotFind.errorDialog.message=No suite() method could be found.

#
# JUnitWizard
#
NewJUnitWizard.op_error.title=New
NewJUnitWizard.op_error.message=Creation of element failed.

#
# ExceptionHandler
#
ExceptionDialog.seeErrorLogMessage= See error log for more details.
UpdateTestSuite.infinite_recursion=Adding suite to itself may result in StackOverflowError
UpdateTestSuite.error=Error occurred
UpdateTestSuite.update=Update JUnit Test Suite
UpdateTestSuite.could_not_update=The test suite could not be updated
NewTestClassWizPage.not_on_buildpath.title=New Test Case
NewTestClassWizPage.not_on_buildpath.message=The JUnit library \'junit.jar\' is not on the build path. Do you want to add it?
NewTestClassWizPage.cannot_add.title=Error
NewTestClassWizPage.cannot_add.message=Cannot add the junit.jar to the build path
