001package edu.pdx.cs.joy.grader; 002 003import edu.pdx.cs.joy.grader.GenerateStudentInitialsFile.StudentInitials; 004import edu.pdx.cs.joy.grader.gradebook.Student; 005import org.junit.jupiter.api.Test; 006 007import java.util.Iterator; 008import java.util.List; 009import java.util.SortedSet; 010import java.util.stream.Stream; 011 012import static org.hamcrest.MatcherAssert.assertThat; 013import static org.hamcrest.Matchers.equalTo; 014import static org.hamcrest.Matchers.hasSize; 015 016public class GenerateStudentInitialsFileTest { 017 018 @Test 019 void generatedInitialsAreSortedByLastNameInitial() { 020 Stream<Student> students = Stream.of( 021 new Student("larry").setFirstName("Larry").setLastName("Smith"), 022 new Student("zoe").setFirstName("Zoe").setLastName("Adams"), 023 new Student("alice").setFirstName("Alice").setLastName("Smith") 024 ); 025 026 List<String> initials = GenerateStudentInitialsFile.generateInitials(students); 027 028 assertThat(initials, hasSize(3)); 029 030 Iterator<String> iterator = initials.iterator(); 031 assertThat(iterator.next(), equalTo("ZA")); 032 assertThat(iterator.next(), equalTo("AS")); 033 assertThat(iterator.next(), equalTo("LS")); 034 } 035 036 @Test 037 void onlyFirstLetterOfNameIsCapitalized() { 038 StudentInitials initials = new StudentInitials(new Student("test").setFirstName("Aa").setLastName("Bb")); 039 initials.incrementUniqueCharsOfFirstName(); 040 assertThat(initials.getInitials(), equalTo("AaB")); 041 initials.incrementUniqueCharsOfLastName(); 042 assertThat(initials.getInitials(), equalTo("AaBb")); 043 } 044 045 @Test 046 void compareStudentInitials() { 047 StudentInitials first = new StudentInitials(new Student("first").setFirstName("A").setLastName("A")); 048 StudentInitials second = new StudentInitials(new Student("second").setFirstName("A").setLastName("B")); 049 assertThat(first.compareTo(second), equalTo(-1)); 050 assertThat(second.compareTo(first), equalTo(1)); 051 assertThat(first.getInitials(), equalTo("AA")); 052 assertThat(second.getInitials(), equalTo("AB")); 053 054 first = new StudentInitials(new Student("first").setFirstName("A").setLastName("Aa")); 055 second = new StudentInitials(new Student("second").setFirstName("A").setLastName("Ab")); 056 assertThat(first.compareTo(second), equalTo(-1)); 057 assertThat(second.compareTo(first), equalTo(1)); 058 assertThat(first.getInitials(), equalTo("AAa")); 059 assertThat(second.getInitials(), equalTo("AAb")); 060 } 061 062 @Test 063 void useMoreCharactersWhenInitialsMatch() { 064 Stream<Student> students = Stream.of( 065 new Student("zoe").setFirstName("Zoe").setLastName("Adams"), 066 new Student("zelda").setFirstName("Zelda").setLastName("Adams"), 067 new Student("larry").setFirstName("Larry").setLastName("Johnson"), 068 new Student("larry").setFirstName("Larry").setLastName("Jones") 069 ); 070 071 List<String> initials = GenerateStudentInitialsFile.generateInitials(students); 072 073 assertThat(initials, hasSize(4)); 074 075 Iterator<String> iterator = initials.iterator(); 076 assertThat(iterator.next(), equalTo("ZeAd")); 077 assertThat(iterator.next(), equalTo("ZoAd")); 078 assertThat(iterator.next(), equalTo("LaJoh")); 079 assertThat(iterator.next(), equalTo("LaJon")); 080 081 } 082 083}