001 // Copyright 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry.services.impl; 016 017 import static org.easymock.EasyMock.expect; 018 019 import org.apache.hivemind.Location; 020 import org.apache.hivemind.internal.Module; 021 import org.apache.hivemind.schema.Translator; 022 import org.apache.tapestry.BaseComponentTestCase; 023 import org.testng.annotations.Test; 024 025 /** 026 * Tests for {@link org.apache.tapestry.services.impl.DeferredObjectImpl} and 027 * {@link org.apache.tapestry.services.impl.DeferredObjectTranslator}. 028 * 029 * @author Howard M. Lewis Ship 030 * @since 4.0 031 */ 032 @Test 033 public class TestDeferredObjectTranslator extends BaseComponentTestCase 034 { 035 private Module newModule() 036 { 037 return newMock(Module.class); 038 } 039 040 private Translator newTranslator(Module module, String objectReference, Location location, 041 Object result) 042 { 043 Translator translator = newMock(Translator.class); 044 045 expect(translator.translate(module, Object.class, objectReference, location)).andReturn(result); 046 047 return translator; 048 } 049 050 public void testDeferredObject() 051 { 052 Object object = new Object(); 053 Module module = newModule(); 054 Location l = newLocation(); 055 Translator translator = newTranslator(module, "OBJ-REFERENCE", l, object); 056 057 replay(); 058 059 DeferredObject deferred = new DeferredObjectImpl(translator, module, "OBJ-REFERENCE", l); 060 061 assertSame(object, deferred.getObject()); 062 063 // Check that a second call returns a cached value. 064 065 assertSame(object, deferred.getObject()); 066 067 verify(); 068 069 assertSame(l, deferred.getLocation()); 070 } 071 072 public void testDeferredObjectTranslator() 073 { 074 Object object = new Object(); 075 Module module = newModule(); 076 Location l = newLocation(); 077 Translator objectTranslator = newTranslator(module, "OBJ-REFERENCE", l, object); 078 079 replay(); 080 081 DeferredObjectTranslator translator = new DeferredObjectTranslator(); 082 translator.setObjectTranslator(objectTranslator); 083 084 DeferredObject deferred = (DeferredObject) translator.translate( 085 module, 086 Object.class, 087 "OBJ-REFERENCE", 088 l); 089 090 assertSame(object, deferred.getObject()); 091 092 // Check that a second call returns a cached value. 093 094 assertSame(object, deferred.getObject()); 095 096 verify(); 097 098 assertSame(l, deferred.getLocation()); 099 } 100 }