Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
cs2-20wi
project01
Commits
ba4f6404
Commit
ba4f6404
authored
4 years ago
by
Archie Shahidullah
Browse files
Options
Download
Email Patches
Plain Diff
Update CaesarCipherSolverTests.java
parent
81735e4e
1 merge request
!1
Update CaesarCipherSolverTests.java
Pipeline
#36395
failed with stage
in 0 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
tests/edu/caltech/cs2/project01/CaesarCipherSolverTests.java
+88
-60
tests/edu/caltech/cs2/project01/CaesarCipherSolverTests.java
with
88 additions
and
60 deletions
+88
-60
tests/edu/caltech/cs2/project01/CaesarCipherSolverTests.java
View file @
ba4f6404
...
...
@@ -2,15 +2,18 @@ package edu.caltech.cs2.project01;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertEquals
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertIterableEquals
;
import
static
org
.
junit
.
jupiter
.
params
.
provider
.
Arguments
.
arguments
;
import
edu.caltech.cs2.helpers.Inspection
;
import
org.junit.jupiter.api.*
;
import
org.junit.jupiter.params.ParameterizedTest
;
import
org.junit.jupiter.params.provider.CsvSource
;
import
org.junit.jupiter.params.provider.Arguments
;
import
org.junit.jupiter.params.provider.MethodSource
;
import
org.junit.jupiter.params.provider.ValueSource
;
import
java.io.ByteArrayInputStream
;
import
java.io.InputStream
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.ArrayList
;
...
...
@@ -18,17 +21,29 @@ import java.io.ByteArrayOutputStream;
import
java.io.FileDescriptor
;
import
java.io.FileOutputStream
;
import
java.io.PrintStream
;
import
java.util.stream.Stream
;
@TestMethodOrder
(
MethodOrderer
.
OrderAnnotation
.
class
)
class
CaesarCipherSolverTests
{
String
STRING_SOURCE
=
"src/edu/caltech/cs2/project01/CaesarCipherSolver.java"
;
static
final
String
DECLARATION
=
"WHEN IN THE COURSE OF HUMAN EVENTS IT BECOMES NECESSARY FOR ONE PEOPLE TO DISSOLVE THE "
+
"POLITICAL BANDS WHICH HAVE CONNECTED THEM WITH ANOTHER AND TO ASSUME AMONG THE POWERS OF THE EARTH THE "
+
"SEPARATE AND EQUAL STATION TO WHICH THE LAWS OF NATURE AND OF NATURES GOD ENTITLE THEM A DECENT RESPECT TO "
+
"THE OPINIONS OF MANKIND REQUIRES THAT THEY SHOULD DECLARE THE CAUSES WHICH IMPEL THEM TO THE SEPARATION"
;
static
final
String
CONSTITUTION
=
"WE THE PEOPLE OF THE UNITED STATES IN ORDER TO FORM A MORE PERFECT UNION ESTABLISH "
+
"JUSTICE INSURE DOMESTIC TRANQUILITY PROVIDE FOR THE COMMON DEFENCE PROMOTE THE GENERAL WELFARE AND SECURE "
+
"THE BLESSINGS OF LIBERTY TO OURSELVES AND OUR POSTERITY DO ORDAIN AND ESTABLISH THIS CONSTITUTION FOR THE "
+
"UNITED STATES OF AMERICA"
;
@Order
(
0
)
@Tag
(
"C"
)
@DisplayName
(
"Test no usage of split(), join(), contains()"
)
@DisplayName
(
"Test no usage of split(), join(), contains()
, indexOf()
"
)
@Test
public
void
testNoUsageOfBannedMethods
()
{
List
<
String
>
regexps
=
List
.
of
(
"\\.split\\(.*?\\)"
,
"\\.join\\(.*?\\)"
,
"\\.contains\\(.*?\\)"
);
List
<
String
>
regexps
=
List
.
of
(
"\\.split\\(.*?\\)"
,
"\\.join\\(.*?\\)"
,
"\\.contains\\(.*?\\)"
,
"\\.indexOf\\(.*?\\)"
);
Inspection
.
assertNoUsageOf
(
STRING_SOURCE
,
regexps
);
}
...
...
@@ -75,7 +90,7 @@ class CaesarCipherSolverTests {
@Tag
(
"C"
)
@ParameterizedTest
@DisplayName
(
"Test splitBySpaces(String)"
)
@ValueSource
(
strings
=
{
""
,
"HI"
,
"HI THERE"
,
"A B C D E F GGG"
})
@ValueSource
(
strings
=
{
""
,
"HI"
,
"HI THERE"
,
"A B C D E F GGG"
,
"TRUTH IS NOT A DEMOCRACY"
,
DECLARATION
})
public
void
testSplitBySpaces
(
String
toSplit
)
{
List
<
String
>
list
=
CaesarCipherSolver
.
splitBySpaces
(
toSplit
);
assertEquals
(
toSplit
.
trim
(),
String
.
join
(
" "
,
list
));
...
...
@@ -83,78 +98,90 @@ class CaesarCipherSolverTests {
@Order
(
8
)
@Tag
(
"C"
)
@DisplayName
(
"Test putTogetherWithSpaces([\"ABCD\"])"
)
@Test
public
void
testPutTogetherWithSpacesSingleton
()
{
@ParameterizedTest
@DisplayName
(
"Test putTogetherWithSpaces(String)"
)
@ValueSource
(
strings
=
{
"ABCD"
,
"NEXUS"
,
"RIVIERA"
})
public
void
testPutTogetherWithSpacesSingleton
(
String
toPutTogether
)
{
List
<
String
>
input
=
new
ArrayList
<>();
input
.
add
(
"ABCD"
);
Assertions
.
assertEquals
(
"ABCD"
,
CaesarCipherSolver
.
putTogetherWithSpaces
(
input
));
input
.
add
(
toPutTogether
);
Assertions
.
assertEquals
(
toPutTogether
,
CaesarCipherSolver
.
putTogetherWithSpaces
(
input
));
}
private
static
Stream
<
Arguments
>
putArgumentsStream
()
{
return
Stream
.
of
(
Arguments
.
of
((
Object
)
new
String
[]
{
"ABCD"
,
"DDDD"
}),
Arguments
.
of
((
Object
)
new
String
[]
{
"ONE"
,
"BY"
,
"LAND"
,
"TWO"
,
"BY"
,
"SEA"
}),
Arguments
.
of
((
Object
)
CONSTITUTION
.
split
(
" "
))
);
}
@Order
(
9
)
@Tag
(
"C"
)
@DisplayName
(
"Test putTogetherWithSpaces([\"ABCD\", \"DDDD\"])"
)
@Test
public
void
testPutTogetherWithSpaces
()
{
List
<
String
>
input
=
new
ArrayList
<>();
input
.
add
(
"ABCD"
);
input
.
add
(
"DDDD"
);
Assertions
.
assertEquals
(
"ABCD DDDD"
,
CaesarCipherSolver
.
putTogetherWithSpaces
(
input
));
@ParameterizedTest
@DisplayName
(
"Test putTogetherWithSpaces()"
)
@MethodSource
(
"putArgumentsStream"
)
public
void
testPutTogetherWithSpaces
(
String
[]
strings
)
{
List
<
String
>
input
=
Arrays
.
asList
(
strings
);
Assertions
.
assertEquals
(
String
.
join
(
" "
,
input
),
CaesarCipherSolver
.
putTogetherWithSpaces
(
input
));
}
@Order
(
10
)
@Tag
(
"C"
)
@DisplayName
(
"Test howManyWordsIn([\"ABCD\", \"DDDD\"], [])"
)
@Test
public
void
testHowManyWordsInEmpty
()
{
List
<
String
>
dictionary
=
new
ArrayList
<>();
List
<
String
>
sentence
=
new
ArrayList
<>();
sentence
.
add
(
new
String
(
"ABCD"
));
sentence
.
add
(
new
String
(
"DDDD"
));
Assertions
.
assertEquals
(
0
,
CaesarCipherSolver
.
howManyWordsIn
(
sentence
,
dictionary
));
private
static
Stream
<
Arguments
>
howArgumentsStream
()
{
return
Stream
.
of
(
arguments
(
new
String
[]
{
""
},
new
String
[]
{
"ABCD"
,
"DDDD"
},
0
),
arguments
(
new
String
[]
{
"ABCD"
},
new
String
[]
{
"ABCD"
,
"DDDD"
},
1
),
arguments
(
new
String
[]
{
"ABCD"
,
"EFGH"
},
new
String
[]
{
"ABCD"
,
"ABCD"
,
"NOT"
},
2
),
// DECLARATION but with duplicate words removed
arguments
(
new
String
[]
{
"WHEN"
,
"IN"
,
"THE"
,
"COURSE"
,
"OF"
,
"HUMAN"
,
"EVENTS"
,
"IT"
,
"BECOMES"
,
"NECESSARY"
,
"FOR"
,
"ONE"
,
"PEOPLE"
,
"TO"
,
"DISSOLVE"
,
"POLITICAL"
,
"BANDS"
,
"WHICH"
,
"HAVE"
,
"CONNECTED"
,
"THEM"
,
"WITH"
,
"ANOTHER"
,
"AND"
,
"ASSUME"
,
"AMONG"
,
"POWERS"
,
"EARTH"
,
"SEPARATE"
,
"EQUAL"
,
"STATION"
,
"LAWS"
,
"NATURE"
,
"NATURES"
,
"GOD"
,
"ENTITLE"
,
"A"
,
"DECENT"
,
"RESPECT"
,
"OPINIONS"
,
"MANKIND"
,
"REQUIRES"
,
"THAT"
,
"THEY"
,
"SHOULD"
,
"DECLARE"
,
"CAUSES"
,
"IMPEL"
,
"SEPARATION"
},
CONSTITUTION
.
split
(
" "
),
19
)
);
}
@Order
(
1
1
)
@Order
(
1
0
)
@Tag
(
"C"
)
@DisplayName
(
"Test howManyWordsIn([\"ABCD\", \"DDDD\"], [\"ABCD\"])"
)
@Test
public
void
testHowManyWordsInSingleton
()
{
List
<
String
>
dictionary
=
new
ArrayList
<>();
dictionary
.
add
(
new
String
(
"ABCD"
));
List
<
String
>
sentence
=
new
ArrayList
<>();
sentence
.
add
(
new
String
(
"ABCD"
));
sentence
.
add
(
new
String
(
"DDDD"
));
Assertions
.
assertEquals
(
1
,
CaesarCipherSolver
.
howManyWordsIn
(
sentence
,
dictionary
));
@ParameterizedTest
@DisplayName
(
"Test howManyWordsIn"
)
@MethodSource
(
"howArgumentsStream"
)
public
void
testHowManyWords
(
String
[]
dict
,
String
[]
sent
,
int
same
)
{
List
<
String
>
dictionary
=
Arrays
.
asList
(
dict
);
List
<
String
>
sentence
=
Arrays
.
asList
(
sent
);
Assertions
.
assertEquals
(
same
,
CaesarCipherSolver
.
howManyWordsIn
(
sentence
,
dictionary
));
}
@Order
(
12
)
@Tag
(
"C"
)
@DisplayName
(
"Test howManyWordsIn([\"ABCD\", \"ABCD\", \"NOT\"], [\"ABCD\", \"EFGH\"])"
)
@Test
public
void
testHowManyWordsWithDuplicates
()
{
List
<
String
>
dictionary
=
new
ArrayList
<>();
dictionary
.
add
(
new
String
(
"ABCD"
));
dictionary
.
add
(
new
String
(
"EFGH"
));
List
<
String
>
sentence
=
new
ArrayList
<>();
sentence
.
add
(
new
String
(
"ABCD"
));
sentence
.
add
(
new
String
(
"ABCD"
));
sentence
.
add
(
new
String
(
"NOT"
));
Assertions
.
assertEquals
(
2
,
CaesarCipherSolver
.
howManyWordsIn
(
sentence
,
dictionary
));
private
static
Stream
<
Arguments
>
mainArgumentsStream
()
{
return
Stream
.
of
(
arguments
(
"HELLO"
,
new
String
[]
{
"HELLO"
}),
arguments
(
"FYYFHP FY IFBS"
,
new
String
[]
{
"ATTACK AT DAWN"
}),
arguments
(
"AI NYUG"
,
new
String
[]
{
"GO TEAM"
}),
arguments
(
"NK"
,
new
String
[]
{
"BY"
,
"HE"
,
"IF"
}),
arguments
(
"EH"
,
new
String
[]
{
"OR"
,
"BE"
}),
arguments
(
"BO"
,
new
String
[]
{
"RE"
,
"AN"
}),
// Stress tests
arguments
(
"DOLU PU AOL JVBYZL VM OBTHU LCLUAZ PA ILJVTLZ ULJLZZHYF MVY VUL WLVWSL AV KPZZVSCL AOL "
+
"WVSPAPJHS IHUKZ DOPJO OHCL JVUULJALK AOLT DPAO HUVAOLY HUK AV HZZBTL HTVUN AOL WVDLYZ VM AOL "
+
"LHYAO AOL ZLWHYHAL HUK LXBHS ZAHAPVU AV DOPJO AOL SHDZ VM UHABYL HUK VM UHABYLZ NVK LUAPASL "
+
"AOLT H KLJLUA YLZWLJA AV AOL VWPUPVUZ VM THURPUK YLXBPYLZ AOHA AOLF ZOVBSK KLJSHYL AOL JHBZLZ "
+
"DOPJO PTWLS AOLT AV AOL ZLWHYHAPVU"
,
new
String
[]
{
DECLARATION
}),
arguments
(
"RZ OCZ KZJKGZ JA OCZ PIDOZY NOVOZN DI JMYZM OJ AJMH V HJMZ KZMAZXO PIDJI ZNOVWGDNC EPNODXZ "
+
"DINPMZ YJHZNODX OMVILPDGDOT KMJQDYZ AJM OCZ XJHHJI YZAZIXZ KMJHJOZ OCZ BZIZMVG RZGAVMZ VIY "
+
"NZXPMZ OCZ WGZNNDIBN JA GDWZMOT OJ JPMNZGQZN VIY JPM KJNOZMDOT YJ JMYVDI VIY ZNOVWGDNC OCDN "
+
"XJINODOPODJI AJM OCZ PIDOZY NOVOZN JA VHZMDXV"
,
new
String
[]
{
CONSTITUTION
})
);
}
@Order
(
1
3
)
@Order
(
1
1
)
@Tag
(
"C"
)
@ParameterizedTest
@DisplayName
(
"Test main()"
)
@CsvSource
({
"HELLO, HELLO"
,
"FYYFHP FY IFBS, ATTACK AT DAWN"
,
"AI NYUG, GO TEAM"
})
public
void
testMain
(
String
cipher
,
String
expected
)
{
@MethodSource
(
"mainArgumentsStream"
)
public
void
testMain
(
String
cipher
,
String
[]
expected
)
{
ByteArrayOutputStream
outputStream
=
new
ByteArrayOutputStream
();
System
.
setOut
(
new
PrintStream
(
outputStream
));
byte
[]
input
=
cipher
.
getBytes
();
InputStream
fakeIn
=
new
ByteArrayInputStream
(
input
);
System
.
setIn
(
fakeIn
);
...
...
@@ -162,6 +189,7 @@ class CaesarCipherSolverTests {
System
.
setOut
(
new
PrintStream
(
new
FileOutputStream
(
FileDescriptor
.
out
)));
String
output
=
outputStream
.
toString
();
System
.
out
.
print
(
output
);
assertEquals
(
"Type a sentence to decrypt: "
+
expected
+
"\n"
,
output
.
replaceAll
(
"\r\n"
,
"\n"
));
assertEquals
(
"Type a sentence to decrypt: "
+
String
.
join
(
"\n"
,
expected
)
+
"\n"
,
output
.
replaceAll
(
"\r\n"
,
"\n"
));
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help