Add code block info prop
This commit is contained in:
		
							parent
							
								
									1b7fbfb77f
								
							
						
					
					
						commit
						1ab1b8b87a
					
				| @ -328,6 +328,9 @@ public class CorePlugin extends AbstractMarkwonPlugin { | |||||||
| 
 | 
 | ||||||
|         visitor.builder().append('\u00a0'); |         visitor.builder().append('\u00a0'); | ||||||
| 
 | 
 | ||||||
|  |         // @since 4.1.1-SNAPSHOT | ||||||
|  |         CoreProps.CODE_BLOCK_INFO.set(visitor.renderProps(), info); | ||||||
|  | 
 | ||||||
|         visitor.setSpansForNodeOptional(node, length); |         visitor.setSpansForNodeOptional(node, length); | ||||||
| 
 | 
 | ||||||
|         if (visitor.hasNext(node)) { |         if (visitor.hasNext(node)) { | ||||||
|  | |||||||
| @ -19,6 +19,11 @@ public abstract class CoreProps { | |||||||
| 
 | 
 | ||||||
|     public static final Prop<Boolean> PARAGRAPH_IS_IN_TIGHT_LIST = Prop.of("paragraph-is-in-tight-list"); |     public static final Prop<Boolean> PARAGRAPH_IS_IN_TIGHT_LIST = Prop.of("paragraph-is-in-tight-list"); | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * @since 4.1.1-SNAPSHOT | ||||||
|  |      */ | ||||||
|  |     public static final Prop<String> CODE_BLOCK_INFO = Prop.of("code-block-info"); | ||||||
|  | 
 | ||||||
|     public enum ListItemType { |     public enum ListItemType { | ||||||
|         BULLET, |         BULLET, | ||||||
|         ORDERED |         ORDERED | ||||||
|  | |||||||
| @ -1,10 +1,10 @@ | |||||||
| package io.noties.markwon.core; | package io.noties.markwon.core; | ||||||
| 
 | 
 | ||||||
|  | import android.text.method.MovementMethod; | ||||||
|  | import android.widget.TextView; | ||||||
|  | 
 | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
| import android.text.method.MovementMethod; |  | ||||||
| import android.widget.ImageView; |  | ||||||
| import android.widget.TextView; |  | ||||||
| 
 | 
 | ||||||
| import org.commonmark.node.BlockQuote; | import org.commonmark.node.BlockQuote; | ||||||
| import org.commonmark.node.BulletList; | import org.commonmark.node.BulletList; | ||||||
| @ -38,15 +38,15 @@ import java.util.List; | |||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Set; | import java.util.Set; | ||||||
| 
 | 
 | ||||||
| import ix.Ix; |  | ||||||
| import ix.IxFunction; |  | ||||||
| import ix.IxPredicate; |  | ||||||
| import io.noties.markwon.MarkwonConfiguration; | import io.noties.markwon.MarkwonConfiguration; | ||||||
| import io.noties.markwon.MarkwonSpansFactory; | import io.noties.markwon.MarkwonSpansFactory; | ||||||
| import io.noties.markwon.MarkwonVisitor; | import io.noties.markwon.MarkwonVisitor; | ||||||
| import io.noties.markwon.RenderProps; | import io.noties.markwon.RenderProps; | ||||||
| import io.noties.markwon.SpanFactory; | import io.noties.markwon.SpanFactory; | ||||||
| import io.noties.markwon.SpannableBuilder; | import io.noties.markwon.SpannableBuilder; | ||||||
|  | import ix.Ix; | ||||||
|  | import ix.IxFunction; | ||||||
|  | import ix.IxPredicate; | ||||||
| 
 | 
 | ||||||
| import static org.junit.Assert.assertEquals; | import static org.junit.Assert.assertEquals; | ||||||
| import static org.junit.Assert.assertNotNull; | import static org.junit.Assert.assertNotNull; | ||||||
| @ -54,6 +54,7 @@ import static org.junit.Assert.assertNull; | |||||||
| import static org.junit.Assert.assertTrue; | import static org.junit.Assert.assertTrue; | ||||||
| import static org.mockito.ArgumentMatchers.any; | import static org.mockito.ArgumentMatchers.any; | ||||||
| import static org.mockito.ArgumentMatchers.eq; | import static org.mockito.ArgumentMatchers.eq; | ||||||
|  | import static org.mockito.Mockito.RETURNS_MOCKS; | ||||||
| import static org.mockito.Mockito.mock; | import static org.mockito.Mockito.mock; | ||||||
| import static org.mockito.Mockito.times; | import static org.mockito.Mockito.times; | ||||||
| import static org.mockito.Mockito.verify; | import static org.mockito.Mockito.verify; | ||||||
| @ -300,4 +301,45 @@ public class CorePluginTest { | |||||||
| 
 | 
 | ||||||
|         verify(textView, times(0)).setMovementMethod(any(MovementMethod.class)); |         verify(textView, times(0)).setMovementMethod(any(MovementMethod.class)); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void code_block_info_prop() { | ||||||
|  |         final CorePlugin plugin = CorePlugin.create(); | ||||||
|  |         final MarkwonVisitor.Builder builder = mock(MarkwonVisitor.Builder.class); | ||||||
|  |         plugin.configureVisitor(builder); | ||||||
|  | 
 | ||||||
|  |         final ArgumentCaptor<MarkwonVisitor.NodeVisitor> fencedCaptor = | ||||||
|  |                 ArgumentCaptor.forClass(MarkwonVisitor.NodeVisitor.class); | ||||||
|  |         final ArgumentCaptor<MarkwonVisitor.NodeVisitor> indendedCaptor = | ||||||
|  |                 ArgumentCaptor.forClass(MarkwonVisitor.NodeVisitor.class); | ||||||
|  | 
 | ||||||
|  |         //noinspection unchecked | ||||||
|  |         verify(builder, times(1)).on(eq(FencedCodeBlock.class), fencedCaptor.capture()); | ||||||
|  |         //noinspection unchecked | ||||||
|  |         verify(builder, times(1)).on(eq(IndentedCodeBlock.class), indendedCaptor.capture()); | ||||||
|  | 
 | ||||||
|  |         final RenderProps renderProps = mock(RenderProps.class); | ||||||
|  |         final MarkwonVisitor visitor = mock(MarkwonVisitor.class, RETURNS_MOCKS); | ||||||
|  | 
 | ||||||
|  |         when(visitor.renderProps()).thenReturn(renderProps); | ||||||
|  | 
 | ||||||
|  |         // fenced | ||||||
|  |         { | ||||||
|  |             final FencedCodeBlock block = new FencedCodeBlock(); | ||||||
|  |             block.setInfo("testing-fenced"); | ||||||
|  |             //noinspection unchecked | ||||||
|  |             fencedCaptor.getValue().visit(visitor, block); | ||||||
|  | 
 | ||||||
|  |             verify(renderProps, times(1)).set(eq(CoreProps.CODE_BLOCK_INFO), eq("testing-fenced")); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // indended | ||||||
|  |         { | ||||||
|  |             final IndentedCodeBlock block = new IndentedCodeBlock(); | ||||||
|  |             //noinspection unchecked | ||||||
|  |             indendedCaptor.getValue().visit(visitor, block); | ||||||
|  | 
 | ||||||
|  |             verify(renderProps, times(1)).set(eq(CoreProps.CODE_BLOCK_INFO), eq((String) null)); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dimitry Ivanov
						Dimitry Ivanov