visualweb.insync/test/unit/src/org/netbeans/modules/visualweb/insync/InsyncTestBase.java
author Jesse Glick <jglick@netbeans.org>
Wed, 23 Mar 2011 16:50:27 -0400
changeset 3213 c85dcf71e424
parent 2926 3b669d40369b
permissions -rw-r--r--
Tests at least should compile now.
deva@1755
     1
/*
deva@1755
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
jglick@2926
     3
 *
jglick@2926
     4
 * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
jglick@2926
     5
 *
jglick@2926
     6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
jglick@2926
     7
 * Other names may be trademarks of their respective owners.
jglick@2926
     8
 *
deva@1755
     9
 * The contents of this file are subject to the terms of either the GNU
deva@1755
    10
 * General Public License Version 2 only ("GPL") or the Common
deva@1755
    11
 * Development and Distribution License("CDDL") (collectively, the
deva@1755
    12
 * "License"). You may not use this file except in compliance with the
deva@1755
    13
 * License. You can obtain a copy of the License at
deva@1755
    14
 * http://www.netbeans.org/cddl-gplv2.html
deva@1755
    15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
deva@1755
    16
 * specific language governing permissions and limitations under the
deva@1755
    17
 * License.  When distributing the software, include this License Header
deva@1755
    18
 * Notice in each file and include the License file at
jglick@2926
    19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
deva@1755
    20
 * particular file as subject to the "Classpath" exception as provided
jglick@2926
    21
 * by Oracle in the GPL Version 2 section of the License file that
deva@1755
    22
 * accompanied this code. If applicable, add the following below the
deva@1755
    23
 * License Header, with the fields enclosed by brackets [] replaced by
deva@1755
    24
 * your own identifying information:
deva@1755
    25
 * "Portions Copyrighted [year] [name of copyright owner]"
deva@1755
    26
 * 
deva@1755
    27
 * Contributor(s):
deva@1755
    28
 * 
deva@1755
    29
 * Portions Copyrighted 2007 Sun Microsystems, Inc.
deva@1755
    30
 */
deva@1755
    31
package org.netbeans.modules.visualweb.insync;
deva@1755
    32
deva@1889
    33
import com.sun.rave.designtime.Constants;
deva@1889
    34
import java.beans.BeanInfo;
deva@1755
    35
import java.io.File;
deva@1755
    36
import java.io.IOException;
deva@1889
    37
import java.lang.reflect.Constructor;
deva@1866
    38
import java.net.URL;
deva@1866
    39
import java.net.URLStreamHandlerFactory;
deva@1889
    40
import java.util.ArrayList;
deva@1889
    41
import java.util.List;
deva@1866
    42
import java.util.regex.Pattern;
deva@1755
    43
import org.netbeans.api.project.Project;
deva@1866
    44
import org.netbeans.api.project.libraries.LibraryManager;
jglick@3213
    45
import org.netbeans.junit.MockServices;
deva@1755
    46
import org.netbeans.junit.NbTestCase;
deva@1889
    47
import org.netbeans.modules.visualweb.insync.beans.Bean;
deva@1889
    48
import org.netbeans.modules.visualweb.insync.beans.BeansUnit;
deva@1889
    49
import org.netbeans.modules.visualweb.insync.models.FacesModel;
deva@1866
    50
import org.netbeans.modules.visualweb.insync.models.FacesModelSet;
deva@1877
    51
import org.netbeans.modules.web.project.WebProject;
deva@1755
    52
import org.openide.filesystems.FileObject;
deva@1866
    53
import org.openide.util.Exceptions;
jglick@3213
    54
import org.openide.util.Lookup;
deva@1755
    55
deva@1755
    56
/**
deva@1755
    57
 *
deva@1755
    58
 * @author sc32560, jdeva
deva@1755
    59
 * 
deva@1755
    60
 */
deva@1755
    61
