Skip to content
This repository was archived by the owner on Jun 17, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/main/java/MakeItFit/MakeItFit.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
144 changes: 130 additions & 14 deletions src/testgen/testgen/FacadeTemplates.hs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@ module FacadeTemplates (
getAllTrainingPlansTemplate,
addActivityToTrainingPlanTemplate,
removeActivityFromTrainingPlanTemplate,
getTrainingPlansFromUserTemplate
getTrainingPlansFromUserTemplate,
executeQueryHowManyKMsDoneTemplate,
executeQueryHowManyKMsDoneDatesTemplate,
executeQueryHowManyAltimetryDoneTemplate,
executeQueryHowManyAltimetryDoneDatesTemplate
) where

import Java (assertEquals, assertTrue, runJava, toJavaExpression, toJavaExpressionList,
Expand All @@ -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
Expand Down Expand Up @@ -834,3 +944,9 @@ getTrainingPlansFromUserTemplate :: TestTemplate
getTrainingPlansFromUserTemplate =
genToTestTemplate "getTrainingPlansFromUserTest" getTrainingPlansFromUserTestGenerator 1

executeQueryHowManyAltimetryDoneDatesTemplate :: TestTemplate
executeQueryHowManyAltimetryDoneDatesTemplate =
TestTemplate
"testExecuteQueryHowManyAltimetryDoneDates"
executeQueryHowManyAltimetryDoneDatesGenerator
1
3 changes: 3 additions & 0 deletions src/testgen/testgen/Generators.hs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ instance JavaData User where
, toJavaExpression age
, toJavaExpression gender
, toJavaExpression weight
, toJavaExpression height
, toJavaExpression bpm
, toJavaExpression level
, toJavaExpression address
Expand All @@ -192,6 +193,7 @@ instance JavaData User where
, toJavaExpression age
, toJavaExpression gender
, toJavaExpression weight
, toJavaExpression height
, toJavaExpression bpm
, toJavaExpression level
, toJavaExpression address
Expand All @@ -206,6 +208,7 @@ instance JavaData User where
, toJavaExpression age
, toJavaExpression gender
, toJavaExpression weight
, toJavaExpression height
, toJavaExpression bpm
, toJavaExpression level
, toJavaExpression address
Expand Down
25 changes: 24 additions & 1 deletion src/testgen/testgen/Java.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ module Java
, assertEquals
, assertSame
, assertThrows
, javaImports
, runJava
) where

Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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;"
]
15 changes: 10 additions & 5 deletions src/testgen/testgen/TestClass.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -50,7 +50,11 @@ templates =
getAllTrainingPlansTemplate,
addActivityToTrainingPlanTemplate,
removeActivityFromTrainingPlanTemplate,
getTrainingPlansFromUserTemplate
getTrainingPlansFromUserTemplate,
executeQueryHowManyKMsDoneTemplate,
executeQueryHowManyKMsDoneDatesTemplate,
executeQueryHowManyAltimetryDoneTemplate,
executeQueryHowManyAltimetryDoneDatesTemplate
]

generateTests :: IO [String]
Expand All @@ -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.*;"
, ""
Expand All @@ -80,7 +86,6 @@ generateUnformattedTestClass = do
, "import MakeItFit.trainingPlan.TrainingPlan;"
, "import static org.junit.Assert.assertThrows;"
, "import MakeItFit.exceptions.*;"

, ""
, "public class MakeItFitTest {"
]
Expand Down
Loading