/** * erlyberly, erlang trace debugger * Copyright (C) 2016 Andy Till * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package erlyberly.node; import org.junit.Assert; import org.junit.Test; import com.ericsson.otp.erlang.OtpErlangAtom; import com.ericsson.otp.erlang.OtpErlangBinary; import com.ericsson.otp.erlang.OtpErlangException; import com.ericsson.otp.erlang.OtpErlangList; import com.ericsson.otp.erlang.OtpErlangObject; import erlyberly.format.ErlangFormatter; import erlyberly.format.LFEFormatter; public class OtpUtilTest { byte[] bytes; @Test public void binaryToString1() { bytes = "hello".getBytes(); Assert.assertEquals("<<\"hello\">>", bin()); } @Test public void binaryToString2() { bytes = "\0hello".getBytes(); Assert.assertEquals("<<0, \"hello\">>", bin()); } @Test public void binaryToString3() { bytes = "\0hello\0".getBytes(); Assert.assertEquals("<<0, \"hello\", 0>>", bin()); } /* @Test public void binaryToString4() { bytes = "_hello\0".getBytes(); bytes[0] = 31; Assert.assertEquals("<<31, \"hello\", 0>>", bin()); } @Test public void otpObjectToStringList0() { OtpErlangList list = OtpUtil.list(); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(list, sb ); Assert.assertEquals("[]", sb.toString()); } @Test public void otpObjectToStringList1() { OtpErlangList list = OtpUtil.list(1); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(list, sb ); Assert.assertEquals("[1]", sb.toString()); } @Test public void otpObjectToStringList2() { OtpErlangList list = OtpUtil.list(1,2); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(list, sb ); Assert.assertEquals("[1, 2]", sb.toString()); } @Test public void otpObjectToStringTuple0() { OtpErlangTuple tuple = OtpUtil.tuple(); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(tuple, sb ); Assert.assertEquals("{}", sb.toString()); } @Test public void otpObjectToStringTuple1() { OtpErlangTuple tuple = OtpUtil.tuple(1); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(tuple, sb ); Assert.assertEquals("{1}", sb.toString()); } @Test public void otpObjectToStringTuple2() { OtpErlangTuple tuple = OtpUtil.tuple(1,2); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(tuple, sb ); Assert.assertEquals("{1, 2}", sb.toString()); } @Test public void otpObjectToStringTuple3() { OtpErlangTuple tuple = OtpUtil.tuple(1,2,3); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(tuple, sb ); Assert.assertEquals("{1, 2, 3}", sb.toString()); } @Test public void otpObjectToStringNestedTuples() { OtpErlangTuple tuple = OtpUtil.tuple(1,2, OtpUtil.tuple(3,4)); StringBuilder sb = new StringBuilder();; OtpUtil.otpObjectToString(tuple, sb ); Assert.assertEquals("{1, 2, {3, 4}}", sb.toString()); } */ @Test public void improperListErlang() throws OtpErlangException { OtpErlangList improper = new OtpErlangList( new OtpErlangObject[] { new OtpErlangAtom("hello"), new OtpErlangBinary("x".getBytes()), }, new OtpErlangAtom("world")); Assert.assertEquals( "[hello, <<\"x\">>|world]", new ErlangFormatter().toString(improper)); } @Test public void improperListLFE() throws OtpErlangException { OtpErlangList improper = new OtpErlangList( new OtpErlangObject[] { new OtpErlangAtom("hello"), new OtpErlangBinary("x".getBytes()), }, new OtpErlangAtom("world")); Assert.assertEquals( "('hello, #B(\"x\").'world)", new LFEFormatter().toString(improper)); } private String bin() { OtpErlangBinary binary = new OtpErlangBinary(bytes); return new ErlangFormatter().toString(binary); } }