100d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki/*
200d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * Copyright (C) 2010 The Android Open Source Project
300d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki *
400d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
500d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * you may not use this file except in compliance with the License.
600d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * You may obtain a copy of the License at
700d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki *
800d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
900d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki *
1000d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * Unless required by applicable law or agreed to in writing, software
1100d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
1200d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1300d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * See the License for the specific language governing permissions and
1400d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki * limitations under the License.
1500d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki */
1600d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
1700d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onukipackage com.android.exchange;
1800d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
1900d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onukiimport android.content.Context;
2000d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onukiimport android.content.ContextWrapper;
2100d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onukiimport android.test.AndroidTestCase;
22604a1cf6f2401d78f57edcfb702d560d9c80dd14Marc Blankimport android.test.suitebuilder.annotation.SmallTest;
2300d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
2400d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onukiimport java.io.File;
25604a1cf6f2401d78f57edcfb702d560d9c80dd14Marc Blank@SmallTest
26385a0be662509754e687bcfa9813208b050bf951Marc Blankpublic class ExchangeServiceTest extends AndroidTestCase {
2700d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki    private static class MyContext extends ContextWrapper {
2800d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        public boolean isGetFileStreamPathCalled;
2900d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
3000d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        public MyContext(Context base) {
3100d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki            super(base);
3200d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        }
3300d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
3400d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        @Override
3500d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        public File getFileStreamPath(String name) {
3600d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki            isGetFileStreamPathCalled = true;
3700d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki            return super.getFileStreamPath(name);
3800d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        }
3900d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki    }
4000d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
4100d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki    public void testGetDeviceId() throws Exception {
4200d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        final MyContext context = new MyContext(getContext());
4300d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
44385a0be662509754e687bcfa9813208b050bf951Marc Blank        final String id = ExchangeService.getDeviceId(context);
4500d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
4600d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        // Consists of alpha-numeric
4700d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        assertTrue(id.matches("^[a-zA-Z0-9]+$"));
4800d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
4900d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        // getDeviceId may have been called in other tests, so we don't check
5000d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        // isGetFileStreamPathCalled here.
5100d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
5200d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        context.isGetFileStreamPathCalled = false;
53385a0be662509754e687bcfa9813208b050bf951Marc Blank        final String cachedId = ExchangeService.getDeviceId(context);
5400d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki
5500d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        // Should be the same.
5600d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        assertEquals(id, cachedId);
5700d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        // Should be cached.  (If cached, this method won't be called.)
5800d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki        assertFalse(context.isGetFileStreamPathCalled);
5900d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki    }
6000d0b046d088632385ea98e46dc7ac8b98b78147Makoto Onuki}
61