2121 * questions.
2222 */
2323
24+ import static jdk .jpackage .internal .util .PListWriter .writeBoolean ;
2425import static jdk .jpackage .internal .util .PListWriter .writeDict ;
2526import static jdk .jpackage .internal .util .PListWriter .writePList ;
26- import static jdk .jpackage .internal .util .PListWriter .writeBoolean ;
2727import static jdk .jpackage .internal .util .XmlUtils .createXml ;
2828import static jdk .jpackage .internal .util .XmlUtils .toXmlConsumer ;
29+ import static jdk .jpackage .internal .util .function .ThrowingConsumer .toConsumer ;
2930
3031import java .io .IOException ;
3132import java .nio .file .Path ;
32- import java .util .Date ;
33-
33+ import java .util .function .Consumer ;
34+ import java .util .stream .Stream ;
35+ import jdk .jpackage .internal .util .function .ThrowingConsumer ;
36+ import jdk .jpackage .test .AdditionalLauncher ;
37+ import jdk .jpackage .test .Annotations .Parameter ;
38+ import jdk .jpackage .test .Annotations .Test ;
3439import jdk .jpackage .test .JPackageCommand ;
40+ import jdk .jpackage .test .MacHelper ;
41+ import jdk .jpackage .test .MacHelper .SignKeyOption ;
42+ import jdk .jpackage .test .MacSign ;
3543import jdk .jpackage .test .TKit ;
36- import jdk .jpackage .test .Annotations .Test ;
37- import jdk .jpackage .test .Annotations .Parameter ;
3844
3945/*
4046 * Test generates signed app-image with custom entitlements file from the
6167 */
6268public class EntitlementsTest {
6369
64- void createEntitlementsFile (Path file , boolean microphone ) throws IOException {
70+ private static void createEntitlementsFile (Path file , boolean microphone ) throws IOException {
6571 createXml (file , xml -> {
6672 writePList (xml , toXmlConsumer (() -> {
6773 writeDict (xml , toXmlConsumer (() -> {
@@ -77,48 +83,72 @@ void createEntitlementsFile(Path file, boolean microphone) throws IOException {
7783 });
7884 }
7985
80- @ Test
81- // ({"--mac-app-store", doMacEntitlements", "doResources"})
82- @ Parameter ({"false" , "true" , "false" })
83- @ Parameter ({"false" , "false" , "true" })
84- @ Parameter ({"false" , "true" , "true" })
85- @ Parameter ({"true" , "true" , "false" })
86- @ Parameter ({"true" , "false" , "true" })
87- @ Parameter ({"true" , "true" , "true" })
88- public void test (boolean appStore , boolean doMacEntitlements , boolean doResources ) throws Exception {
89- final Path macEntitlementsFile ;
90- final Path resourcesDir ;
91-
92- if (doMacEntitlements ) {
93- macEntitlementsFile = TKit .createTempFile ("EntitlementsTest.plist" );
86+ public enum EntitlementsSource implements Consumer <JPackageCommand > {
87+ CMDLINE (cmd -> {
88+ var macEntitlementsFile = TKit .createTempFile ("foo.plist" );
9489 createEntitlementsFile (macEntitlementsFile , true );
95- } else {
96- macEntitlementsFile = null ;
97- }
90+ cmd .addArguments ("--mac-entitlements" , macEntitlementsFile );
91+ }),
92+ RESOURCE_DIR (cmd -> {
93+ if (!cmd .hasArgument ("--resource-dir" )) {
94+ cmd .setArgumentValue ("--resource-dir" , TKit .createTempDirectory ("resources" ));
95+ }
9896
99- if (doResources ) {
100- resourcesDir = TKit .createTempDirectory ("resources" );
101- createEntitlementsFile (resourcesDir .resolve ("EntitlementsTest.entitlements" ), false );
102- } else {
103- resourcesDir = null ;
104- }
97+ var resourcesDir = Path .of (cmd .getArgumentValue ("--resource-dir" ));
98+ createEntitlementsFile (resourcesDir .resolve (cmd .name () + ".entitlements" ), false );
99+ }),
100+ ;
105101
106- JPackageCommand cmd = JPackageCommand .helloAppImage ()
107- .addArguments ("--mac-sign" , "--mac-signing-keychain" ,
108- SigningBase .getKeyChain (), "--mac-app-image-sign-identity" ,
109- SigningBase .getAppCert (SigningBase .CertIndex .ASCII_INDEX .value ()));
110- if (appStore ) {
111- cmd .addArguments ("--mac-app-store" );
102+ EntitlementsSource (ThrowingConsumer <JPackageCommand > initializer ) {
103+ this .initializer = toConsumer (initializer );
112104 }
113- if (doMacEntitlements ) {
114- cmd .addArguments ("--mac-entitlements" ,
115- macEntitlementsFile .toAbsolutePath ().toString ());
116- }
117- if (doResources ) {
118- cmd .addArguments ("--resource-dir" ,
119- resourcesDir .toAbsolutePath ().toString ());
105+
106+ @ Override
107+ public void accept (JPackageCommand cmd ) {
108+ initializer .accept (cmd );
120109 }
121110
111+ private final Consumer <JPackageCommand > initializer ;
112+ }
113+
114+ @ Test
115+ @ Parameter ({"CMDLINE" })
116+ @ Parameter ({"RESOURCE_DIR" })
117+ @ Parameter ({"CMDLINE" , "RESOURCE_DIR" })
118+ public static void test (EntitlementsSource ... entitlementsSources ) {
119+ MacSign .withKeychain (toConsumer (keychain -> {
120+ test (keychain , Stream .of (entitlementsSources ));
121+ }), SigningBase .StandardKeychain .MAIN .keychain ());
122+ }
123+
124+ @ Test
125+ @ Parameter ({"CMDLINE" })
126+ @ Parameter ({"RESOURCE_DIR" })
127+ @ Parameter ({"CMDLINE" , "RESOURCE_DIR" })
128+ public static void testAppStore (EntitlementsSource ... entitlementsSources ) {
129+ MacSign .withKeychain (toConsumer (keychain -> {
130+ test (keychain , Stream .concat (Stream .of (cmd -> {
131+ cmd .addArguments ("--mac-app-store" );
132+ // Ignore externally supplied runtime as it may have the "bin"
133+ // directory that will cause jpackage to bail out.
134+ cmd .ignoreDefaultRuntime (true );
135+ }), Stream .of (entitlementsSources )));
136+ }), SigningBase .StandardKeychain .MAIN .keychain ());
137+ }
138+
139+ private static void test (MacSign .ResolvedKeychain keychain , Stream <Consumer <JPackageCommand >> mutators ) {
140+
141+ var cmd = JPackageCommand .helloAppImage ();
142+
143+ cmd .mutate (MacHelper .useKeychain (keychain )).mutate (new SignKeyOption (
144+ SignKeyOption .Type .SIGN_KEY_IDENTITY ,
145+ SigningBase .StandardCertificateRequest .CODESIGN .spec ()
146+ )::addTo );
147+
148+ cmd .mutate (new AdditionalLauncher ("x" )::applyTo );
149+
150+ mutators .forEach (cmd ::mutate );
151+
122152 cmd .executeAndAssertHelloAppImageCreated ();
123153 }
124154}
0 commit comments