@@ -625,4 +625,62 @@ defmodule ExqliteTest do
625
625
refute_receive _anything
626
626
end
627
627
end
628
+
629
+ describe "set_log_hook/1" do
630
+ setup do
631
+ { :ok , conn } = Exqlite . open ( ":memory:" )
632
+ on_exit ( fn -> Exqlite . close ( conn ) end )
633
+ { :ok , conn: conn }
634
+ end
635
+
636
+ test "can receive errors" , % { conn: conn } do
637
+ assert :ok = Exqlite . set_log_hook ( self ( ) )
638
+
639
+ assert { :error , % Exqlite.Error { message: "near \" some\" : syntax error" } } =
640
+ Exqlite . prepare ( conn , "some invalid sql" )
641
+
642
+ assert_receive { :log , rc , msg }
643
+ assert rc == 1
644
+ assert msg == "near \" some\" : syntax error in \" some invalid sql\" "
645
+ refute_receive _anything_else
646
+ end
647
+
648
+ test "only one pid can listen at a time" , % { conn: conn } do
649
+ assert :ok = Exqlite . set_log_hook ( self ( ) )
650
+
651
+ task =
652
+ Task . async ( fn ->
653
+ :ok = Exqlite . set_log_hook ( self ( ) )
654
+
655
+ assert { :error , % Exqlite.Error { message: "near \" some\" : syntax error" } } =
656
+ Exqlite . prepare ( conn , "some invalid sql" )
657
+
658
+ assert_receive { :log , rc , msg }
659
+ assert rc == 1
660
+ assert msg == "near \" some\" : syntax error in \" some invalid sql\" "
661
+ refute_receive _anything_else
662
+ end )
663
+
664
+ Task . await ( task )
665
+ refute_receive _anything_else
666
+ end
667
+
668
+ test "receives notifications from all connections" , % { conn: conn1 } do
669
+ assert :ok = Exqlite . set_log_hook ( self ( ) )
670
+ assert { :ok , conn2 } = Exqlite . open ( ":memory:" )
671
+ on_exit ( fn -> Exqlite . close ( conn2 ) end )
672
+
673
+ assert { :error , _reason } = Exqlite . prepare ( conn1 , "some invalid sql 1" )
674
+ assert_receive { :log , rc , msg }
675
+ assert rc == 1
676
+ assert msg == "near \" some\" : syntax error in \" some invalid sql 1\" "
677
+ refute_receive _anything_else
678
+
679
+ assert { :error , _reason } = Exqlite . prepare ( conn2 , "some invalid sql 2" )
680
+ assert_receive { :log , rc , msg }
681
+ assert rc == 1
682
+ assert msg == "near \" some\" : syntax error in \" some invalid sql 2\" "
683
+ refute_receive _anything_else
684
+ end
685
+ end
628
686
end
0 commit comments