- Timestamp:
- 2022-06-13T23:40:17+02:00 (2 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
r18472 r18491 222 222 ); 223 223 224 // Set the initial state of the upload button 225 btnUpload.setEnabled(pnlBasicUploadSettings.getUploadTextValidators() 226 .stream().noneMatch(UploadTextComponentValidator::isUploadRejected)); 227 224 228 // Enable/disable the upload button if at least an upload validator rejects upload 225 229 pnlBasicUploadSettings.getUploadTextValidators().forEach(v -> v.addChangeListener(e -> btnUpload.setEnabled( -
trunk/src/org/openstreetmap/josm/gui/io/UploadTextComponentValidator.java
r17752 r18491 84 84 return; 85 85 } 86 String uploadComment = getComponent().getText(); 87 if (UploadDialog.UploadAction.isUploadCommentTooShort(uploadComment)) { 86 final String uploadComment = getComponent().getText(); 87 final String rejection = UploadDialog.UploadAction.validateUploadTag(uploadComment, "upload.comment", 88 Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); 89 90 // Reject the upload if tags are required and are not in the input. If the tags exist or are not 91 // required, then check the length of the input and warn if it's too short (a short msg is not a rejection) 92 uploadRejected = rejection != null; 93 94 if (uploadRejected) { 95 feedbackWarning(tr("Your upload comment is <i>rejected</i>.") + "<br />" + rejection); 96 } else if (UploadDialog.UploadAction.isUploadCommentTooShort(uploadComment)) { 88 97 feedbackWarning(tr("Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />" + 89 98 "This is technically allowed, but please consider that many users who are<br />" + … … 93 102 "easier for many other mappers.").replace("<br />", " ")); 94 103 } else { 95 String rejection = UploadDialog.UploadAction.validateUploadTag(uploadComment, "upload.comment", 96 Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); 97 uploadRejected = rejection != null; 98 if (uploadRejected) { 99 feedbackWarning(tr("Your upload comment is <i>rejected</i>.") + "<br />" + rejection); 100 } else { 101 feedbackValid(tr("Thank you for providing a changeset comment! " + 102 "This gives other mappers a better understanding of your intent.")); 103 } 104 feedbackValid(tr("Thank you for providing a changeset comment! " + 105 "This gives other mappers a better understanding of your intent.")); 104 106 } 105 107 } … … 121 123 return; 122 124 } 123 String uploadSource = getComponent().getText(); 124 if (Utils.isStripEmpty(uploadSource)) { 125 final String uploadSource = getComponent().getText(); 126 final String rejection = UploadDialog.UploadAction.validateUploadTag( 127 uploadSource, "upload.source", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); 128 129 // Reject the upload only if tags are required and are not in the input. If the tags exist or are not 130 // required, then check the length of the input and warn if it's too short (a short msg is not a rejection) 131 uploadRejected = rejection != null; 132 133 if (uploadRejected) { 134 feedbackWarning(tr("Your changeset source is <i>rejected</i>.") + "<br />" + rejection); 135 } else if (Utils.isStripEmpty(uploadSource)) { 125 136 feedbackWarning(tr("You did not specify a source for your changes.<br />" + 126 137 "It is technically allowed, but this information helps<br />" + … … 129 140 "easier for many other mappers.").replace("<br />", " ")); 130 141 } else { 131 final String rejection = UploadDialog.UploadAction.validateUploadTag( 132 uploadSource, "upload.source", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); 133 uploadRejected = rejection != null; 134 if (uploadRejected) { 135 feedbackWarning(tr("Your changeset source is <i>rejected</i>.") + "<br />" + rejection); 136 } else { 137 feedbackValid(tr("Thank you for providing the data source!")); 138 } 142 feedbackValid(tr("Thank you for providing the data source!")); 139 143 } 140 144 } -
trunk/test/unit/org/openstreetmap/josm/gui/io/UploadTextComponentValidatorTest.java
r18037 r18491 5 5 import static org.hamcrest.MatcherAssert.assertThat; 6 6 7 import java.util.Arrays; 8 import java.util.function.BiFunction; 9 import java.util.stream.Stream; 10 7 11 import javax.swing.JLabel; 8 12 import javax.swing.JTextField; 9 13 10 14 import org.junit.jupiter.api.Test; 15 import org.junit.jupiter.params.ParameterizedTest; 16 import org.junit.jupiter.params.provider.Arguments; 17 import org.junit.jupiter.params.provider.MethodSource; 18 import org.openstreetmap.josm.spi.preferences.Config; 11 19 import org.openstreetmap.josm.testutils.annotations.BasicPreferences; 12 20 … … 40 48 assertThat(feedback.getText(), containsString("Thank you for providing the data source")); 41 49 } 50 51 static Stream<Arguments> testUploadWithMandatoryTerm() { 52 return Stream.of(Arguments.of("upload.comment.mandatory-terms", "Thank you for providing a changeset comment", 53 (BiFunction<JTextField, JLabel, ? extends UploadTextComponentValidator>) 54 UploadTextComponentValidator.UploadCommentValidator::new), 55 Arguments.of("upload.source.mandatory-terms", "Thank you for providing the data source", 56 (BiFunction<JTextField, JLabel, ? extends UploadTextComponentValidator>) 57 UploadTextComponentValidator.UploadSourceValidator::new) 58 ); 59 } 60 61 /** 62 * Unit test of {@link UploadTextComponentValidator.UploadCommentValidator} and 63 * {@link UploadTextComponentValidator.UploadSourceValidator} with mandatory terms 64 */ 65 @BasicPreferences 66 @ParameterizedTest 67 @MethodSource 68 void testUploadWithMandatoryTerm(String confPref, String expectedText, 69 BiFunction<JTextField, JLabel, ? extends UploadTextComponentValidator> validatorSupplier) { 70 Config.getPref().putList(confPref, Arrays.asList("myrequired", "xyz")); 71 JTextField textField = new JTextField(""); 72 JLabel feedback = new JLabel(); 73 74 validatorSupplier.apply(textField, feedback); 75 76 // A too-short string should fail validation 77 textField.setText(""); 78 assertThat(feedback.getText(), containsString("The following required terms are missing: [myrequired, xyz]")); 79 80 // A long enough string without the mandatory terms should claim that the required terms are missing 81 textField.setText("a string long enough but missing the mandatory term"); 82 assertThat(feedback.getText(), containsString("The following required terms are missing: [myrequired, xyz]")); 83 84 // A valid string should pass 85 textField.setText("a string long enough with the mandatory term #myrequired #xyz"); 86 assertThat(feedback.getText(), containsString(expectedText)); 87 } 42 88 } -
trunk/test/unit/org/openstreetmap/josm/testutils/annotations/BasicPreferences.java
r18037 r18491 57 57 // Disable saving on put, just to avoid overwriting pref files 58 58 pref.enableSaveOnPut(false); 59 pref.resetToDefault(); 59 60 Config.setPreferencesInstance(pref); 60 61 Config.setBaseDirectoriesProvider(JosmBaseDirectories.getInstance());
Note:
See TracChangeset
for help on using the changeset viewer.