164ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski/*
264ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * Copyright (C) 2015 The Android Open Source Project
364ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski *
464ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * Licensed under the Apache License, Version 2.0 (the "License");
564ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * you may not use this file except in compliance with the License.
664ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * You may obtain a copy of the License at
764ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski *
864ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski *      http://www.apache.org/licenses/LICENSE-2.0
964ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski *
1064ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * Unless required by applicable law or agreed to in writing, software
1164ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * distributed under the License is distributed on an "AS IS" BASIS,
1264ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1364ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * See the License for the specific language governing permissions and
1464ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * limitations under the License.
1564ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski */
1664ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski
1764ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskipackage android.support.provider.tests;
1864ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski
1964ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskiimport android.content.Context;
2064ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskiimport android.os.ParcelFileDescriptor;
2164ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski
2264ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskiimport java.io.File;
2364ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskiimport java.io.FileOutputStream;
2464ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskiimport java.io.IOException;
2564ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskiimport java.io.InputStream;
2664ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski
2764ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski/**
2864ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski * Utilities for tests.
2964ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski */
3064ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewskifinal class TestUtils {
3164ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski    /**
3264ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski     * Saves a file from resources to a temporary location and returns a File instance for it.
3364ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski     *
3464ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski     * @param id Resource ID
3564ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski     */
3664ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski    static File createFileFromResource(Context context, int id) throws IOException {
3764ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski        final File file = File.createTempFile("android.support.provider.tests{",
3864ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski                "}.zip", context.getCacheDir());
3964ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski        try (
4064ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            final FileOutputStream outputStream =
4164ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski                    new ParcelFileDescriptor.AutoCloseOutputStream(
4264ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski                            ParcelFileDescriptor.open(
4364ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski                                    file, ParcelFileDescriptor.MODE_WRITE_ONLY));
4464ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            final InputStream inputStream = context.getResources().openRawResource(id);
4564ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski        ) {
4664ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            final byte[] buffer = new byte[32 * 1024];
4764ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            int bytes;
4864ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            while ((bytes = inputStream.read(buffer)) != -1) {
4964ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski                outputStream.write(buffer, 0, bytes);
5064ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            }
5164ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            outputStream.flush();
5264ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski            return file;
5364ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski        }
5464ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski    }
5564ce8c2e2085a0d5ff3e69ba5520873d41c76af5Tomasz Mikolajewski}
56