summaryrefslogtreecommitdiffstats
path: root/prepAllTestBundles.sh
blob: 136ffc056505529bd87b9d1c42e57a8b1fca1f16 (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
#! /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

# Run 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

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} META-INF/MANIFEST.MF | grep 'Bundle-SymbolicName' | sed 's/Bundle-SymbolicName: \([a-zA-Z.]*\)\(;\)\?.*/\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)
    testclass=`unzip -p ${jar} ${jarPomPath} | grep '<testClass>' | sed 's/.*<testClass>\(.*\)<\/testClass>.*/\1/'`
    if [ "${testclass}" = '' ]; then
      testclass=`jar -tf ${jar} | grep '/AllTests.class' | tr '/' '.' | sed 's/\.class//'`
    fi
    if [ "${testclass}" = '' ]; then
     testclasses=`jar -tf ${jar} | grep -E '/[^/]*Test.*\.class' | grep -vE '/[^/]*Abstract.*\.class' | grep -v '\\$' | tr '/' '.' | sed 's/\.class//'`
    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
    
  fi

  # Make 'Eclipse-BundleShape: dir'
  jarName=`basename ${jar}`
  symJarName=`ls target-sdk/plugins/ | grep ${jarName}`
  rm target-sdk/plugins/${symJarName}
  cp ${jar} target-sdk/plugins/
  jar -umf ./MANIFEST.MF target-sdk/plugins/${jarName}
done

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