/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.logging.ping; import java.io.File; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.python.pydev.core.TestDependent; import org.python.pydev.logging.ping.AsyncLogPing; import org.python.pydev.logging.ping.ILogPingProvider; import org.python.pydev.logging.ping.ILogPingSender; import org.python.pydev.logging.ping.SynchedLogPing; public class LogPingTest extends TestCase { private SynchedLogPing logPing; private String location; private long nextTime; private boolean sentOk; private String sent; protected void setUp() throws Exception { location = TestDependent.TEST_PYDEV_BASE_LOC + "/testing_ping.txt"; new File(location).delete(); //delete if it exists logPing = createLogPing(); } private SynchedLogPing createLogPing() { return new SynchedLogPing(location, new ILogPingProvider() { public long getCurrentTime() { nextTime += 1; return nextTime; } public String getApplicationId() { return "00000000-0000-0000-0000-000000000000"; } }, new ILogPingSender() { public boolean sendPing(String pingString) { sent = pingString; return sentOk; } }); } protected void tearDown() throws Exception { new File(location).delete(); } /** String sent by Aptana Studio: String queryString = "" + "id=00000000-0000-0000-0000-000000000000&" + "version=3.0.0.qualifier&" + "product=org.eclipse.sdk.ide&" + "eclipse_version=3.6.0.v20100301&" + "os_architecture=x86&" + "os_name=Windows+XP&" + "os_version=5.1&" + "STUDIO_KEY=00%3A15%3AC5%3AC3%3A42%3ABA&" + "editor.opened%5B%5D=1272400425203%3Aorg.python.pydev.editor.TestingSend&" + "editor.closed%5B%5D=1272400529875%3Aorg.python.pydev.editor.TestingSend&" + "DATE_TIME%5B%5D=1272400557500%3A"; logPing.sendUpdate(queryString); */ public void testLogPing() throws Exception { logPing.addPingOpenEditor(); logPing.addPingOpenEditor(); //Note, already utf-8 encoded. assertEquals("id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=1%3APydevEditor_REPLACE_VERSION&" + "editor.opened%5B%5D=2%3APydevEditor_REPLACE_VERSION", logPing.getContentsToSend()); logPing.clear(); assertEquals("", logPing.getContentsToSend()); logPing.addPingOpenEditor(); logPing.addPingOpenEditor(); sentOk = false; logPing.send(); assertEquals("id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=3%3APydevEditor_REPLACE_VERSION&" + "editor.opened%5B%5D=4%3APydevEditor_REPLACE_VERSION", logPing.getContentsToSend()); sentOk = true; logPing.send(); assertEquals("", logPing.getContentsToSend()); assertEquals("id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=3%3APydevEditor_REPLACE_VERSION&" + "editor.opened%5B%5D=4%3APydevEditor_REPLACE_VERSION", sent); logPing.addPingOpenEditor(); logPing.addPingStartPlugin(); logPing.stop(); logPing = createLogPing(); assertEquals("id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=5%3APydevEditor_REPLACE_VERSION&" + "plugin.started%5B%5D=6%3APydev_REPLACE_VERSION", logPing.getContentsToSend()); logPing.stop(); logPing = createLogPing(); assertEquals("id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=5%3APydevEditor_REPLACE_VERSION&" + "plugin.started%5B%5D=6%3APydev_REPLACE_VERSION", logPing.getContentsToSend()); logPing.clear(); logPing.addPingOpenEditor(); logPing.send(); assertEquals("", logPing.getContentsToSend()); assertEquals( "id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=7%3APydevEditor_REPLACE_VERSION", sent); logPing.stop(); } public void testAsync() throws Exception { sentOk = true; AsyncLogPing asyncLogPing = new AsyncLogPing(logPing); asyncLogPing.addPingOpenEditor(); asyncLogPing.addPingOpenEditor(); asyncLogPing.addPingOpenEditor(); asyncLogPing.send(); asyncLogPing.addPingOpenEditor(); asyncLogPing.addPingStartPlugin(); asyncLogPing.send(); assertEquals(null, sent); synchronized (this) { wait(AsyncLogPing.SCHEDULE_TIME * 5); } assertEquals("id=00000000-0000-0000-0000-000000000000&" + "editor.opened%5B%5D=1%3APydevEditor_REPLACE_VERSION&" + "editor.opened%5B%5D=2%3APydevEditor_REPLACE_VERSION&" + "editor.opened%5B%5D=3%3APydevEditor_REPLACE_VERSION&" + "editor.opened%5B%5D=4%3APydevEditor_REPLACE_VERSION&" + "plugin.started%5B%5D=5%3APydev_REPLACE_VERSION", sent); asyncLogPing.stop(); } public static Test suite() { TestSuite suite = new TestSuite("LogPingTest"); //$JUnit-BEGIN$ suite.addTestSuite(LogPingTest.class); //$JUnit-END$ return suite; } }