| # Testing Generated Code | |
| ## Writing Unit Tests For Generated Code | |
| An example of unit testing generated code without running all of Drill is the **priorityQueueOrderingTest()** test in | |
| [TopNBatchTest](../../exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TopN/TopNBatchTest.java). That test tests the | |
| [PriorityQueueTemplate](../../exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/TopN/PriorityQueueTemplate.java) class separately from the rest of Drill. | |
| The testing of [PriorityQueueTemplate](../../exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/TopN/PriorityQueueTemplate.java) is mainly accomplished by creating | |
| instances of the following classes: | |
| * [FunctionLookupContext](../../exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionLookupContext.java) | |
| * [CodeCompiler](../../exec/java-exec/src/main/java/org/apache/drill/exec/compile/CodeCompiler.java) | |
| ## Creating A [FunctionLookupContext](../../exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionLookupContext.java) | |
| ``` | |
| new FunctionImplementationRegistry(drillConfig) | |
| ``` | |
| ## Creating A [CodeCompiler](../../exec/java-exec/src/main/java/org/apache/drill/exec/compile/CodeCompiler.java) | |
| 1. Create an [OperatorFixture](OperatorFixture.md). | |
| 1. Retrieve the [SystemOptionManager](../../exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java) from the | |
| [OperatorFixture](OperatorFixture.md). | |
| ``` | |
| operatorFixture.getOptionManager(); | |
| ``` | |
| 1. Create an instance of [CodeCompiler](../../exec/java-exec/src/main/java/org/apache/drill/exec/compile/CodeCompiler.java). | |
| ``` | |
| new CodeCompiler(drillConfig, optionManager) | |
| ``` | |
| ## Debugging Generated Code | |
| It is possible to set break points in generated code. | |
| ### Instructions For IntelliJ | |
| 1. File→Project structure…→Modules→distribution→Sources → Add content root | |
| 1. Chose /tmp/drill/codegen | |
| 1. Mark it as Sources directory. | |
| 1. Set saveCodeForDebugging(true) for the code generator of interest | |
| 1. Run the unit test of interest | |
| 1. Now some generated classes should appear in Intellij under the distribution module | |
| 1. Set a break point in a generated class and run the unit test in debug mode | |
| ### Instructions For Eclipse | |
| 1. To step into the generated code, set a breakpoint just before we call into the setup method. | |
| 1. Step into that method which will step into doSetup. This opens the generated code file. |