@Test public void getBinaryProperty() throws Exception { Entry entry = database.findEntries("Test attachment").get(0); byte [] letterJ = entry.getBinaryProperty("letter J.jpeg"); InputStream testfile = getClass().getClassLoader().getResourceAsStream("letter J.jpeg"); byte [] original = ByteStreams.toByteArray(testfile); Assert.assertArrayEquals(original, letterJ); }
@Test public void setBinaryProperty() throws Exception { InputStream testfile = getClass().getClassLoader().getResourceAsStream("letter L.jpeg"); byte [] original = ByteStreams.toByteArray(testfile); Entry entry = database.findEntries("Test attachment").get(0); entry.setBinaryProperty("letter L.jpeg", original); byte [] letterL = entry.getBinaryProperty("letter L.jpeg"); Assert.assertArrayEquals(original, letterL); assertArrayEquals(new String[] {"letter J.jpeg", "letter L.jpeg"}, entry.getBinaryPropertyNames().toArray()); Assert.assertTrue(database.isDirty()); }
@Test public void saveAndReloadTest2() throws IOException { D attachment = getDatabase("Attachment.kdbx", getCreds("123".getBytes())); Entry entry = attachment.findEntries("Test attachment").get(0); assertArrayEquals(new String[] {"letter J.jpeg"}, entry.getBinaryPropertyNames().toArray()); Entry entry2 = attachment.findEntries("Test 2 attachment").get(0); assertArrayEquals(new String[] {"letter J.jpeg", "letter L.jpeg"}, entry2.getBinaryPropertyNames().toArray()); byte[] content = entry2.getBinaryProperty("letter L.jpeg"); entry.setBinaryProperty("letter L.jpeg", content); assertArrayEquals(new String[] {"letter J.jpeg", "letter L.jpeg"}, entry.getBinaryPropertyNames().toArray()); FileOutputStream fos = new FileOutputStream("testOutput/test2.kdbx"); saveDatabase(attachment, getCreds("123".getBytes()), fos); fos.flush(); fos.close(); FileInputStream fis = new FileInputStream("testOutput/test2.kdbx"); Database input = loadDatabase(getCreds("123".getBytes()), fis); entry = (Entry) input.findEntries("Test attachment").get(0); assertArrayEquals(new String[] {"letter J.jpeg", "letter L.jpeg"}, entry.getBinaryPropertyNames().toArray()); //saveDatabase(input, new StreamFormat.None(), new Credentials.None(), System.out); }
@Test public void getAnotherBinaryProperty() throws Exception { Entry entry = database.findEntries("Test 2 attachment").get(0); byte [] letterL = entry.getBinaryProperty("letter L.jpeg"); InputStream testfile = getClass().getClassLoader().getResourceAsStream("letter L.jpeg"); byte [] original = ByteStreams.toByteArray(testfile); Assert.assertArrayEquals(original, letterL); }
@Test public void checkAddChangeRemoveBinaryProperty() { byte[] test = new byte[] {0, 1, 2 ,3}; byte[] test2 = new byte[] {3, 2, 1, 0}; Entry entry = database.findEntries("Test attachment").get(0); assertEquals(1, entry.getBinaryPropertyNames().size()); entry.setBinaryProperty("test", test); assertArrayEquals(test, entry.getBinaryProperty("test")); entry.setBinaryProperty("test", test2); assertArrayEquals(test2, entry.getBinaryProperty("test")); // true that property was removed assertTrue(entry.removeBinaryProperty("test")); // false that same property was removed assertFalse(entry.removeBinaryProperty("test")); // false that non existent was removed assertFalse(entry.removeBinaryProperty("test-test")); // same number of properties as we started with assertEquals(1, entry.getBinaryPropertyNames().size()); } }
@Override public E newEntry(Entry<?,?,?,?> entry) { E result = newEntry(); for (String propertyName: entry.getPropertyNames()) { try { // all implementations must support setting of STANDARD_PROPERTY_NAMES result.setProperty(propertyName, entry.getProperty(propertyName)); } catch (UnsupportedOperationException e) { // oh well, we tried } } try { for (String propertyName: (entry.getBinaryPropertyNames())) { try { // all implementations must support setting of STANDARD_PROPERTY_NAMES result.setBinaryProperty(propertyName, entry.getBinaryProperty(propertyName)); } catch (UnsupportedOperationException e) { // oh well, we tried } } } catch (UnsupportedOperationException e) { // never mind } result.setIcon(this.newIcon(entry.getIcon().getIndex())); // everything else should have been copied via properties return result; }