• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.beust.jcommander;
2 
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
5 
6 import org.testng.Assert;
7 import org.testng.annotations.DataProvider;
8 import org.testng.annotations.Test;
9 
10 public class PasswordTest {
11 
12     @DataProvider(name = "args")
createArgs()13     public Object[][] createArgs() {
14         return new Object[][] {
15                 { new PasswordTestingArgs() },
16                 { new OptionalPasswordTestingArgs() },
17         };
18     }
19 
20     public interface Args {
21 
getPassword()22         String getPassword();
23 
getPort()24         int getPort();
25 
26     }
27 
28     public static class PasswordTestingArgs implements PasswordTest.Args {
29         @Parameter(names = {"--password", "-p"}, description = "Private key password",
30                 password = true, required = true)
31         public String password;
32 
33         @Parameter(names = {"--port", "-o"}, description = "Port to bind server to",
34                 required = true)
35         public int port;
36 
37         @Override
getPassword()38         public String getPassword() {
39             return password;
40         }
41 
42         @Override
getPort()43         public int getPort() {
44             return port;
45         }
46     }
47 
48     @Test(dataProvider = "args")
passwordNotAsked(Args a)49     public void passwordNotAsked(Args a) {
50         String expectedPassword = "somepassword";
51         int expectedPort = 7;
52         new JCommander(a, "--password", expectedPassword, "--port", String.valueOf(7));
53         Assert.assertEquals(a.getPort(), expectedPort);
54         Assert.assertEquals(a.getPassword(), expectedPassword);
55     }
56 
57     @Test(dataProvider = "args", expectedExceptions = ParameterException.class)
passwordWithExcessiveArity(Args a)58     public void passwordWithExcessiveArity(Args a) {
59         new JCommander(a, "--password", "somepassword", "someotherarg", "--port", String.valueOf(7));
60     }
61 
62     @Test(dataProvider = "args")
passwordAsked(Args a)63     public void passwordAsked(Args a) {
64         InputStream stdin = System.in;
65         String password = "password";
66         int port = 7;
67         try {
68             System.setIn(new ByteArrayInputStream(password.getBytes()));
69             new JCommander(a, "--port", String.valueOf(port), "--password");
70             Assert.assertEquals(a.getPort(), port);
71             Assert.assertEquals(a.getPassword(), password);
72         } finally {
73             System.setIn(stdin);
74         }
75     }
76 
77     public static class OptionalPasswordTestingArgs implements PasswordTest.Args {
78         @Parameter(names = {"--password", "-p"}, description = "Private key password",
79                 password = true)
80         public String password;
81 
82         @Parameter(names = {"--port", "-o"}, description = "Port to bind server to",
83                 required = true)
84         public int port;
85 
86         @Override
getPassword()87         public String getPassword() {
88             return password;
89         }
90 
91         @Override
getPort()92         public int getPort() {
93             return port;
94         }
95     }
96 
97     @Test
passwordOptionalNotProvided()98     public void passwordOptionalNotProvided() {
99         Args a = new OptionalPasswordTestingArgs();
100         new JCommander(a, "--port", "7");
101         Assert.assertEquals(a.getPort(), 7);
102         Assert.assertEquals(a.getPassword(), null);
103     }
104 
105     @Test(expectedExceptions = ParameterException.class)
passwordRequredNotProvided()106     public void passwordRequredNotProvided() {
107         Args a = new PasswordTestingArgs();
108         new JCommander(a, "--port", "7");
109     }
110 
111 }
112