package hu.advancedweb.scott; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Ignore; import org.junit.Test; import hu.advancedweb.scott.MockitoTest.Foo; import hu.advancedweb.scott.MockitoTest.MockHolder; import hu.advancedweb.scott.helper.TestHelper; /** * Note that this file is sensitive to formatting. * * @author David Csakvari */ public class WeirdFormattingTest { @Test public void simpleFormatting() throws Exception { String outer = "outer1"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); { String inner = "inner1"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); } outer = "outer2"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); } @Test public void inlineFormatting_1() throws Exception { String outer = "outer1"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); {String inner = "inner1"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); } outer = "outer2"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); } @Test public void inlineFormatting_2() throws Exception { String outer = "outer1"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); { String inner = "inner1"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); } outer = "outer2"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); } @Test public void inlineFormatting_3() throws Exception { String outer = "outer1"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); { String inner = "inner1"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); } outer = "outer2"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); } @Test public void inlineFormatting_4() throws Exception { String outer = "outer1"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); { String inner = "inner1"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); } outer = "outer2"; assertThat(TestHelper.getLastRecordedStateForVariable("outer"), equalTo(outer)); } @SuppressWarnings("null") @Test public void simpleFormattingWithTryCatch() { String o = null; try { String inner = "inner"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); o.length(); } catch (Exception e) { o = "fallback"; assertThat(TestHelper.getLastRecordedStateForVariable("e"), equalTo(e.toString())); assertThat(TestHelper.getLastRecordedStateForVariable("o"), equalTo(o)); } } @SuppressWarnings("null") @Test @Ignore // FIXME: See issue 19: multiple variable declarations in different scopes on the same line cause problems. public void inlineFormattingWithTryCatch() { String o = null; try { String inner = "inner"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); o.length(); } catch (Exception e) { o = "fallback"; assertThat(TestHelper.getLastRecordedStateForVariable("e"), equalTo(e.toString())); assertThat(TestHelper.getLastRecordedStateForVariable("o"), equalTo(o)); } } @SuppressWarnings("null") @Test public void expandedFormattingWithTryCatch() { String o = null; try { String inner = "inner"; assertThat(TestHelper.getLastRecordedStateForVariable("inner"), equalTo(inner)); o.length(); } catch (Exception e) { o = "fallback"; assertThat(TestHelper.getLastRecordedStateForVariable("e"), equalTo(e.toString())); assertThat(TestHelper.getLastRecordedStateForVariable("o"), equalTo(o)); } } @Test public void weirdFormattedMockitoTest() throws Exception { Foo foo = mock( Foo.class ); MockHolder<Foo> holder = new MockHolder<>(foo); when( foo .bar()) .thenReturn("42"); String result = foo.bar(); assertThat(TestHelper.getLastRecordedStateForVariable("result"), equalTo("42")); assertEquals( "42", result); verify( foo, times(1)) .bar(); verify( holder.t, times(1)) .bar(); } }