/* * Copyright (c) 2017 Cisco Systems, Inc. and others. 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 org.opendaylight.mdsal.binding.javav2.java.api.generator.renderers; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.builder.GeneratedTypeBuilderImpl; import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType; import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature; import org.opendaylight.mdsal.binding.javav2.model.api.Type; public class BuilderRendererTest { private static final String TEST = "test"; @Test public void builderTemplateGenerateToStringWithPropertyTest() throws Exception { final GeneratedType genType = mockGenType("get" + TEST); final String generateToString = genToString(genType); assertTrue(generateToString.contains("java.lang.String toString() {")); assertTrue(generateToString.contains("java.lang.String name = \"test [\";")); assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);")); assertTrue(generateToString.contains("if (_test != null) {")); assertTrue(generateToString.contains("builder.append(\"_test=\");")); assertTrue(generateToString.contains("builder.append(_test);")); assertTrue(generateToString.contains("return builder.append(']').toString();")); } @Test public void builderTemplateGenerateToStringWithoutAnyPropertyTest() throws Exception { final GeneratedType genType = mockGenType(TEST); final String generateToString = genToString(genType); assertTrue(generateToString.contains("java.lang.String toString() {")); assertTrue(generateToString.contains("java.lang.String name = \"test [\";")); assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);")); assertTrue(generateToString.contains("return builder.append(']').toString();")); } @Test public void builderTemplateGenerateToStringWithMorePropertiesTest() throws Exception { final GeneratedType genType = mockGenTypeMoreMeth("get" + TEST); final String generateToString = genToString(genType); assertTrue(generateToString.contains("java.lang.String toString() {")); assertTrue(generateToString.contains("java.lang.String name = \"test [\";")); assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);")); assertTrue(generateToString.contains("if (_test1 != null) {")); assertTrue(generateToString.contains("builder.append(\"_test1=\");")); assertTrue(generateToString.contains("builder.append(_test1);")); assertTrue(generateToString.contains("builder.append(\", \");")); assertTrue(generateToString.contains("if (_test2 != null) {")); assertTrue(generateToString.contains("builder.append(\"_test2=\");")); assertTrue(generateToString.contains("builder.append(_test2);")); assertTrue(generateToString.contains("return builder.append(']').toString();")); } @Test public void builderTemplateGenerateToStringWithoutPropertyWithAugmentTest() throws Exception { final GeneratedType genType = mockGenType(TEST); mockAugment(genType); final String generateToString = genToString(genType); assertTrue(generateToString.contains("java.lang.String toString() {")); assertTrue(generateToString.contains("java.lang.String name = \"test [\";")); assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);")); assertTrue(generateToString.contains("builder.append(\"augmentation=\");")); assertTrue(generateToString.contains("builder.append(augmentation.values());")); assertTrue(generateToString.contains("return builder.append(']').toString();")); } @Test public void builderTemplateGenerateToStringWithPropertyWithAugmentTest() throws Exception { final GeneratedType genType = mockGenType("get" + TEST); mockAugment(genType); final String generateToString = genToString(genType); assertTrue(generateToString.contains("java.lang.String toString() {")); assertTrue(generateToString.contains("java.lang.String name = \"test [\";")); assertTrue(generateToString.contains("java.lang.StringBuilder builder = new java.lang.StringBuilder(name);")); assertTrue(generateToString.contains("if (_test != null) {")); assertTrue(generateToString.contains("builder.append(\"_test=\");")); assertTrue(generateToString.contains("builder.append(_test);")); assertTrue(generateToString.contains("builder.append(\", \");")); assertTrue(generateToString.contains("builder.append(\"augmentation=\");")); assertTrue(generateToString.contains("builder.append(augmentation.values());")); assertTrue(generateToString.contains("return builder.append(']').toString();")); } @Test public void builderTemplateGenerateToStringWithMorePropertiesWithAugmentTest() throws Exception { final GeneratedType genType = mockGenTypeMoreMeth("get" + TEST); mockAugment(genType); final String generateToString = genToString(genType); assertTrue(generateToString.contains("if (_test1 != null) {")); assertTrue(generateToString.contains("builder.append(\"_test1=\");")); assertTrue(generateToString.contains("builder.append(_test1);")); assertTrue(generateToString.contains("builder.append(\", \");")); assertTrue(generateToString.contains("if (_test2 != null) {")); assertTrue(generateToString.contains("builder.append(\"_test2=\");")); assertTrue(generateToString.contains("builder.append(_test2);")); assertTrue(generateToString.contains("builder.append(\", \");")); assertTrue(generateToString.contains("builder.append(\"augmentation=\");")); assertTrue(generateToString.contains("builder.append(augmentation.values());")); assertTrue(generateToString.contains("return builder.append(']').toString();")); } private void mockAugment(final GeneratedType genType) { final List impls = new ArrayList<>(); final Type impl = mock(Type.class); doReturn("org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable").when(impl) .getFullyQualifiedName(); impls.add(impl); doReturn(impls).when(genType).getImplements(); } private GeneratedType mockGenTypeMoreMeth(final String methodeName) { final GeneratedType genType = spy(GeneratedType.class); doReturn(TEST).when(genType).getName(); doReturn(TEST).when(genType).getPackageName(); doReturn(new GeneratedTypeBuilderImpl(new StringBuilder(methodeName).append("test").toString(), methodeName, new ModuleContext()) .toInstance()).when(genType).getParentTypeForBuilder(); final List listMethodSign = new ArrayList<>(); for (int i = 0; i < 2; i++) { final MethodSignature methSign = mockMethSign(methodeName + (i + 1)); listMethodSign.add(methSign); } doReturn(listMethodSign).when(genType).getMethodDefinitions(); final List impls = new ArrayList<>(); doReturn(impls).when(genType).getImplements(); return genType; } private String genToString(final GeneratedType genType) { final BuilderRenderer bt = new BuilderRenderer(genType); return bt.body(); } private GeneratedType mockGenType(final String methodeName) { final GeneratedType genType = spy(GeneratedType.class); doReturn(TEST).when(genType).getName(); doReturn(TEST).when(genType).getPackageName(); doReturn(new GeneratedTypeBuilderImpl(new StringBuilder(methodeName).append("test").toString(), methodeName, new ModuleContext()) .toInstance()).when(genType).getParentTypeForBuilder(); final List listMethodSign = new ArrayList<>(); final MethodSignature methSign = mockMethSign(methodeName); listMethodSign.add(methSign); doReturn(listMethodSign).when(genType).getMethodDefinitions(); final List impls = new ArrayList<>(); doReturn(impls).when(genType).getImplements(); return genType; } private MethodSignature mockMethSign(final String methodeName) { final MethodSignature methSign = mock(MethodSignature.class); doReturn(methodeName).when(methSign).getName(); final Type methType = mock(Type.class); doReturn(TEST).when(methType).getName(); doReturn(TEST).when(methType).getPackageName(); doReturn(methType).when(methSign).getReturnType(); return methSign; } }