blob: a04cd2718644e367994bc6efe374f9d16f6991e9 [file] [log] [blame]
/*
* Copyright (c) 2015 Google Inc.
*
* All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
* Public License v1.0 which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/
package com.google.eclipse.protobuf.validation;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule;
import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.xtext.validation.ValidationMessageAcceptor;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.google.eclipse.protobuf.junit.core.XtextRule;
import com.google.eclipse.protobuf.protobuf.IndexRange;
import com.google.eclipse.protobuf.protobuf.ProtobufPackage;
import com.google.inject.Inject;
public class ProtobufJavaValidator_checkIndexRangeBounds {
@Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
@Inject private ProtobufJavaValidator validator;
private ValidationMessageAcceptor messageAcceptor;
@Before public void setUp() {
messageAcceptor = mock(ValidationMessageAcceptor.class);
validator.setMessageAcceptor(messageAcceptor);
}
// syntax = "proto2";
//
// message Person {
// reserved -2 to 2;
// }
@Test public void should_error_on_negative_bounds() {
List<IndexRange> indexRanges = xtext.findAll(IndexRange.class);
validator.checkIndexRangeBounds(indexRanges.get(0));
verifyError(
"Extensions and reserved numbers must be positive.",
indexRanges.get(0),
ProtobufPackage.Literals.INDEX_RANGE__FROM);
verifyNoMoreInteractions(messageAcceptor);
}
// syntax = "proto2";
//
// message Person {
// reserved 3 to 1;
// reserved 4 to 4;
// }
@Test public void should_error_on_end_less_than_start() {
List<IndexRange> indexRanges = xtext.findAll(IndexRange.class);
validator.checkIndexRangeBounds(indexRanges.get(0));
validator.checkIndexRangeBounds(indexRanges.get(1));
verifyError("End number must be greater than or equal to start number.", indexRanges.get(0));
verifyNoMoreInteractions(messageAcceptor);
}
private void verifyError(String message, EObject errorSource) {
verifyError(message, errorSource, null);
}
private void verifyError(String message, EObject errorSource, EStructuralFeature errorFeature) {
verify(messageAcceptor).acceptError(message, errorSource, errorFeature, -1, null);
}
}