How to use addNewDeferConstructor method of org.powermock.core.transformers.javassist.support.PowerMockExpressionEditor class

Best Powermock code snippet using org.powermock.core.transformers.javassist.support.PowerMockExpressionEditor.addNewDeferConstructor

Source:PowerMockExpressionEditor.java Github

copy

Full Screen

...133 * constructor should be suppressed (which we don't know at this134 * moment of time) the parent class must have a default135 * constructor that we can delegate to.136 */137 addNewDeferConstructor(clazz);138 final StringBuilder code = new StringBuilder();139 code.append("{Object value =")140 .append(mockGetawayClass.getName())141 .append(".constructorCall($class, $args, $sig);");142 code.append("if (value != ").append(MockGateway.class.getName()).append(".PROCEED){");143 /*144 * TODO Suppress and lazy inject field (when this feature is ready).145 */146 if (superclass.getName().equals(Object.class.getName())) {147 code.append(" super();");148 } else {149 code.append(" super((").append(IndicateReloadClass.class.getName()).append(") null);");150 }151 code.append("} else {");152 code.append(" $proceed($$);");153 code.append("}}");154 c.replace(code.toString());155 }156 }157 158 @Override159 public void edit(FieldAccess f) throws CannotCompileException {160 if (f.isReader()) {161 CtClass returnTypeAsCtClass;162 FieldInfo fieldInfo;163 164 try {165 CtField field = f.getField();166 returnTypeAsCtClass = field.getType();167 fieldInfo = field.getFieldInfo2();168 } catch (NotFoundException e) {169 /*170 * If multiple java agents are active (in INST_REDEFINE mode), the types implicitly loaded by javassist from disk171 * might differ from the types available in memory. Thus, this error might occur.172 *173 * It may also happen if PowerMock is modifying an SPI where the SPI require some classes to be available in the classpath174 * at runtime but they are not! This is valid in some cases such as slf4j.175 */176 return;177 }178 179 if (isNotSyntheticField(fieldInfo)) {180 String code = "{Object value = " +181 MockGateway.class.getName() +182 ".fieldCall(" +183 "$0,$class,\"" +184 f.getFieldName() +185 "\",$type);" +186 "if(value == " + MockGateway.class.getName() + ".PROCEED) {" +187 " $_ = $proceed($$);" +188 "} else {" +189 " $_ = " + getCorrectReturnValueType(returnTypeAsCtClass) + ";" +190 "}}";191 f.replace(code);192 }193 }194 }195 196 /**197 * Create a defer constructor in the class which will be called when the198 * constructor is suppressed.199 *200 * @param clazz The class whose super constructor will get a new defer201 * constructor if it doesn't already have one.202 * @throws CannotCompileException If an unexpected compilation error occurs.203 */204 private void addNewDeferConstructor(final CtClass clazz) throws CannotCompileException {205 final CtClass superClass;206 try {207 superClass = clazz.getSuperclass();208 } catch (NotFoundException e1) {209 throw new IllegalArgumentException("Internal error: Failed to get superclass for " + clazz.getName() + " when about to create a new default constructor.");210 }211 212 ClassPool classPool = clazz.getClassPool();213 /*214 * To make a unique defer constructor we create a new constructor215 * with one argument (IndicateReloadClass). So we get this class a216 * Javassist class below.217 */218 final CtClass constructorType;219 try {220 constructorType = classPool.get(IndicateReloadClass.class.getName());221 } catch (NotFoundException e) {222 throw new IllegalArgumentException("Internal error: failed to get the " + IndicateReloadClass.class.getName()223 + " when added defer constructor.");224 }225 clazz.defrost();226 if (superClass.getName().equals(Object.class.getName())) {227 try {228 clazz.addConstructor(CtNewConstructor.make(new CtClass[]{constructorType}, new CtClass[0], "{super();}", clazz));229 } catch (DuplicateMemberException e) {230 // OK, the constructor has already been added.231 }232 } else {233 addNewDeferConstructor(superClass);234 try {235 clazz.addConstructor(CtNewConstructor.make(new CtClass[]{constructorType}, new CtClass[0], "{super($$);}", clazz));236 } catch (DuplicateMemberException e) {237 // OK, the constructor has already been added.238 }239 }240 }241 242 243}...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Powermock automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in PowerMockExpressionEditor

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful