Home | History | Annotate | Download | only in mocking
      1 /*
      2  * Copyright 2010 Google Inc.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.google.android.testing.mocking;
     17 
     18 import java.io.File;
     19 import java.io.FileNotFoundException;
     20 import java.io.FileOutputStream;
     21 import java.io.IOException;
     22 
     23 /**
     24  * @author swoodward (at) google.com (Stephen Woodward)
     25  */
     26 public class FileUtils {
     27 
     28   /**
     29    * @param clazz
     30    * @param sdkVersion
     31    * @return the appropriate interface name for the interface mock support file.
     32    */
     33   static String getInterfaceNameFor(Class<?> clazz, SdkVersion sdkVersion) {
     34     return sdkVersion.getPackagePrefix() + "genmocks." + clazz.getName() + "DelegateInterface";
     35   }
     36   /**
     37    * @param clazz
     38    * @param sdkVersion
     39    * @return the appropriate subclass name for the subclass mock support file.
     40    */
     41   static String getSubclassNameFor(Class<?> clazz, SdkVersion sdkVersion) {
     42     return sdkVersion.getPackagePrefix() + "genmocks." + clazz.getName() + "DelegateSubclass";
     43   }
     44 
     45   /**
     46    * Converts a class name into the a .class filename.
     47    *
     48    * @param className
     49    * @return the file name for the specified class name.
     50    */
     51   static String getFilenameFor(String className) {
     52     return className.replace('.', File.separatorChar) + ".class";
     53   }
     54 
     55   /**
     56    * Converts a filename into a class name.
     57    *
     58    * @param filename
     59    * @return the class name for the specified file name.
     60    */
     61   static String getClassNameFor(String filename) {
     62     if (!filename.endsWith(".class")) {
     63       throw new IllegalArgumentException("Argument provided is not a class filename: " + filename);
     64     }
     65     // On non-Linux, files use the native separator, but jar entries use /... sigh
     66     return filename.replace(File.separatorChar, '.').replace('/', '.')
     67         .substring(0, filename.length() - 6);
     68   }
     69 
     70   static void saveClassToFolder(GeneratedClassFile clazz, String outputFolderName)
     71       throws FileNotFoundException, IOException {
     72     File classFolder = new File(outputFolderName);
     73     File targetFile = new File(classFolder, getFilenameFor(clazz.getClassName()));
     74     targetFile.getParentFile().mkdirs();
     75     FileOutputStream outputStream = new FileOutputStream(targetFile);
     76     outputStream.write(clazz.getContents());
     77     outputStream.close();
     78   }
     79 }
     80