package edu.brown.cs.student; import edu.brown.cs.student.term.parsing.LocalXmlParser; import edu.brown.cs.student.term.parsing.UrlXmlParser; import edu.brown.cs.student.term.parsing.XmlParser; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.print.Doc; import static org.junit.Assert.*; public class XmlParserTest { private XmlParser _localXmlParser, _urlXmlParser; private Document _doc; @Before public void setUp() { _localXmlParser = new LocalXmlParser(); _urlXmlParser = new UrlXmlParser(); } @After public void tearDown() { _localXmlParser = null; _urlXmlParser = null; } @Test public void parsesLocal(){ setUp(); Document doc = _localXmlParser.parse("data/xml_single_trade_test.xml"); assertNotNull(doc); // Id of person assertEquals(getIdFromDoc(doc), "0001561844"); tearDown(); } @Test public void parsesUrl(){ setUp(); Document doc = _urlXmlParser.parse("https://www.sec.gov/Archives/edgar/data/1517006/000110465921046242/tm2112036-4_4seq1.xml"); assertNotNull(doc); // Id of person assertEquals(getIdFromDoc(doc), "0001561844"); Document doc2 = _urlXmlParser.parse("https://www.sec.gov/Archives/edgar/data/1254015/000120919121026318/doc4.xml"); assertNotNull(doc2); assertEquals(getIdFromDoc(doc2), "0001254015"); tearDown(); } public String getIdFromDoc(Document doc) { // Id of person NodeList idNode = doc.getElementsByTagName("rptOwnerCik"); assertEquals(idNode.getLength(), 1); return idNode.item(0).getTextContent(); } @Test public void urlSameAsLocal(){ setUp(); Document local = _localXmlParser.parse("data/xml_single_trade_test.xml"); Document url = _urlXmlParser.parse("https://www.sec.gov/Archives/edgar/data/1517006/000110465921046242/tm2112036-4_4seq1.xml"); assertEquals(getIdFromDoc(local), getIdFromDoc(url)); tearDown(); } @Test public void noFileExists(){ setUp(); tearDown(); } @Test public void badXmlFormat(){ setUp(); Document doc = _localXmlParser.parse("data/bad.xml"); assertNull(doc); tearDown(); } @Test public void personDataParse(){ setUp(); Document doc = _localXmlParser.parse("data/xml_single_trade_test.xml"); assertNotNull(doc); // Id of person NodeList idNode = doc.getElementsByTagName("rptOwnerCik"); assertEquals(idNode.getLength(), 1); String id = idNode.item(0).getTextContent(); assertEquals(id, "0001561844"); // Name of person NodeList nameNode = doc.getElementsByTagName("rptOwnerName"); assertEquals(nameNode.getLength(), 1); String name = nameNode.item(0).getTextContent(); assertEquals(name, "Levental Igor"); tearDown(); } @Test public void securityDataParse(){ setUp(); Document doc = _localXmlParser.parse("data/xml_single_trade_test.xml"); assertNotNull(doc); // Ticker of security NodeList idNode = doc.getElementsByTagName("issuerTradingSymbol"); assertEquals(idNode.getLength(), 1); String id = idNode.item(0).getTextContent(); assertEquals(id, "GATO"); tearDown(); } @Test public void tradeDataParse(){ setUp(); Document doc = _localXmlParser.parse("data/xml_single_trade_test.xml"); assertNotEquals(doc, null); // Data of trade in an array of values NodeList trade = doc.getElementsByTagName("nonDerivativeTransaction"); assertEquals(trade.item(0).getNodeType(), Node.ELEMENT_NODE); Element tradeElement = (Element) trade.item(0); NodeList values = tradeElement.getElementsByTagName("value"); assertEquals(values.getLength(), 7); // type of stock String stockType = values.item(0).getTextContent(); assertEquals(stockType, "Common Stock"); // date String date = values.item(1).getTextContent(); assertEquals(date, "2021-03-31"); // # of shares String numShares = values.item(2).getTextContent(); assertEquals(numShares, "8236"); // price of shares String priceShares = values.item(3).getTextContent(); assertEquals(priceShares, "0"); // transaction type (A for acquire) String transactionType = values.item(4).getTextContent(); assertEquals(transactionType, "A"); // shared after transaction String sharesAfter = values.item(5).getTextContent(); assertEquals(sharesAfter, "10799"); // ownership type String ownershipType = values.item(6).getTextContent(); assertEquals(ownershipType, "D"); tearDown(); } @Test public void badFormat(){ setUp(); // TODO: add case tearDown(); } }