test/org/openjdk/jigsaw/hello-repo.sh

Print this page

        

@@ -20,11 +20,11 @@
 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 # or visit www.oracle.com if you need additional information or have any
 # questions.
 
 # @test
-# @summary Basic test of repo on file system
+# @summary Basic test of repo on file system, and resolver filtering on OS/ARCH
 # @run shell hello-repo.sh
 
 set -e
 
 BIN=${TESTJAVA:-../../../../build}/bin

@@ -35,10 +35,17 @@
   d=`dirname $1`
   if [ ! -d $d ]; then mkdir -p $d; fi
   cat - >$1
 }
 
+compare() {
+  if [ "$1" != "$2" ]; then
+    echo "FAIL: expected [$1], got [$2]"
+    exit 1
+  fi
+}
+
 rm -rf z.*
 
 mk z.src/app/module-info.java <<EOF
 module app @ 1.0 {
     requires foolib;

@@ -46,33 +53,83 @@
 }
 EOF
 
 mk z.src/app/com/app/Main.java <<EOF
 package com.app;
+import java.lang.reflect.Module;
 public class Main {
     public static void main(String[] args) {
-        System.out.println("Hello");
+        System.out.println("Hello, " + com.foolib.Lib.text());
     }
 }
 EOF
 
-mk z.src/foolib/module-info.java <<EOF
+mk z.src/foolib1/module-info.java <<EOF
 module foolib @ 1.0 {
+    exports com.foolib;
 }
 EOF
 
+mk z.src/foolib1/com/foolib/Lib.java <<EOF
+package com.foolib;
+public class Lib {
+    public static String text() {
+        return "foolib @ 1";
+    }
+}
+EOF
+
+mk z.src/foolib2/module-info.java <<EOF
+module foolib @ 2.0 {
+    exports com.foolib;
+}
+EOF
+
+mk z.src/foolib2/com/foolib/Lib.java <<EOF
+package com.foolib;
+public class Lib {
+    public static String text() {
+        return "foolib @ 2";
+    }
+}
+EOF
+
+## Two versions of foolib in the repo, ensure resolver picks the correct version
+
 mkdir z.mods
 $BIN/javac -source 8 -d z.mods -modulepath z.modules \
-    `find z.src -name '*.java'`
+    `find z.src/app z.src/foolib1 -name '*.java'`
+mkdir z.mods/foolib2
+$BIN/javac -source 8 -d z.mods/foolib2 `find z.src/foolib2 -name '*.java'`
 
 mkdir z.pkgs
 $BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/app jmod app
-$BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/foolib jmod foolib
+$BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/foolib1 jmod foolib
+$BIN/jpkg ${TESTTOOLVMOPTS} -d z.pkgs -m z.mods/foolib2 jmod foolib
 
 $BIN/jrepo ${TESTTOOLVMOPTS} z.repo create
 $BIN/jrepo ${TESTTOOLVMOPTS} z.repo add z.pkgs/*.jmod
 
 $BIN/jmod ${TESTTOOLVMOPTS} create -L z.mlib
 $BIN/jmod ${TESTTOOLVMOPTS} add-repo -L z.mlib z.repo
 $BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install -n app
 $BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install app
-$BIN/java ${VMOPTS} -L z.mlib -m app
+OUT=`$BIN/java ${VMOPTS} -L z.mlib -m app | tr -d ' \n\r'`
+compare Hello,foolib@2 $OUT
+
+## create OS/ARCH specific library and jmods
+mkdir z.arch_pkgs
+rm -rf z.mlib z.repo
+$BIN/jpkg ${TESTTOOLVMOPTS} -d z.arch_pkgs -os Bos -arch Barch -m z.mods/app jmod app
+$BIN/jpkg ${TESTTOOLVMOPTS} -d z.arch_pkgs -os Bos -arch Barch -m z.mods/foolib1 jmod foolib
+$BIN/jpkg ${TESTTOOLVMOPTS} -d z.arch_pkgs -os Cos -arch Carch -m z.mods/foolib2 jmod foolib
+
+$BIN/jrepo ${TESTTOOLVMOPTS} z.repo create
+$BIN/jrepo ${TESTTOOLVMOPTS} z.repo add z.arch_pkgs/*.jmod
+
+$BIN/jmod ${TESTTOOLVMOPTS} create -L z.mlib -os Bos -arch Barch
+$BIN/jmod ${TESTTOOLVMOPTS} add-repo -L z.mlib z.repo
+$BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install -n app
+$BIN/jmod ${TESTTOOLVMOPTS} -L z.mlib install app
+OUT=`$BIN/java ${VMOPTS} -L z.mlib -m app | tr -d ' \n\r'`
+compare Hello,foolib@1 $OUT
+