From 909426dd3238c3cc162b1b468594fcc4282a3cd6 Mon Sep 17 00:00:00 2001 From: Phodal Huang Date: Fri, 20 Dec 2019 20:21:48 +0800 Subject: [PATCH] test: add first api call test --- core/domain/call_graph/call_graph.go | 3 +- test/call_api_test.go | 39 ++ test/test_data/call_api_test.json | 566 +++++++++++++++++++++++++++ 3 files changed, 606 insertions(+), 2 deletions(-) create mode 100644 test/call_api_test.go create mode 100644 test/test_data/call_api_test.json diff --git a/core/domain/call_graph/call_graph.go b/core/domain/call_graph/call_graph.go index 791489e..bf5e6ad 100644 --- a/core/domain/call_graph/call_graph.go +++ b/core/domain/call_graph/call_graph.go @@ -16,7 +16,6 @@ func NewCallGraph() CallGraph { func (c CallGraph) Analysis(funcName string, clzs []models.JClassNode) string { methodMap := BuildMethodMap(clzs) - chain := BuildCallChain(funcName, methodMap, nil) dotContent := ToGraphviz(chain) return dotContent @@ -25,7 +24,7 @@ func (c CallGraph) Analysis(funcName string, clzs []models.JClassNode) string { // TODO: be a utils func ToGraphviz(chain string) string { //rankdir = LR; - var result = "digraph G { \n" + var result = "digraph G {\n" result = result + chain result = result + "}\n" return result diff --git a/test/call_api_test.go b/test/call_api_test.go new file mode 100644 index 0000000..37a5758 --- /dev/null +++ b/test/call_api_test.go @@ -0,0 +1,39 @@ +package test_test + +import ( + "coca/core/domain/call_graph" + "coca/core/models" + "coca/core/support" + "encoding/json" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + "log" +) + +var _ = Describe("Git Parser", func() { + Context("Test for Range", func() { + It("should be a novel", func() { + var parsedDeps []models.JClassNode + analyser := call_graph.NewCallGraph() + + file := support.ReadFile("test_data/call_api_test.json") + if file == nil { + log.Fatal("lost file:") + } + + _ = json.Unmarshal(file, &parsedDeps) + + dotContent := analyser.Analysis("com.phodal.pholedge.book.BookController.createBook", *&parsedDeps) + + Expect(dotContent).To(Equal(`digraph G { +"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.BookFactory.create"; +"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.model.command.CreateBookCommand.getIsbn"; +"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.model.command.CreateBookCommand.getName"; +"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.BookRepository.save"; +"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.model.Book.getId"; +"com.phodal.pholedge.book.BookController.createBook" -> "com.phodal.pholedge.book.BookService.createBook"; +} +`)) + }) + }) +}) \ No newline at end of file diff --git a/test/test_data/call_api_test.json b/test/test_data/call_api_test.json new file mode 100644 index 0000000..1355e15 --- /dev/null +++ b/test/test_data/call_api_test.json @@ -0,0 +1,566 @@ +[ + { + "Package": "com.phodal.pholedge.book", + "Class": "BookController", + "Type": "Class", + "Path": "examples/api/BookController.java", + "Fields": [ + { + "Type": "BookService", + "Value": "applicationService" + } + ], + "Methods": [ + { + "Name": "createBook", + "Type": "Map\u003cString,String\u003e", + "StartLine": 26, + "StartLinePosition": 31, + "StopLine": 28, + "StopLinePosition": 41, + "Parameters": [ + { + "Name": "CreateBookCommand", + "Type": "command" + } + ], + "MethodCalls": [ + { + "Package": "com.google.common.collect.ImmutableSortedMap.of", + "Type": "", + "Class": "", + "MethodName": "of", + "StartLine": 27, + "StartLinePosition": 15, + "StopLine": 27, + "StopLinePosition": 17 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "createBook", + "StartLine": 27, + "StartLinePosition": 43, + "StopLine": 27, + "StopLinePosition": 53 + } + ], + "Override": false, + "Annotations": null + }, + { + "Name": "updateBook", + "Type": "BookRepresentaion", + "StartLine": 32, + "StartLinePosition": 29, + "StopLine": 34, + "StopLinePosition": 39, + "Parameters": [ + { + "Name": "String", + "Type": "id" + }, + { + "Name": "UpdateBookCommand", + "Type": "command" + } + ], + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "updateBook", + "StartLine": 33, + "StartLinePosition": 34, + "StopLine": 33, + "StopLinePosition": 44 + } + ], + "Override": false, + "Annotations": null + }, + { + "Name": "getBookList", + "Type": "List\u003cBookRepresentaion\u003e", + "StartLine": 37, + "StartLinePosition": 35, + "StopLine": 39, + "StopLinePosition": 46, + "Parameters": null, + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "getBooksLists", + "StartLine": 38, + "StartLinePosition": 34, + "StopLine": 38, + "StopLinePosition": 47 + } + ], + "Override": false, + "Annotations": null + }, + { + "Name": "getBookById", + "Type": "BookRepresentaion", + "StartLine": 42, + "StartLinePosition": 29, + "StopLine": 44, + "StopLinePosition": 40, + "Parameters": [ + { + "Name": "String", + "Type": "id" + } + ], + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "getBookById", + "StartLine": 43, + "StartLinePosition": 34, + "StopLine": 43, + "StopLinePosition": 45 + } + ], + "Override": false, + "Annotations": null + } + ], + "MethodCalls": [ + { + "Package": "com.google.common.collect.ImmutableSortedMap.of", + "Type": "", + "Class": "", + "MethodName": "of", + "StartLine": 27, + "StartLinePosition": 15, + "StopLine": 27, + "StopLinePosition": 17 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "createBook", + "StartLine": 27, + "StartLinePosition": 43, + "StopLine": 27, + "StopLinePosition": 53 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "updateBook", + "StartLine": 33, + "StartLinePosition": 34, + "StopLine": 33, + "StopLinePosition": 44 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "getBooksLists", + "StartLine": 38, + "StartLinePosition": 34, + "StopLine": 38, + "StopLinePosition": 47 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookService", + "MethodName": "getBookById", + "StartLine": 43, + "StartLinePosition": 34, + "StopLine": 43, + "StopLinePosition": 45 + } + ], + "Extend": "", + "Implements": null + }, + { + "Package": "com.phodal.pholedge.book", + "Class": "BookService", + "Type": "Class", + "Path": "examples/api/BookService.java", + "Fields": [ + { + "Type": "BookFactory", + "Value": "bookFactory" + }, + { + "Type": "BookRepository", + "Value": "bookRepository" + } + ], + "Methods": [ + { + "Name": "getBookById", + "Type": "BookRepresentaion", + "StartLine": 35, + "StartLinePosition": 29, + "StopLine": 38, + "StopLinePosition": 40, + "Parameters": [ + { + "Name": "String", + "Type": "id" + } + ], + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "byId", + "StartLine": 36, + "StartLinePosition": 35, + "StopLine": 36, + "StopLinePosition": 39 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "toRepresentation", + "StartLine": 37, + "StartLinePosition": 20, + "StopLine": 37, + "StopLinePosition": 36 + } + ], + "Override": false, + "Annotations": null + }, + { + "Name": "updateBook", + "Type": "BookRepresentaion", + "StartLine": 40, + "StartLinePosition": 29, + "StopLine": 45, + "StopLinePosition": 39, + "Parameters": [ + { + "Name": "String", + "Type": "id" + }, + { + "Name": "UpdateBookCommand", + "Type": "command" + } + ], + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "byId", + "StartLine": 41, + "StartLinePosition": 35, + "StopLine": 41, + "StopLinePosition": 39 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "save", + "StartLine": 42, + "StartLinePosition": 13, + "StopLine": 42, + "StopLinePosition": 17 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "UpdateBookCommand", + "MethodName": "getIsbn", + "StartLine": 42, + "StartLinePosition": 26, + "StopLine": 42, + "StopLinePosition": 33 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "UpdateBookCommand", + "MethodName": "getName", + "StartLine": 42, + "StartLinePosition": 45, + "StopLine": 42, + "StopLinePosition": 52 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "save", + "StartLine": 43, + "StartLinePosition": 23, + "StopLine": 43, + "StopLinePosition": 27 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "toRepresentation", + "StartLine": 44, + "StartLinePosition": 20, + "StopLine": 44, + "StopLinePosition": 36 + } + ], + "Override": false, + "Annotations": null + }, + { + "Name": "createBook", + "Type": "String", + "StartLine": 25, + "StartLinePosition": 18, + "StopLine": 29, + "StopLinePosition": 28, + "Parameters": [ + { + "Name": "CreateBookCommand", + "Type": "command" + } + ], + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookFactory", + "MethodName": "create", + "StartLine": 26, + "StartLinePosition": 32, + "StopLine": 26, + "StopLinePosition": 38 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "CreateBookCommand", + "MethodName": "getIsbn", + "StartLine": 26, + "StartLinePosition": 47, + "StopLine": 26, + "StopLinePosition": 54 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "CreateBookCommand", + "MethodName": "getName", + "StartLine": 26, + "StartLinePosition": 66, + "StopLine": 26, + "StopLinePosition": 73 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "save", + "StartLine": 27, + "StartLinePosition": 23, + "StopLine": 27, + "StopLinePosition": 27 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "getId", + "StartLine": 28, + "StartLinePosition": 20, + "StopLine": 28, + "StopLinePosition": 25 + } + ], + "Override": false, + "Annotations": null + }, + { + "Name": "getBooksLists", + "Type": "List\u003cBookRepresentaion\u003e", + "StartLine": 31, + "StartLinePosition": 35, + "StopLine": 33, + "StopLinePosition": 48, + "Parameters": null, + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "list", + "StartLine": 32, + "StartLinePosition": 30, + "StopLine": 32, + "StopLinePosition": 34 + } + ], + "Override": false, + "Annotations": null + } + ], + "MethodCalls": [ + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookFactory", + "MethodName": "create", + "StartLine": 26, + "StartLinePosition": 32, + "StopLine": 26, + "StopLinePosition": 38 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "CreateBookCommand", + "MethodName": "getIsbn", + "StartLine": 26, + "StartLinePosition": 47, + "StopLine": 26, + "StopLinePosition": 54 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "CreateBookCommand", + "MethodName": "getName", + "StartLine": 26, + "StartLinePosition": 66, + "StopLine": 26, + "StopLinePosition": 73 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "save", + "StartLine": 27, + "StartLinePosition": 23, + "StopLine": 27, + "StopLinePosition": 27 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "getId", + "StartLine": 28, + "StartLinePosition": 20, + "StopLine": 28, + "StopLinePosition": 25 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "list", + "StartLine": 32, + "StartLinePosition": 30, + "StopLine": 32, + "StopLinePosition": 34 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "byId", + "StartLine": 36, + "StartLinePosition": 35, + "StopLine": 36, + "StopLinePosition": 39 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "toRepresentation", + "StartLine": 37, + "StartLinePosition": 20, + "StopLine": 37, + "StopLinePosition": 36 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "byId", + "StartLine": 41, + "StartLinePosition": 35, + "StopLine": 41, + "StopLinePosition": 39 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "save", + "StartLine": 42, + "StartLinePosition": 13, + "StopLine": 42, + "StopLinePosition": 17 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "UpdateBookCommand", + "MethodName": "getIsbn", + "StartLine": 42, + "StartLinePosition": 26, + "StopLine": 42, + "StopLinePosition": 33 + }, + { + "Package": "com.phodal.pholedge.book.model.command", + "Type": "chain", + "Class": "UpdateBookCommand", + "MethodName": "getName", + "StartLine": 42, + "StartLinePosition": 45, + "StopLine": 42, + "StopLinePosition": 52 + }, + { + "Package": "com.phodal.pholedge.book", + "Type": "same package", + "Class": "BookRepository", + "MethodName": "save", + "StartLine": 43, + "StartLinePosition": 23, + "StopLine": 43, + "StopLinePosition": 27 + }, + { + "Package": "com.phodal.pholedge.book.model", + "Type": "chain", + "Class": "Book", + "MethodName": "toRepresentation", + "StartLine": 44, + "StartLinePosition": 20, + "StopLine": 44, + "StopLinePosition": 36 + } + ], + "Extend": "", + "Implements": [ + "com.phodal.pholedge.core.domain.Service" + ] + } +] \ No newline at end of file -- GitLab