summaryrefslogtreecommitdiffstats
path: root/prepAllTestBundles.sh
blob: 37a56661265774967800a4621021990823af27ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#! /bin/bash

# Copyright (C) 2013, Red Hat, Inc.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html

# Prepare Eclipse Test Bundles

# The definiton of an Eclipse Test Bundle for our purposes is any packaged
# OSGi bundle containing a pom.xml with a packaging type of
# 'eclipse-test-plugin'

# Takes a single argument (absolute path of folder containing test bundles)

if [ ! $# -eq 1 ]; then
  echo "USAGE : $0 PATH/TO/BUNDLES/DIRECTORY"
  exit 1
fi

testBundleFolder=$1
echo 'Eclipse-BundleShape: dir' > MANIFEST.MF

extraIUs=

for jar in `find ${testBundleFolder} -name "*.jar"`; do
  jarPomPath=`jar -tf ${jar} | grep 'pom.xml'`
  unzip -p ${jar} ${jarPomPath} | grep -q '<packaging>eclipse-test-plugin</packaging>'
  if [ $? -eq 0 ]; then
    jarPomPath=`jar -tf ${jar} | grep 'pom.xml'`
    bsname=`unzip -p ${jar} ${jarPomPath} | sed '/<parent>/,/<\/parent>/ d' | sed '/<build>/,/<\/build>/ d' | grep '<artifactId>' | sed 's/.*<artifactId>\(.*\)<\/artifactId>.*/\1/'`

    # Detect SWTBot Tests
    useSWTBot='false'
    unzip -p ${jar} META-INF/MANIFEST.MF | grep -q 'swtbot'
    if [ $? -eq 0 ]; then
       useSWTBot='true'
    fi

    # Find Test class(es)
    includepatterns=
    testclasses=
    testclass=`unzip -p ${jar} ${jarPomPath} | grep '<testClass>' | sed 's/.*<testClass>\(.*\)<\/testClass>.*/\1/'`
    if [ "${testclass}" = '' ]; then
      # Check for custom includes
      includepatterns=`unzip -p ${jar} ${jarPomPath} | sed -n '/<includes>/,/<\/includes>/p' | sed -n 's/.*<include>\(.*\)<\/include>.*/\1/p' | sed 's/\*\*/\.\*/'`
      for pat in ${includepatterns}; do
        testclasses="${testclasses} `jar -tf ${jar} | grep -E "${pat}" | grep '.class' | grep -v '\\$' | tr '/' '.' | sed 's/\.class//'`"
      done
      if [ "${includepatterns}" = '' ]; then
        testclass=`jar -tf ${jar} | grep '/AllTests.class' | tr '/' '.' | sed 's/\.class//'`
      fi
    fi
    if [ "${testclass}" = '' ]; then
      if [ "${includepatterns}" = '' ]; then
        # Use default includes
        testclasses=`jar -tf ${jar} | grep -E '/(Test.*\.class|.*Test\.class)' | grep -vE '/(Abstract.*\.class|.*Abstract\.class)' | grep -v '\\$' | tr '/' '.' | sed 's/\.class//'`
      fi
    else
      testclasses="${testclass}"
    fi

    for testclass in ${testclasses} ; do
      sed -i "/<target name=\"linuxtoolsTests\">/ a \\
      <exec executable=\"\${basedir}/updateTestBundleXML.sh\"> \\
      <arg value=\"${bsname}\" /> \\
      <arg value=\"${testclass}\" /> \\
      <arg value=\"${useSWTBot}\" /> \\
      </exec> \\
      <runTests testPlugin=\"${bsname}\" testClass=\"${testclass}\" />" \
      target/test.xml
    done

    # Collect any extra IUs from each test bundle's tycho-surefire-plugin
    unzip -p ${jar} ${jarPomPath} | grep -q '<artifactId>tycho-surefire-plugin<\/artifactId>'
    if [ $? -eq 0 ]; then
      IUList=`unzip -p ${jar} ${jarPomPath} | sed -n '/<dependency>/,/<\/dependency>/ p' | grep -B 1 '<artifactId>'`
      isFeature=0
      for elem in ${IUList}; do
        echo ${elem} | grep -q '<type>eclipse-feature<\/type>'
        if [ $? -eq 0 ]; then
          isFeature=1
        fi
        echo ${elem} | grep -q '<artifactId>'
        if [ $? -eq 0 ]; then
          extraIU=`echo ${elem} | sed 's/.*<artifactId>\(.*\)<\/artifactId>.*/\1/'`
          if [ ${isFeature} -eq 1 ]; then
            extraIU=${extraIU}'.feature.group'
          fi
          extraIUs="${extraIUs} ${extraIU}"
          isFeature=0
        fi
      done
    fi
    
    # Make 'Eclipse-BundleShape: dir'
    jarName=`basename ${jar}`
    symJarName=`ls target-sdk/plugins/ | grep ${jarName}`
    # Might be multiple symlinked jars providing same bundle (rare)
    for file in ${symJarName}; do
      rm target-sdk/plugins/${file}
    done
    cp ${jar} target-sdk/plugins/
    jar -umf ./MANIFEST.MF target-sdk/plugins/${jarName}

  fi
done

# Always install the extra IUs
# Not by choice but because this is easier to do
extraIUs=`echo -n ${extraIUs} | tr ' ' '\n' | sort | uniq | tr '\n' ','`
sed -i "s/\"-installIUs \(.*\)\"/\"-installIUs \1,${extraIUs}\"/" target/test.xml

rm ./MANIFEST.MF
pushd target
../genRepo.sh $(pwd)