From 075f91f0d91616f9d4eee664677891359ba50702 Mon Sep 17 00:00:00 2001
From: Rohitesh Kumar Jain <thekumarjain@gmail.com>
Date: Tue, 22 Jun 2021 18:07:50 +0530
Subject: [PATCH] test: Add test for Substitution.insertAllNestedTypes (#3998)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Simon Larsén <slarse@kth.se>
---
 .../spoon/test/template/SubstitutionTest.java | 32 +++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/test/java/spoon/test/template/SubstitutionTest.java b/src/test/java/spoon/test/template/SubstitutionTest.java
index b0c5dba08d5..a7036655ebd 100644
--- a/src/test/java/spoon/test/template/SubstitutionTest.java
+++ b/src/test/java/spoon/test/template/SubstitutionTest.java
@@ -47,4 +47,36 @@ private static class SingleFieldTemplate extends StatementTemplate {
         @Override
         public void statement() { }
     }
+
+    @Test
+    public void testInsertAllNestedTypes() {
+        // contract: Substitution.insertAllNestedTypes inserts the only nested class from a singly nested template into the target class
+
+        // arrange
+        Launcher spoon = new Launcher();
+        spoon.addTemplateResource(new FileSystemFile("./src/test/java/spoon/test/template/SubstitutionTest.java"));
+
+        spoon.buildModel();
+        Factory factory = spoon.getFactory();
+
+        CtType<?> targetType = factory.Class().create("goodClass");
+        StatementTemplate template = new SinglyNestedTemplate();
+
+        // act
+        Substitution.insertAllNestedTypes(targetType, template);
+
+        // assert
+        assertEquals(1, targetType.getNestedTypes().size());
+        assertEquals("nestedClass", targetType.getNestedType("nestedClass").getSimpleName());
+    }
+
+    private static class SinglyNestedTemplate extends StatementTemplate {
+
+        class nestedClass {
+        }
+
+        @Override
+        public void statement() {
+        }
+    }
 }