diff --git a/src/main/java/MakeItFit/MakeItFit.java b/src/main/java/MakeItFit/MakeItFit.java index 46e5679..3bb44a9 100644 --- a/src/main/java/MakeItFit/MakeItFit.java +++ b/src/main/java/MakeItFit/MakeItFit.java @@ -90,6 +90,11 @@ public void createUser(String name, this.userManager.insertUser(user); } + // CHANGED: added to facilitate testing + public void addUser(User user) { + this.userManager.insertUser(user); + } + /** * Removes a user based on the provided identifier. * diff --git a/src/testgen/testgen/FacadeTemplates.hs b/src/testgen/testgen/FacadeTemplates.hs index f46d278..b35e7c1 100644 --- a/src/testgen/testgen/FacadeTemplates.hs +++ b/src/testgen/testgen/FacadeTemplates.hs @@ -40,7 +40,11 @@ module FacadeTemplates ( getAllTrainingPlansTemplate, addActivityToTrainingPlanTemplate, removeActivityFromTrainingPlanTemplate, - getTrainingPlansFromUserTemplate + getTrainingPlansFromUserTemplate, + executeQueryHowManyKMsDoneTemplate, + executeQueryHowManyKMsDoneDatesTemplate, + executeQueryHowManyAltimetryDoneTemplate, + executeQueryHowManyAltimetryDoneDatesTemplate ) where import Java (assertEquals, assertTrue, runJava, toJavaExpression, toJavaExpressionList, @@ -64,23 +68,129 @@ equalityTestGenerator = do equalityTemplate :: TestTemplate equalityTemplate = genToTestTemplate "equals" equalityTestGenerator 3 -genEmail :: Gen String -genEmail = do - before <- listOf $ elements (['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9']) - after <- listOf $ elements (['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9']) - return $ before ++ "@" ++ after ++ ".com" +executeQueryHowManyKMsDoneGenerator :: IO [String] +executeQueryHowManyKMsDoneGenerator = do + user <- generate $ (arbitrary :: Gen User) + resultLines <- runJava $ concat + [ + javaImports + , toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , "System.out.println(makeItFit.executeQueryHowManyKMsDone(user.getEmail()))" + ] + ] + return $ concat + [ + toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , assertEquals (last resultLines) "makeItFit.executeQueryHowManyKMsDone(user.getEmail())" + ] + ] + +executeQueryHowManyKMsDoneTemplate :: TestTemplate +executeQueryHowManyKMsDoneTemplate = + TestTemplate "testExecuteQueryHowManyKMsDone" executeQueryHowManyKMsDoneGenerator 1 -emailTestGenerator :: IO [String] -emailTestGenerator = do - email <- generate $ genEmail - resultLines <- runJava +executeQueryHowManyKMsDoneDatesGenerator :: IO [String] +executeQueryHowManyKMsDoneDatesGenerator = do + user <- generate $ (arbitrary :: Gen User) + date1@(MakeItFitDate y m d) <- generate $ (arbitrary :: Gen MakeItFitDate) + date2 <- return $ MakeItFitDate (y + 100) m d + expr <- return $ concat [ - "import MakeItFit.utils.EmailValidator;" - , "System.out.println(EmailValidator.isValidEmail(" ++ toJavaExpression email ++ "));" + "makeItFit.executeQueryHowManyKMsDone(user.getEmail(), " + , toJavaExpression date1 + , ", " + , toJavaExpression date2 + , ")" ] - return + resultLines <- runJava $ concat + [ + javaImports + , toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , "System.out.println(" ++ expr ++ ")" + ] + ] + return $ concat + [ + toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , assertEquals (last resultLines) expr + ] + ] + +executeQueryHowManyKMsDoneDatesTemplate :: TestTemplate +executeQueryHowManyKMsDoneDatesTemplate = + TestTemplate "testExecuteQueryHowManyKMsDoneDates" executeQueryHowManyKMsDoneDatesGenerator 1 + +executeQueryHowManyAltimetryDoneGenerator :: IO [String] +executeQueryHowManyAltimetryDoneGenerator = do + user <- generate $ (arbitrary :: Gen User) + resultLines <- runJava $ concat + [ + javaImports + , toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , "System.out.println(makeItFit.executeQueryHowManyAltimetryDone(user.getEmail()))" + ] + ] + return $ concat + [ + toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , assertEquals (last resultLines) + "makeItFit.executeQueryHowManyAltimetryDone(user.getEmail())" + ] + ] + +executeQueryHowManyAltimetryDoneTemplate :: TestTemplate +executeQueryHowManyAltimetryDoneTemplate = + TestTemplate "testExecuteQueryHowManyAltimetryDone" executeQueryHowManyAltimetryDoneGenerator 1 + +executeQueryHowManyAltimetryDoneDatesGenerator :: IO [String] +executeQueryHowManyAltimetryDoneDatesGenerator = do + user <- generate $ (arbitrary :: Gen User) + date1@(MakeItFitDate y m d) <- generate $ (arbitrary :: Gen MakeItFitDate) + date2 <- return $ MakeItFitDate (y + 100) m d + expr <- return $ concat + [ + "makeItFit.executeQueryHowManyAltimetryDone(user.getEmail(), " + , toJavaExpression date1 + , ", " + , toJavaExpression date2 + , ")" + ] + resultLines <- runJava $ concat + [ + javaImports + , toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , "System.out.println(" ++ expr ++ ")" + ] + ] + return $ concat [ - assertEquals (toJavaExpression email) (last resultLines) + toJavaVariable "user" user + , [ + "MakeItFit makeItFit = new MakeItFit();" + , "makeItFit.addUser(user);" + , assertEquals (last resultLines) expr + ] ] emailTemplate :: TestTemplate @@ -834,3 +944,9 @@ getTrainingPlansFromUserTemplate :: TestTemplate getTrainingPlansFromUserTemplate = genToTestTemplate "getTrainingPlansFromUserTest" getTrainingPlansFromUserTestGenerator 1 +executeQueryHowManyAltimetryDoneDatesTemplate :: TestTemplate +executeQueryHowManyAltimetryDoneDatesTemplate = + TestTemplate + "testExecuteQueryHowManyAltimetryDoneDates" + executeQueryHowManyAltimetryDoneDatesGenerator + 1 diff --git a/src/testgen/testgen/Generators.hs b/src/testgen/testgen/Generators.hs index fdcde3c..98bc3c9 100644 --- a/src/testgen/testgen/Generators.hs +++ b/src/testgen/testgen/Generators.hs @@ -179,6 +179,7 @@ instance JavaData User where , toJavaExpression age , toJavaExpression gender , toJavaExpression weight + , toJavaExpression height , toJavaExpression bpm , toJavaExpression level , toJavaExpression address @@ -192,6 +193,7 @@ instance JavaData User where , toJavaExpression age , toJavaExpression gender , toJavaExpression weight + , toJavaExpression height , toJavaExpression bpm , toJavaExpression level , toJavaExpression address @@ -206,6 +208,7 @@ instance JavaData User where , toJavaExpression age , toJavaExpression gender , toJavaExpression weight + , toJavaExpression height , toJavaExpression bpm , toJavaExpression level , toJavaExpression address diff --git a/src/testgen/testgen/Java.hs b/src/testgen/testgen/Java.hs index 786f2e7..ff6dc9d 100644 --- a/src/testgen/testgen/Java.hs +++ b/src/testgen/testgen/Java.hs @@ -25,6 +25,7 @@ module Java , assertEquals , assertSame , assertThrows + , javaImports , runJava ) where @@ -85,7 +86,7 @@ instance JavaData Integer where instance JavaData Float where javaTypeName = const "float" - toJavaExpression = show + toJavaExpression f = show f ++ "f" instance JavaData Double where javaTypeName = const "double" @@ -229,3 +230,25 @@ runJava statements = do waitForProcess process return $ filter (not . isPrefixOf "| ") outputLines ) + +-- Useful code + +-- | Modules imported during testing +javaImports :: [String] +javaImports = + [ + "import java.util.*;" + , "" + , "import MakeItFit.MakeItFit;" + , "import MakeItFit.activities.Activity;" + , "import MakeItFit.activities.implementation.PushUp;" + , "import MakeItFit.activities.implementation.Running;" + , "import MakeItFit.activities.implementation.Trail;" + , "import MakeItFit.activities.implementation.WeightSquat;" + , "import MakeItFit.users.Gender;" + , "import MakeItFit.users.User;" + , "import MakeItFit.users.types.Amateur;" + , "import MakeItFit.users.types.Occasional;" + , "import MakeItFit.users.types.Professional;" + , "import MakeItFit.utils.MakeItFitDate;" + ] diff --git a/src/testgen/testgen/TestClass.hs b/src/testgen/testgen/TestClass.hs index 067fb29..0eed6b9 100644 --- a/src/testgen/testgen/TestClass.hs +++ b/src/testgen/testgen/TestClass.hs @@ -15,7 +15,7 @@ module TestClass (generateTestClass) where import Data.List (intercalate) -import Java (indent, toJavaExpressionList) +import Java (indent, toJavaExpressionList, javaImports) import TestTemplate (generateTestsFromTemplate) import System.Process (StdStream(CreatePipe), createProcess, proc, std_in, std_out, waitForProcess) @@ -50,7 +50,11 @@ templates = getAllTrainingPlansTemplate, addActivityToTrainingPlanTemplate, removeActivityFromTrainingPlanTemplate, - getTrainingPlansFromUserTemplate + getTrainingPlansFromUserTemplate, + executeQueryHowManyKMsDoneTemplate, + executeQueryHowManyKMsDoneDatesTemplate, + executeQueryHowManyAltimetryDoneTemplate, + executeQueryHowManyAltimetryDoneDatesTemplate ] generateTests :: IO [String] @@ -65,8 +69,10 @@ generateUnformattedTestClass = do $ concat [ [ "package MakeItFit;" , "" - , "import java.util.Arrays;" - , "import java.util.List;" + ] + , javaImports + , [ + "import static org.junit.jupiter.api.Assertions.*;" , "import org.junit.jupiter.api.Test;" , "import static org.junit.jupiter.api.Assertions.*;" , "" @@ -80,7 +86,6 @@ generateUnformattedTestClass = do , "import MakeItFit.trainingPlan.TrainingPlan;" , "import static org.junit.Assert.assertThrows;" , "import MakeItFit.exceptions.*;" - , "" , "public class MakeItFitTest {" ]