Вот понравилась мелодия Ephemeral Feeling - Sad Beautiful Piano, решил воспроизвести midi и потом по ней учиться.
Пока вот что получилось.
Может кому-то пригодится.
Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!

package com.services;
import org.springframework.stereotype.Component;
/**
* User: apofig
* Date: 11/18/12
* Time: 9:49 PM
*/
@Component("myService")
public class MyService {
public String getString() {
return "Hello from " + MyService.class.getSimpleName() + "!";
}
}
Он инджектится в контроллер MyController с помощью @Autowired аннотации Spring'ом.
package com.controller;
import com.services.MyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* User: apofig
* Date: 9/20/12
* Time: 1:37 PM
*/
@Controller
@RequestMapping("/")
public class MyController {
@Autowired
private MyService service;
@RequestMapping(method = RequestMethod.GET)
public String savePlayerGame(Model model) {
model.addAttribute("string", service.getString());
return "view";
}
}
Контроллер отправляет данные на jsp, которая рисует сообщение на экране
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;">
<title>Main page</title>
</head>
<body>
<c:if test="${string!=null}">
<span id="message">${string}</span>
</c:if>
<body>
</html>
public class IntegrationTest {
private String url = "http://localhost:8080/";
private WebDriver driver = new HtmlUnitDriver(true);
private MyService service;
@Test
public void shouldGetMessageFromService() throws IOException, InterruptedException {
when(service.getString()).thenReturn("Hi from mock!");
driver.get(url);
String message = driver.findElement(By.id("message")).getText();
assertEquals("Hi from mock!", message);
}
}
Server server = new Server(0);
WebAppContext context = new WebAppContext("src/main/webapp", "");
context.addEventListener(new ServletContextListener() {
@Override
public void contextInitialized(ServletContextEvent sce)
ServletContext servletContext = sce.getServletContext();
// вот тут
}
}
server.setHandler(context);
server.start();
int port = server.getConnectors()[0].getLocalPort();
String url = "http://localhost:" + port;
WebApplicationContext applicationContext =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
private static Object mocking(WebApplicationContext webAppContext, String beanName, boolean isMockOfSpy) {
Object realBean = webAppContext.getBean(beanName);
AbstractRefreshableApplicationContext context = (AbstractRefreshableApplicationContext) webAppContext;
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
Object newBean = null;
if (isMockOfSpy) {
newBean = mock(realBean.getClass());
} else {
newBean = spy(realBean);
}
beanFactory.removeBeanDefinition(beanName);
beanFactory.registerSingleton(beanName, newBean);
return beanFactory.getBean(beanName);
}
Server server = new Server(0);
WebAppContext context = new WebAppContext("src/main/webapp", "");
// Spring контекст недуступен
context.addEventListener(new ServletContextListener() {
@Override
public void contextInitialized(ServletContextEvent sce)
ServletContext servletContext = sce.getServletContext();
// Spring контекст так же недуступен
}
}
server.setHandler(context);
server.start();
int port = server.getConnectors()[0].getLocalPort();
String url = "http://localhost:" + port;
Обыно он хранится в _contextAttributes, но тут пока пусто
private ServletContext servletContext;
private WebApplicationContext applicationContext;
public String start() throws Exception {
server = new Server(0);
final WebAppContext context = loadWebContext();
context.addEventListener(new ServletContextListener() {
@Override
public void contextInitialized(ServletContextEvent sce) {
servletContext = sce.getServletContext();
context.addEventListener(new ServletContextListener() {
@Override
public void contextInitialized(ServletContextEvent sce) {
applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
// тут бины тепленькие, и все мои!!!
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
});
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
});
server.setHandler(context);
server.start();
int port = server.getConnectors()[0].getLocalPort();
String url = "http://localhost:" + port;
return url;
}
Дальше дело техники, вызываем метод
private static Object mocking(WebApplicationContext webAppContext, String beanName, boolean isMockOfSpy) {
public class XIterator implements Iterable<Integer>{
private int from;
private int to;
private int x;
private boolean increase;
public XIterator(int from, int to, boolean increase) {
if (increase) {
this.from = Math.min(from, to);
this.to = Math.max(from, to);
} else {
this.from = Math.max(from, to);
this.to = Math.min(from, to);
}
this.increase = increase;
this.x = this.from;
}
@Override
public Iterator<Integer> iterator() {
return new Iterator<Integer>() {
@Override
public boolean hasNext() {
if (increase) {
return x <= to;
} else {
return x >= to;
}
}
@Override
public Integer next() {
if (increase) {
return x++;
} else {
return x--;
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}
Вот тесты для него
public class XIteratorTest {
@Test
public void increase() {
assertIteratorValues(new XIterator(0, 10, true), "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]");
}
@Test
public void decrease() {
assertIteratorValues(new XIterator(0, 10, false), "[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]");
}
@Test
public void increaseNegative() {
assertIteratorValues(new XIterator(-5, 5, true), "[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]");
}
private void assertIteratorValues(Iterable<Integer> iterator, String expected) {
LinkedList list = new LinkedList();
for (Integer i : iterator) {
list.add(i);
}
assertEquals(expected, list.toString());
}
@Test
public void decreaseNegative() {
assertIteratorValues(new XIterator(-5, 5, false), "[5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5]");
}
@Test
public void increaseBadFromTo() {
assertIteratorValues(new XIterator(5, -5, true), "[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]");
}
@Test
public void decreaseBadFromTo() {
assertIteratorValues(new XIterator(5, -5, false), "[5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5]");
}
@Test
public void zeroIterator() {
assertIteratorValues(new XIterator(0, 0, false), "[0]");
assertIteratorValues(new XIterator(0, 0, true), "[0]");
}
}
"Ты не можешь утвержать, что я вижу крассный цвет так же как и ты, мы всего лишь научились различать его, но видеть мы его можем по-разному. Да, аппаратная часть говорит о некоем сходстве между нами, но видит человек не глазами, а мозгом..."Никто никогда не сможет узнать каким мир вижу я. Даже, если взять во внимание все что я создал, что говорил, как при этом вел себя - все-равно никто и никогда не сможет сказать кто или что такое Саня. Так же и я не могу этого сделать по отношению к окружающим людям. Но все же я имею возможность судить об окружающих. Как так получается?
Из разговоров на перекуре
Нельзя рассмотреть в другом человеке то, чего нет в тебе самом.