// Last edited on 2014-12-17 03:16:41 by stolfilocal package tests; import quack.User; import quack.Message; import quack.Contact; import quack.TimeFormat; import quack.Server; import quack.HTML; import quack.UserImpl; import quack.MessageImpl; import quack.ContactImpl; import quack.ServerImpl; import quack.HTMLImpl; import quack.ServerImpl; import java.util.List; import java.io.PrintWriter; import java.io.StringWriter; import java.io.IOException; import java.io.OutputStream; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.BufferedWriter; import java.io.PrintWriter; import java.io.Writer; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; import org.mockito.Mockito; public class HTMLTest extends Mockito { public static void main(String[] args) { System.err.println("Greetings Globe!"); Server server = new ServerImpl().initialize("", null, "", null); HTML html = new HTMLImpl().initialize(server); int nUser = 10; int nMessage = 100; int nContact = 50; User user[] = new User[nUser]; Message message[] = new Message[nMessage]; Contact contact[] = new Contact[nContact]; createUsersAndStuff(server, user, message, contact); String pageName = args[0]; try { if (pageName.equals("MessageList")) { test_MessageListPage(pageName, html, user, message, contact); } else { System.err.println("Unknown page name \"" + pageName + "\""); } } catch (IOException e) { System.err.println("Gosh! Ghastly grievance!"); } } static void createUsersAndStuff(Server server, User user[], Message message[], Contact contact[]) { int nUser = user.length; int nMessage = message.length; int nContact = contact.length; // Create some users, with no messages or contacts: int dClock = (nUser + nMessage + nContact); /* Shift in clock to ensure all creation timestamps are different. */ for (int i = 0; i < nUser; i++) { String loginName = String.format("user%03d", i); String email = loginName + "@foo.bar.br"; String fullName = "João A" + String.format("%03x", i) + " da Silva"; String password = String.format("%03x", i) + String.format("%03d", i); long creationTime = server.currentTime() - dClock; dClock++; long dbIndex = 1000 + i; user[i] = new UserImpl().initialize(loginName, email, fullName, password, creationTime, dbIndex); assert(user[i] != null); } // Create some messages for them: for (int i = 0; i < nMessage; i++) { User poster = user[(((i + 5)*(i + 37))/ 3) % nUser]; long dbIndex = 2000 + i; long postedTime = server.currentTime() - dClock; dClock++; message[i] = new MessageImpl(); if ((i == 0) || ((i % 3) != 0)) { // Mensagem original: String body = "Quack " + String.format("%d", i) + " quack!"; message[i].initialize(poster, body, dbIndex, postedTime); } else { // Repostagem: assert(i > 0); Message parent = message[(((i + 23)*(i + 7))/ 5) % i]; message[i].initialize(poster, parent, dbIndex, postedTime); } assert(message[i] != null); poster.addMessage(message[i]); } // Create some contacts: String stName[] = new String[3]; stName[0] = "Inactive"; stName[1] = "Follow"; stName[2] = "Block"; int ic = 0; // Contact index. for (int ixs = 0; ixs < nUser; ixs++) { int sourceIx = ixs; // Index of source user. int nc = (nContact - ic)/(nUser - ixs); // Number of contacts of this user. assert(nc < nUser); int dt = (nUser - 1)/nc; // Increment in {targetIx}. for (int ixt = 0; ixt < nc; ixt++) { int targetIx = (sourceIx + 1 + dt*ixt) % nUser; assert (targetIx != sourceIx); User source = user[sourceIx]; User target = user[targetIx]; String status = stName[(((ic + 41)*(ic + 37))/ 12) % 3]; long lastModTime = server.currentTime() - dClock; dClock++; contact[ic] = new ContactImpl().initialize(source, target, status, lastModTime); assert(contact[ic] != null); source.addDirectContact(contact[ic]); target.addReverseContact(contact[ic]); ic++; } } } static void test_MessageListPage ( String pageName, HTML html, User user[], Message message[], Contact contact[] ) throws IOException { String fileName = "out/" + pageName + ".html"; System.err.println("writing " + fileName + " ..."); // Create a mock {request} that asks for the timeline of some user: HttpServletRequest request = mock(HttpServletRequest.class); // Create a mock {response} that writes to the file {fileName}: PrintWriter wr = new PrintWriter(fileName, "UTF-8"); HttpServletResponse response = Mockito.mock(HttpServletResponse.class); Mockito.when(response.getWriter()).thenReturn(wr); // Call {HTMP.writeMessageList}: User requestor = user[0]; User subject = user[1]; String title = "Mensagens Recebidas"; List list = subject.getPostedMessages(); String requestMoreCmd = "ShowReceivedMessages"; int start = 3; int n = 10; int maxN = 50; html.listPage(response, requestor, "Test Message list", list, start, n, requestMoreCmd, subject, maxN); wr.close(); System.err.println("Gosh!"); } // void testInvalidUser() throws Exception { // // cria requests e responses falsas // HttpServletRequest request = mock(HttpServletRequest.class); // when(request.getParameter("username")).thenReturn("notRealUser"); // when(request.getParameter("password")).thenReturn("password"); // StringWriter writer = new StringWriter(); // // cria um writer falso para a resposta // when(response.getWriter()).thenReturn(new PrintWriter(writer)); // LoginServlet loginServlet = new LoginServlet(); // loginServlet.testDoPost(request, response); // // assegura que o usuario recebeu a mensagem de falha // assert(writer.toString().contains("Falha ao realizar login")); // } // public void testRegisterUser() throws Exception { // // cria requests e responses falsas // HttpServletRequest request = mock(HttpServletRequest.class); // HttpServletResponse response = mock(HttpServletResponse.class); // when(request.getParameter("username")).thenReturn("testUser"); // when(request.getParameter("password")).thenReturn("testPassword"); // StringWriter writer = new StringWriter(); // // cria um writer falso para a resposta // when(response.getWriter()).thenReturn(new PrintWriter(writer)); // RegistrationServlet cadastroServlet = new RegistrationServlet(); // cadastroServlet.testDoGet(request, response); // verify(response, times(1)).sendRedirect("/Quack/loginpage.jsp"); // } }