public void create() { Map<DescriptorKey, ParameterDescriptor> parameterDescriptors = testContext.getParamaterDescriptors(); Map<DescriptorKey, FieldDescriptor> fieldDescriptors = testContext.getFieldDescriptors(); Object[] arguments = new Object[parameterDescriptors.size()]; Collection<FieldDescriptor> descriptors = fieldDescriptors.values(); UnitIndexFakeInjector indexInjector = new UnitIndexFakeInjector(testContext, testReifier, arguments); UnitNameFakeInjector nameInjector = new UnitNameFakeInjector(testContext, testReifier, arguments); UnitTypeFakeInjector typeInjector = new UnitTypeFakeInjector(testContext, testReifier, arguments); Set<FieldDescriptor> fakeDescriptors = descriptors.parallelStream() .filter(p -> p.hasAnnotation(Fake.class)) .collect(toSet()); //process fields with a custom index first fakeDescriptors.parallelStream() .forEach(indexInjector::inject); //process fields with custom names second fakeDescriptors.parallelStream() .forEach(nameInjector::inject); //finally process fields based on their type fakeDescriptors.parallelStream() .forEach(typeInjector::inject); testReifier.reifyCut(testContext.getCutDescriptor(), arguments); }
@Override public void inject(FieldDescriptor testFieldDescriptor) { CutDescriptor cutDescriptor = context.getCutDescriptor(); Map<DescriptorKey, FieldDescriptor> cutFieldDescriptors = cutDescriptor.getFieldDescriptors(); Type testFieldType = testFieldDescriptor.getGenericType(); String fieldName = testFieldDescriptor.getName(); DescriptorKey descriptorKey = new DescriptorKey(testFieldType, fieldName); //if there is a cut field descriptor that matches the field then lets use that if (cutFieldDescriptors.containsKey(descriptorKey)) { FieldDescriptor cutFieldDescriptor = cutFieldDescriptors.get(descriptorKey); testReifier.reifyField(cutDescriptor, cutFieldDescriptor, testFieldDescriptor); } else { //otherwise find the right field based on the type of the field Collection<FieldDescriptor> descriptors = cutFieldDescriptors.values(); for (FieldDescriptor cutFieldDEscriptor : descriptors) { Type cutFieldType = cutFieldDEscriptor.getGenericType(); TypeToken token = TypeToken.of(testFieldType); if (token.isSubtypeOf(cutFieldType)) { testReifier.reifyField(cutDescriptor, cutFieldDEscriptor, testFieldDescriptor); break; } } } }
public void real(Set<FieldDescriptor> fieldDescriptors) { Class<?> testClass = context.getTestClass(); of(testClass.getDeclaredAnnotationsByType(Module.class)) .map(Module::value) .distinct() .forEachOrdered(locator::addModule); locator.reload(); testReifier.reifyTest(fieldDescriptors); }
ParameterDescriptor paramDescriptor = parameterDescriptors.get(descriptorKey); Integer paramIndex = paramDescriptor.getIndex(); arguments[paramIndex] = testReifier.reifyField(fieldDescriptor, paramDescriptor); } else { arguments[paramIndex] = testReifier.reifyField(fieldDescriptor, paramDescriptor); break;
public void create() { Map<DescriptorKey, ParameterDescriptor> parameterDescriptors = testContext.getParamaterDescriptors(); Map<DescriptorKey, FieldDescriptor> fieldDescriptors = testContext.getFieldDescriptors(); Object[] arguments = new Object[parameterDescriptors.size()]; Collection<FieldDescriptor> descriptors = fieldDescriptors.values(); UnitIndexFakeInjector indexInjector = new UnitIndexFakeInjector(testContext, testReifier, arguments); UnitNameFakeInjector nameInjector = new UnitNameFakeInjector(testContext, testReifier, arguments); UnitTypeFakeInjector typeInjector = new UnitTypeFakeInjector(testContext, testReifier, arguments); UnitServiceFakeInjector serviceInjector = new UnitServiceFakeInjector(testContext, testReifier, arguments); Set<FieldDescriptor> fakeDescriptors = descriptors.parallelStream() .filter(p -> p.hasAnnotation(Fake.class)) .collect(toSet()); //process fields with a custom index first fakeDescriptors.parallelStream() .forEach(indexInjector::inject); //process fields with custom names second fakeDescriptors.parallelStream() .forEach(nameInjector::inject); //finally process fields based on their type fakeDescriptors.parallelStream() .forEach(typeInjector::inject); testReifier.reifyCut(testContext.getCutDescriptor(), arguments); //if there are no arguments then try to inject descriptor fields. if (arguments.length == 0) { fakeDescriptors.parallelStream() .forEach(serviceInjector::inject); } }
public void real(Set<FieldDescriptor> fieldDescriptors) { Class<?> testClass = context.getTestClass(); of(testClass.getDeclaredAnnotationsByType(Module.class)) .map(Module::value) .distinct() .forEachOrdered(locator::addModule); locator.reload(); testReifier.reifyTest(fieldDescriptors); }
Integer index = parameterDescriptor.getIndex(); Object instance = testReifier.reifyField(descriptor, parameterDescriptor); arguments[index] = instance; } else { Object instance = testReifier.reifyField(descriptor, paramDescriptor); arguments[index] = instance; break;
.forEach(realInjector::inject); testReifier.reifyCut(context.getCutDescriptor(), arguments);
public void real(Set<FieldDescriptor> fieldDescriptors) { Class<?> testClass = context.getTestClass(); of(testClass.getDeclaredAnnotationsByType(Module.class)) .map(Module::value) .distinct() .forEachOrdered(locator::addModule); locator.reload(); testReifier.reifyTest(fieldDescriptors); }
Integer index = parameterDescriptor.getIndex(); Object instance = testReifier.reifyField(descriptor, parameterDescriptor); arguments[index] = instance; } else { Object instance = testReifier.reifyField(descriptor, paramDescriptor); arguments[index] = instance; break;
.forEach(realInjector::inject); testReifier.reifyCut(context.getCutDescriptor(), arguments);
public void real(Set<FieldDescriptor> fieldDescriptors) { Class<?> testClass = context.getTestClass(); of(testClass.getDeclaredAnnotationsByType(Module.class)) .map(Module::value) .distinct() .forEachOrdered(locator::addModule); locator.reload(); testReifier.reifyTest(fieldDescriptors); }
ParameterDescriptor paramDescriptor = parameterDescriptors.get(descriptorKey); Integer paramIndex = paramDescriptor.getIndex(); arguments[paramIndex] = testReifier.reifyField(fieldDescriptor, paramDescriptor); } else { arguments[paramIndex] = testReifier.reifyField(fieldDescriptor, paramDescriptor); break;
.forEach(realInjector::inject); testReifier.reifyCut(context.getCutDescriptor(), arguments);
Integer index = parameterDescriptor.getIndex(); Object instance = testReifier.reifyField(descriptor, parameterDescriptor); arguments[index] = instance; } else { Object instance = testReifier.reifyField(descriptor, paramDescriptor); arguments[index] = instance; break;
.forEach(realInjector::inject); testReifier.reifyCut(context.getCutDescriptor(), arguments);
Integer index = parameterDescriptor.getIndex(); Object instance = testReifier.reifyField(descriptor, parameterDescriptor); arguments[index] = instance; } else { Object instance = testReifier.reifyField(descriptor, paramDescriptor); arguments[index] = instance; break;
); arguments[fakeIndex] = testReifier.reifyField(descriptor, paramDescriptor);
); arguments[index] = testReifier.reifyField(descriptor, paramDescriptor);
); arguments[index] = testReifier.reifyField(descriptor, paramDescriptor);