1d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank/*
2d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * Copyright (C) 2010 The Android Open Source Project
3d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank *
4d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * Licensed under the Apache License, Version 2.0 (the "License");
5d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * you may not use this file except in compliance with the License.
6d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * You may obtain a copy of the License at
7d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank *
8d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank *      http://www.apache.org/licenses/LICENSE-2.0
9d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank *
10d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * Unless required by applicable law or agreed to in writing, software
11d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * distributed under the License is distributed on an "AS IS" BASIS,
12d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * See the License for the specific language governing permissions and
14d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank * limitations under the License.
15d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank */
16d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
17d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankpackage com.android.exchange;
18d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
19d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankimport android.content.Context;
20d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankimport android.content.ContextWrapper;
21d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankimport android.test.AndroidTestCase;
22d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankimport android.test.suitebuilder.annotation.SmallTest;
23d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
24d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankimport java.io.File;
25d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank@SmallTest
26d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blankpublic class ExchangeServiceTest extends AndroidTestCase {
27d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank    private static class MyContext extends ContextWrapper {
28d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        public boolean isGetFileStreamPathCalled;
29d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
30d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        public MyContext(Context base) {
31d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank            super(base);
32d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        }
33d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
34d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        @Override
35d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        public File getFileStreamPath(String name) {
36d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank            isGetFileStreamPathCalled = true;
37d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank            return super.getFileStreamPath(name);
38d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        }
39d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank    }
40d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
41d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank    public void testGetDeviceId() throws Exception {
42d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        final MyContext context = new MyContext(getContext());
43d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
44d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        final String id = ExchangeService.getDeviceId(context);
45d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
46d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        // Consists of alpha-numeric
47d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        assertTrue(id.matches("^[a-zA-Z0-9]+$"));
48d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
49d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        // getDeviceId may have been called in other tests, so we don't check
50d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        // isGetFileStreamPathCalled here.
51d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
52d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        context.isGetFileStreamPathCalled = false;
53d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        final String cachedId = ExchangeService.getDeviceId(context);
54d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank
55d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        // Should be the same.
56d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        assertEquals(id, cachedId);
57d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        // Should be cached.  (If cached, this method won't be called.)
58d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank        assertFalse(context.isGetFileStreamPathCalled);
59d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank    }
60d2e4d4675d04e78591ebd38fd084fc2cdbe144a0Marc Blank}
61