/* * Copyright 2016 Kejun Xia * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.shipdream.lib.android.mvc; import org.junit.Assert; import org.junit.Test; import java.util.concurrent.Executors; public class TestMvcBean extends BaseTest { @Test(expected = IllegalArgumentException.class) public void should_throw_exception_when_bind_null_to_a_mvcBean() { Bean bean = new Bean() { @Override public Class modelType() { return String.class; } }; bean.bindModel(null); } @Test public void should_be_able_to_inject_background_executor_service() throws InterruptedException { class Worker { Thread thread = Thread.currentThread(); } final Worker worker = new Worker(); Executors.newSingleThreadExecutor().submit(new Runnable() { @Override public void run() { synchronized (worker) { worker.thread = Thread.currentThread(); worker.notify(); } } }); synchronized (worker) { worker.wait(1000); } Assert.assertTrue(worker.thread != Thread.currentThread()); } @Test public void should_rebind_state_after_restoring_mvcBean() { Bean<String> bean = new Bean() { @Override public Class modelType() { return String.class; } }; Assert.assertNull(bean.getModel()); bean.restoreModel("A"); Assert.assertEquals("A", bean.getModel()); } @Test public void should_call_on_restore_call_back_after_a_stateful_mvcBean_is_restored() { class MyBean extends Bean<String> { private boolean called = false; @Override public Class modelType() { return String.class; } @Override public void onRestored() { super.onRestored(); called = true; } }; MyBean mvcBean = new MyBean(); Assert.assertFalse(mvcBean.called); mvcBean.restoreModel("A"); Assert.assertTrue(mvcBean.called); } @Test public void should_not_call_on_restore_call_back_after_a_non_stateful_mvcBean_is_restored() { class MyBean extends Bean<String> { private boolean called = false; @Override public Class modelType() { return null; } @Override public void onRestored() { super.onRestored(); called = true; } }; MyBean mvcBean = new MyBean(); Assert.assertFalse(mvcBean.called); mvcBean.restoreModel("A"); Assert.assertFalse(mvcBean.called); } public void should_create_state_instance_on_construct_when_the_state_type_is_specified_for_a_mvcBean() { class MyBean extends Bean<String> { @Override public Class modelType() { return String.class; } }; MyBean mvcBean = new MyBean(); Assert.assertNull(mvcBean.getModel()); mvcBean.onCreated(); Assert.assertNotNull(mvcBean.getModel()); } public void should_NOT_create_state_instance_on_construct_when_the_state_type_is_null_for_a_mvcBean() { class MyBean extends Bean { @Override public Class modelType() { return null; } }; MyBean mvcBean = new MyBean(); Assert.assertNull(mvcBean.getModel()); mvcBean.onCreated(); Assert.assertNull(mvcBean.getModel()); } @Test(expected = RuntimeException.class) public void should_throw_exception_out_when_creating_state_failed() { class BadClass { {int x = 1 / 0;} } class MyBean extends Bean<BadClass> { @Override public Class<BadClass> modelType() { return BadClass.class; } }; MyBean mvcBean = new MyBean(); mvcBean.onCreated(); } @Test(expected = IllegalArgumentException.class) public void should_throw_exception_when_binding_null_to_stateful_mvcBean() { class MyBean extends Bean<String> { @Override public Class<String> modelType() { return String.class; } }; MyBean mvcBean = new MyBean(); mvcBean.bindModel(null); } @Test public void should_be_able_to_successfully_bind_state_to_stateful_mvcBean() { class MyBean extends Bean<String> { @Override public Class<String> modelType() { return String.class; } }; MyBean mvcBean = new MyBean(); Assert.assertNotEquals("B", mvcBean.getModel()); mvcBean.bindModel("B"); Assert.assertEquals("B", mvcBean.getModel()); } }