public class InsyncTestBase extends NbTestCase {
deva@1755
    62
    public InsyncTestBase(String name) {
deva@1755
    63
        super(name);
deva@1866
    64
        _setUp();
deva@1755
    65
    }
deva@1755
    66
    
deva@1866
    67
    String[] pageBeans, requestBeans, sessionBeans, applicationBeans, facesConfigs;
deva@1866
    68
    Project project;
deva@1755
    69
    
deva@1866
    70
    static {
deva@1866
    71
        setupServices();
deva@1866
    72
    }
deva@1755
    73
    
deva@1755
    74
    @Override
deva@1755
    75
    protected void setUp() throws Exception {
deva@1755
    76
        super.setUp();
deva@1866
    77
        //_setUp();
deva@1866
    78
    }
deva@1866
    79
    
deva@1866
    80
    private void _setUp() {
deva@1866
    81
        //Set up the system properties
deva@1866
    82
        System.setProperty("jdk.home", System.getProperty("java.home"));
deva@1866
    83
        try {
deva@1755
    84
deva@1866
    85
            System.setProperty("netbeans.user", new File(getWorkDir().getParentFile(), "user").getAbsolutePath());
deva@1866
    86
        } catch (IOException ex) {
deva@1866
    87
            Exceptions.printStackTrace(ex);
deva@1866
    88
        }
deva@1866
    89
        //Load the required libraries. This allows evaluation of project properties
deva@1866
    90
        //ex:- ${libs.jsf12-support.classpath}
deva@1866
    91
        LibraryManager.getDefault().getLibraries();
deva@1755
    92
        openProject();
deva@1866
    93
        pageBeans = System.getProperty(
deva@1866
    94
                "visualweb.project.pagebeans").split(Pattern.quote(System.getProperty("path.separator")));
deva@1866
    95
        requestBeans = System.getProperty(
deva@1866
    96
                "visualweb.project.requestbeans").split(Pattern.quote(System.getProperty("path.separator")));
deva@1866
    97
        sessionBeans = System.getProperty(
deva@1866
    98
                "visualweb.project.sessionbeans").split(Pattern.quote(System.getProperty("path.separator")));
deva@1866
    99
        applicationBeans = System.getProperty(
deva@1866
   100
                "visualweb.project.applicationbeans").split(Pattern.quote(System.getProperty("path.separator")));
deva@1866
   101
        facesConfigs = System.getProperty(
deva@1866
   102
                "visualweb.project.facesconfig").split(Pattern.quote(System.getProperty("path.separator")));        
deva@1866
   103
        
deva@1755
   104
    }
deva@1755
   105
deva@1755
   106
    @Override
deva@1755
   107
    protected void tearDown() throws Exception {
deva@1755
   108
        super.tearDown();
deva@1866
   109
        clearWorkDir();
deva@1877
   110
    }
deva@1877
   111
deva@1877
   112
    public FacesModelSet createFacesModelSet() {
deva@1877
   113
        FileObject file = getProject().getProjectDirectory();
deva@1877
   114
        FacesModelSet set = FacesModelSet.getInstance(file);
deva@1877
   115
        return set;
deva@1755
   116
    }       
deva@1755
   117
    
deva@1877
   118
    protected int getBeansCount() {
deva@1877
   119
        return getPageBeans().length + getNonPageBeansCount();
deva@1755
   120
    }
deva@1755
   121
    
deva@1877
   122
    protected int getNonPageBeansCount() {
deva@1877
   123
        return getRequestBeans().length + 
deva@1877
   124
               getSessionBeans().length + 
deva@1877
   125
               getApplicationBeans().length;
deva@1877
   126
    }
deva@1877
   127
    
deva@1877
   128
    protected String[] getBeanNames() {
deva@1877
   129
        String[] str = new String[getBeansCount()];
deva@1877
   130
        int i = 0;
deva@1877
   131
        for(String s : getPageBeans()) {
deva@1877
   132
            str[i++] = s;
deva@1877
   133
        }
deva@1877
   134
        for (String s : getRequestBeans()) {
deva@1877
   135
            str[i++] = s;
deva@1877
   136
        }
deva@1877
   137
        for (String s : getSessionBeans()) {
deva@1877
   138
            str[i++] = s;
deva@1877
   139
        }    
deva@1877
   140
        for (String s : getApplicationBeans()) {
deva@1877
   141
            str[i++] = s;
deva@1877
   142
        }         
deva@1877
   143
        return str;
deva@1877
   144
    }
deva@1877
   145
    
deva@1889
   146
    protected List<Bean> createBeans(String[] types) {                
deva@1889
   147
        FacesModelSet modelSet = createFacesModelSet();
deva@1889
   148
        FacesModel model = modelSet.getFacesModel(getJavaFile(getPageBeans()[0]));
deva@1889
   149
        model.sync();
deva@1889
   150
        BeansUnit bu = model.getBeansUnit();
deva@1889
   151
        List<Bean> beans = new ArrayList<Bean>();
deva@1889
   152
        for(String type : types) {
deva@1889
   153
            beans.add(createBean(bu, type));
deva@1889
   154
        }
deva@1889
   155
        return beans;
deva@1889
   156
    }
deva@1889
   157
deva@1889
   158
    private Bean createBean(BeansUnit bu, String type) {
deva@1889
   159
        Constructor ctor = null;
deva@1889
   160
        java.lang.reflect.Method m = null;
deva@1889
   161
        ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
deva@1889
   162
        try {
deva@1889
   163
            Class clazz = Class.forName("org.netbeans.modules.visualweb.insync.beans.Bean");
deva@1889
   164
            ctor = clazz.getDeclaredConstructor(BeansUnit.class, BeanInfo.class, String.class);
deva@1889
   165
            ctor.setAccessible(true);
deva@1889
   166
            clazz = Class.forName("org.netbeans.modules.visualweb.insync.beans.BeansUnit");
deva@1889
   167
            m = clazz.getDeclaredMethod("nextNameForType", String.class);
deva@1889
   168
            m.setAccessible(true);
deva@1889
   169
        } catch (Exception ex) {
deva@1889
   170
            Exceptions.printStackTrace(ex);
deva@1889
   171
        }
deva@1889
   172
        try {
deva@1889
   173
            Thread.currentThread().setContextClassLoader(bu.getClassLoader());
deva@1889
   174
            Class beanClass = bu.getBeanClass(type);
deva@1889
   175
            if (beanClass != null) {
deva@1889
   176
                BeanInfo beanInfo = BeansUnit.getBeanInfo(beanClass, bu.getClassLoader());
deva@1889
   177
                String name = (String) beanInfo.getBeanDescriptor().getValue(Constants.BeanDescriptor.INSTANCE_NAME);
deva@1889
   178
                if(name == null) {
deva@1889
   179
                    name = (String)m.invoke(bu, type);
deva@1889
   180
                }
deva@1889
   181
                return (Bean) ctor.newInstance(bu, beanInfo, name);
deva@1889
   182
            }
deva@1889
   183
        } catch (Exception ex) {
deva@1889
   184
            Exceptions.printStackTrace(ex);
deva@1889
   185
        } finally {
deva@1889
   186
            Thread.currentThread().setContextClassLoader(oldContextClassLoader);
deva@1889
   187
        }
deva@1889
   188
        return null;
deva@1889
   189
    }
deva@1889
   190
    
deva@1877
   191
    protected FileObject getJavaFile(String name) {
deva@1877
   192
        FileObject[] roots = ((WebProject)getProject()).getSourceRoots().getRoots();
deva@1877
   193
        for(FileObject f : roots) {
deva@1877
   194
            FileObject result = findFileObject(f, name);
deva@1877
   195
            if(result != null) {
deva@1877
   196
                return result;
deva@1877
   197
            }
deva@1877
   198
        }
deva@1877
   199
        return null;
deva@1877
   200
    }
deva@1877
   201
    
deva@1877
   202
    protected FileObject findFileObject(FileObject f, String name) {
deva@1877
   203
        FileObject result = null;
deva@1877
   204
        if(f.isFolder()) {
deva@1877
   205
            for(FileObject child : f.getChildren()) {
deva@1877
   206
                result = findFileObject(child, name);
deva@1877
   207
                if(result != null) {
deva@1877
   208
                    return result;
deva@1877
   209
                }
deva@1877
   210
            }
deva@1877
   211
        }else {
deva@1877
   212
            if(name.equals(f.getName())) {
deva@1877
   213
                result = f;
deva@1877
   214
            }
deva@1877
   215
        }
deva@1877
   216
        return result;
deva@1877
   217
    }
deva@1877
   218
deva@1877
   219
    protected String getFQN(String className) {
deva@1877
   220
        FileObject[] roots = ((WebProject)getProject()).getSourceRoots().getRoots();
deva@1877
   221
        for(FileObject f : roots) {
deva@1877
   222
            FileObject result = findFileObject(f, className);
deva@1877
   223
            if(result != null) {
deva@1877
   224
                String filePath = result.getPath().substring(0, result.getPath().lastIndexOf("."));
deva@1877
   225
                String relativePath = filePath.replace(f.getPath(), "");
deva@1877
   226
                return relativePath.replace('/', '.').substring(1);
deva@1877
   227
            }
deva@1877
   228
        }
deva@1877
   229
        return null;
deva@1877
   230
    }
deva@1877
   231
deva@1877
   232
    protected String getPackageName(String className) {
deva@1877
   233
        String relativePath = getFQN(className);
deva@1877
   234
        int lastDotIndex = relativePath.lastIndexOf('.');
deva@1877
   235
        return relativePath.substring(0, lastDotIndex);
deva@1866
   236
    }
deva@1755
   237
deva@1866
   238
    public Project openProject() {
deva@1866
   239
        String projectName = System.getProperty("visualweb.project.name");
deva@1866
   240
        String relativeProjectPath = "projects" + File.separator + projectName;
deva@1866
   241
        //Check for a directory and then a zip file by project name
deva@1866
   242
        File f = new File(getDataDir().getAbsolutePath(), relativeProjectPath);
deva@1866
   243
        if (!f.exists()) {
deva@1866
   244
            f = new File(getDataDir().getAbsolutePath(), relativeProjectPath + ".zip");
deva@1866
   245
        }
deva@1866
   246
        try {
deva@1866
   247
            project = ProjectUtils.openProject(getWorkDir(), f.getAbsolutePath(), projectName);
deva@1866
   248
            //Necessary for FacesConfigModel
deva@1866
   249
            JSFConfigUtils.setUp(project);
deva@1866
   250
        } catch (IOException ex) {
deva@1866
   251
            Exceptions.printStackTrace(ex);
deva@1866
   252
        }
deva@1755
   253
        return project;
deva@1755
   254
    }
deva@1755
   255
    
deva@1755
   256
    public Project getProject() {
deva@1755
   257
        return project;
deva@1755
   258
    }
deva@1755
   259
    
deva@1755
   260
    public void destroyProject() throws IOException {
deva@1866
   261
        ProjectUtils.destroyProject(project);
deva@1866
   262
    }
deva@1866
   263
deva@1866
   264
    public String[] getApplicationBeans() {
deva@1866
   265
        return applicationBeans;
deva@1866
   266
    }
deva@1866
   267
deva@1866
   268
    public String[] getPageBeans() {
deva@1866
   269
        return pageBeans;
deva@1866
   270
    }
deva@1866
   271
deva@1866
   272
    public String[] getRequestBeans() {
deva@1866
   273
        return requestBeans;
deva@1866
   274
    }
deva@1866
   275
deva@1866
   276
    public String[] getSessionBeans() {
deva@1866
   277
        return sessionBeans;
deva@1866
   278
    }
deva@1866
   279
deva@1866
   280
    public String[] getFacesConfigs() {
deva@1866
   281
        return facesConfigs;
deva@1755
   282
    }
deva@1755
   283
    
deva@1866
   284
    private static void setupServices() {
jglick@3213
   285
        URL.setURLStreamHandlerFactory(Lookup.getDefault().lookup(URLStreamHandlerFactory.class));
jglick@3213
   286
        MockServices.setServices(RepositoryImpl.class, InsyncMimeResolver.class);
deva@1755
   287
    }    
deva@1755
   288
}