Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

511 lines (465 sloc) 31.916 kB
//
// GBCommentsProcessor-RegistrationsTesting.m
// appledoc
//
// Created by Tomaz Kragelj on 14.2.11.
// Copyright (C) 2011 Gentle Bytes. All rights reserved.
//
#import "GBApplicationSettingsProvider.h"
#import "GBDataObjects.h"
#import "GBStore.h"
#import "GBCommentsProcessor.h"
@interface GBCommentsProcessor (PrivateAPI)
- (BOOL)findCommentBlockInLines:(NSArray *)lines blockRange:(NSRange *)range shortRange:(NSRange *)shortRange;
@end
#pragma mark -
@interface GBCommentsProcessorRegistrationsTesting : GBObjectsAssertor
- (OCMockObject *)settingsProviderRepeatFirst:(BOOL)repeat;
- (void)assertFindCommentWithString:(NSString *)string matchesBlockRange:(NSRange)b shortRange:(NSRange)s;
@end
#pragma mark -
@implementation GBCommentsProcessorRegistrationsTesting
#pragma mark Short & long descriptions testing
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleTextOnlyBasedOnSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor1 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:YES]];
GBCommentsProcessor *processor2 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:NO]];
GBComment *comment1 = [GBComment commentWithStringValue:@"Some text\n\nAnother paragraph"];
GBComment *comment2 = [GBComment commentWithStringValue:comment1.stringValue];
// execute
[processor1 processComment:comment1 withContext:nil store:store];
[processor2 processComment:comment2 withContext:nil store:store];
// verify
[self assertComment:comment1 matchesShortDesc:@"Some text" longDesc:@"Some text\n\nAnother paragraph", nil];
[self assertComment:comment2 matchesShortDesc:@"Some text" longDesc:@"Another paragraph", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleAllTextAsLongDescBasedOnFlagsRegardlessOnSettingsAndContext {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor1 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:YES]];
GBCommentsProcessor *processor2 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:NO]];
GBComment *comment1 = [GBComment commentWithStringValue:@"Some text\n\nAnother paragraph"];
GBComment *comment2 = [GBComment commentWithStringValue:comment1.stringValue];
// execute
processor1.alwaysRepeatFirstParagraph = YES;
[processor1 processComment:comment1 withContext:nil store:store];
processor2.alwaysRepeatFirstParagraph = YES;
[processor2 processComment:comment2 withContext:nil store:store];
// verify
[self assertComment:comment1 matchesShortDesc:@"Some text" longDesc:@"Some text\n\nAnother paragraph", nil];
[self assertComment:comment2 matchesShortDesc:@"Some text" longDesc:@"Some text\n\nAnother paragraph", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleTextBeforeDirectivesBasedOnSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor1 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:YES]];
GBCommentsProcessor *processor2 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:NO]];
GBComment *comment1 = [GBComment commentWithStringValue:@"Some text\n\nAnother paragraph\n\n@warning Description"];
GBComment *comment2 = [GBComment commentWithStringValue:comment1.stringValue];
// execute
[processor1 processComment:comment1 withContext:nil store:store];
[processor2 processComment:comment2 withContext:nil store:store];
// verify
[self assertComment:comment1 matchesShortDesc:@"Some text" longDesc:@"Some text\n\nAnother paragraph", @"@warning Description", nil];
[self assertComment:comment2 matchesShortDesc:@"Some text" longDesc:@"Another paragraph", @"@warning Description", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleTextAfterDescriptionDirectiveRegardlessOfSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor1 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:YES]];
GBCommentsProcessor *processor2 = [GBCommentsProcessor processorWithSettingsProvider:[self settingsProviderRepeatFirst:NO]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@warning Some text\n\nAnother paragraph"];
GBComment *comment2 = [GBComment commentWithStringValue:comment1.stringValue];
// execute
[processor1 processComment:comment1 withContext:nil store:store];
[processor2 processComment:comment2 withContext:nil store:store];
// verify - all text after directive is considered part of that directive, but short text is still properly detected.
[self assertComment:comment1 matchesShortDesc:@"Some text" longDesc:@"@warning Some text\n\nAnother paragraph", nil];
[self assertComment:comment2 matchesShortDesc:@"Some text" longDesc:@"@warning Some text\n\nAnother paragraph", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleMultipleDescriptionDirectivesProperly {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@warning Paragraph 1.1\n\nParagraph 1.2\n\n@warning Paragraph 2.1\n\nParagraph 2.2"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@warning Warning\n\n@bug Bug"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@bug Bug\n\n@warning Warning"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
// verify
[self assertComment:comment1 matchesShortDesc:@"Paragraph 1.1" longDesc:@"@warning Paragraph 1.1\n\nParagraph 1.2", @"@warning Paragraph 2.1\n\nParagraph 2.2", nil];
[self assertComment:comment2 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", @"@bug Bug", nil];
[self assertComment:comment3 matchesShortDesc:@"Bug" longDesc:@"@bug Bug", @"@warning Warning", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleDescriptionForParamDirectiveRegardlessOfSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@param name Description\n\nParagraph"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@param name Description\n\nParagraph\n\n@warning Warning"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@param name1 Description1\n@param name2 Description2"];
GBComment *comment4 = [GBComment commentWithStringValue:@"Prefix\n\n@param name Description\n\nParagraph"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
[processor processComment:comment4 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertComment:comment1 matchesShortDesc:@"Description" longDesc:nil];
[self assertComment:comment2 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment3 matchesShortDesc:@"Description1" longDesc:nil];
[self assertComment:comment4 matchesShortDesc:@"Prefix" longDesc:@"Prefix", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleDescriptionForExceptionDirectiveRegardlessOfSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@exception name Description\n\nParagraph"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@exception name Description\n\nParagraph\n\n@warning Warning"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@exception name Description1\n@exception name2 Description2"];
GBComment *comment4 = [GBComment commentWithStringValue:@"Prefix\n\n@exception name Description\n\nParagraph"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
[processor processComment:comment4 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertComment:comment1 matchesShortDesc:@"Description" longDesc:nil];
[self assertComment:comment2 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment3 matchesShortDesc:@"Description1" longDesc:nil];
[self assertComment:comment4 matchesShortDesc:@"Prefix" longDesc:@"Prefix", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleDescriptionForReturnDirectiveRegardlessOfSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@return Description\n\nParagraph"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@return Description\n\nParagraph\n\n@warning Warning"];
GBComment *comment3 = [GBComment commentWithStringValue:@"Prefix\n\n@return Description\n\nParagraph"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertComment:comment1 matchesShortDesc:@"Description" longDesc:nil];
[self assertComment:comment2 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment3 matchesShortDesc:@"Prefix" longDesc:@"Prefix", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldHandleRelatedSymbolsForReturnDirectiveRegardlessOfSettings {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@see Description\n\nParagraph"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@see Description\n\nParagraph\n\n@warning Warning"];
GBComment *comment3 = [GBComment commentWithStringValue:@"Prefix\n\n@see Description\n\nParagraph"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertComment:comment1 matchesShortDesc:@"Description" longDesc:nil];
[self assertComment:comment2 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment3 matchesShortDesc:@"Prefix" longDesc:@"Prefix", nil];
}
- (void)testProcessCommentWithContextStore_descriptions_shouldAssignSettingsToAllCommentComponents {
// setup
id settings = [GBTestObjectsRegistry realSettingsProvider];
GBStore *store = [GBTestObjectsRegistry storeWithObjects:[GBClassData classDataWithName:@"Class"], nil];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:settings];
GBComment *comment = [GBComment commentWithStringValue:
@"Short\n\n"
@"Long\n\n"
@"@warning Warning\n\n"
@"@bug Bug\n\n"
@"@param name Desc\n"
@"@exception name Desc\n"
@"@return Desc"
@"@see Class"
@"@since Version 1.0"];
// execute
[processor processComment:comment withContext:nil store:store];
// verify
assertThat(comment.shortDescription.settings, is(settings));
assertThat(comment.shortDescription.sourceInfo, isNot(nil));
for (GBCommentComponent *c in comment.longDescription.components) {
assertThat(c.settings, is(settings));
assertThat(c.sourceInfo, isNot(nil));
}
for (GBCommentArgument *a in comment.methodParameters) {
for (GBCommentComponent *c in a.argumentDescription.components) {
assertThat(c.settings, is(settings));
assertThat(c.sourceInfo, isNot(nil));
}
}
for (GBCommentArgument *a in comment.methodExceptions) {
for (GBCommentComponent *c in a.argumentDescription.components) {
assertThat(c.settings, is(settings));
assertThat(c.sourceInfo, isNot(nil));
}
}
for (GBCommentComponent *c in comment.methodResult.components) {
assertThat(c.settings, is(settings));
assertThat(c.sourceInfo, isNot(nil));
}
for (GBCommentComponent *c in comment.relatedItems.components) {
assertThat(c.settings, is(settings));
assertThat(c.sourceInfo, isNot(nil));
}
for (GBCommentComponent *c in comment.availability.components) {
assertThat(c.settings, is(settings));
assertThat(c.sourceInfo, isNot(nil));
}
}
#pragma mark Method data testing
- (void)testProcessCommentWithContextStore_methods_shouldRegisterAllParametersDescriptionsProperly {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment = [GBComment commentWithStringValue:@"@param name1 Description1\nLine2\n\nParagraph2\n@param name2 Description2"];
// execute
[processor processComment:comment withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertMethodArguments:comment.methodParameters matches:@"name1", @"Description1\nLine2\n\nParagraph2", GBEND, @"name2", @"Description2", GBEND, nil];
}
- (void)testProcessCommentWithContextStore_methods_shouldRegisterAllParametersRegardlessOfEmptyLinesGaps {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@param name1 Description1\n@param name2 Description2"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@param name1 Description1\n\n\n\n\n\n@param name2 Description2"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertMethodArguments:comment1.methodParameters matches:@"name1", @"Description1", GBEND, @"name2", @"Description2", GBEND, nil];
[self assertMethodArguments:comment2.methodParameters matches:@"name1", @"Description1", GBEND, @"name2", @"Description2", GBEND, nil];
}
- (void)testProcessCommentWithContextStore_methods_shouldRegisterAllExceptionsRegardlessOfEmptyLinesGaps {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@exception name1 Description1\n@exception name2 Description2"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@exception name1 Description1\n\n\n\n\n\n@exception name2 Description2"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertMethodArguments:comment1.methodExceptions matches:@"name1", @"Description1", GBEND, @"name2", @"Description2", GBEND, nil];
[self assertMethodArguments:comment2.methodExceptions matches:@"name1", @"Description1", GBEND, @"name2", @"Description2", GBEND, nil];
}
- (void)testProcessCommentWithContextStore_methods_shouldRegisterResultDescriptionProperly {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@return Description"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@return Description1\nLine2\n\nParagraph2"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertCommentComponents:comment1.methodResult matchesStringValues:@"Description", nil];
[self assertCommentComponents:comment2.methodResult matchesStringValues:@"Description1\nLine2\n\nParagraph2", nil];
}
- (void)testProcessCommentWithContextStore_methods_shouldRegisterAvailabilityDescriptionProperly {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@since Description"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@available Description1\nLine2\n\nParagraph2"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertCommentComponents:comment1.availability matchesStringValues:@"Description", nil];
[self assertCommentComponents:comment2.availability matchesStringValues:@"Description1\nLine2\n\nParagraph2", nil];
}
#pragma mark Common directives testing
- (void)testProcessCommentWithContextStore_directives_shouldRegisterRelatedItemsForKnownTopLevelObjects {
// setup
GBClassData *class = [GBClassData classDataWithName:@"Class"];
GBCategoryData *category = [GBCategoryData categoryDataWithName:@"Category" className:@"Class"];
GBProtocolData *protocol = [GBProtocolData protocolDataWithName:@"Protocol"];
GBStore *store = [GBTestObjectsRegistry storeWithObjects:class, category, protocol, nil];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@see Class"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@see Class(Category)"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@see Protocol"];
GBComment *comment4 = [GBComment commentWithStringValue:@"@see Unknown"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
[processor processComment:comment4 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertCommentComponents:comment1.relatedItems matchesStringValues:@"Class", nil];
[self assertCommentComponents:comment2.relatedItems matchesStringValues:@"Class(Category)", nil];
[self assertCommentComponents:comment3.relatedItems matchesStringValues:@"Protocol", nil];
[self assertCommentComponents:comment4.relatedItems matchesStringValues:nil];
}
- (void)testProcessCommentWithContextStore_directives_shouldRegisterRelatedItemsForKnownDocuments {
// setup
GBDocumentData *document1 = [GBDocumentData documentDataWithContents:@"c" path:@"Document1.html"];
GBDocumentData *document2 = [GBDocumentData documentDataWithContents:@"c" path:@"Document2.html"];
GBStore *store = [GBTestObjectsRegistry storeWithObjects:document1, document2, nil];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@see Document1"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@see Document2"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@see Unknown"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertCommentComponents:comment1.relatedItems matchesStringValues:@"Document1", nil];
[self assertCommentComponents:comment2.relatedItems matchesStringValues:@"Document2", nil];
[self assertCommentComponents:comment3.relatedItems matchesStringValues:nil];
}
- (void)testProcessCommentWithContextStore_directives_shouldRegisterRelatedItemsForKnownLocalMembers {
// setup
GBClassData *class = [GBTestObjectsRegistry classWithName:@"Class" methods:[GBTestObjectsRegistry instanceMethodWithNames:@"method", nil], nil];
GBStore *store = [GBTestObjectsRegistry storeWithObjects:class, nil];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@see method:"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@see unknown:"];
// execute
[processor processComment:comment1 withContext:class store:store];
[processor processComment:comment2 withContext:class store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertCommentComponents:comment1.relatedItems matchesStringValues:@"method:", nil];
[self assertCommentComponents:comment2.relatedItems matchesStringValues:nil];
}
- (void)testProcessCommentWithContextStore_directives_shouldRegisterRelatedItemsForKnownRemoteMembers {
// setup
GBClassData *class = [GBTestObjectsRegistry classWithName:@"Class" methods:[GBTestObjectsRegistry instanceMethodWithNames:@"method", nil], nil];
GBStore *store = [GBTestObjectsRegistry storeWithObjects:class, nil];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@see [Class method:]"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@see [Class unknown:]"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@see [Unknown method:]"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertCommentComponents:comment1.relatedItems matchesStringValues:@"[Class method:]", nil];
[self assertCommentComponents:comment2.relatedItems matchesStringValues:nil];
[self assertCommentComponents:comment3.relatedItems matchesStringValues:nil];
}
#pragma mark Combinations testing
- (void)testProcessCommentWithContextStore_combinations_shouldRegisterMethodDescriptionBlock {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment = [GBComment commentWithStringValue:
@"@param name1 Description1\nLine2\n\nParagraph2\n"
@"@exception exc Exception\n"
@"@param name2 Description2\n"
@"@return Return\n"
@"@param name3 Description3\n"
@"@since Version 1.0\n"];
// execute
[processor processComment:comment withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertMethodArguments:comment.methodParameters matches:
@"name1", @"Description1\nLine2\n\nParagraph2", GBEND,
@"name2", @"Description2", GBEND,
@"name3", @"Description3", GBEND, nil];
[self assertMethodArguments:comment.methodExceptions matches:@"exc", @"Exception", GBEND, nil];
[self assertCommentComponents:comment.methodResult matchesStringValues:@"Return", nil];
[self assertCommentComponents:comment.availability matchesStringValues:@"Version 1.0", nil];
}
- (void)testProcessCommentWithContextStore_combinations_shouldRegisterWarningAfterMethodBlockAsMainDescription {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment1 = [GBComment commentWithStringValue:@"@param name Description\n@warning Warning"];
GBComment *comment2 = [GBComment commentWithStringValue:@"@exception name Description\n@warning Warning"];
GBComment *comment3 = [GBComment commentWithStringValue:@"@return Description\n@warning Warning"];
GBComment *comment4 = [GBComment commentWithStringValue:@"@since Description\n@warning Warning"];
// execute
[processor processComment:comment1 withContext:nil store:store];
[processor processComment:comment2 withContext:nil store:store];
[processor processComment:comment3 withContext:nil store:store];
[processor processComment:comment4 withContext:nil store:store];
// verify - we only use parameter description if there is nothing else found in the comment.
[self assertMethodArguments:comment1.methodParameters matches:@"name", @"Description", GBEND, nil];
[self assertMethodArguments:comment2.methodExceptions matches:@"name", @"Description", GBEND, nil];
[self assertCommentComponents:comment3.methodResult matchesStringValues:@"Description", nil];
[self assertCommentComponents:comment4.availability matchesStringValues:@"Description", nil];
[self assertComment:comment1 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment2 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment3 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
[self assertComment:comment4 matchesShortDesc:@"Warning" longDesc:@"@warning Warning", nil];
}
#pragma mark Miscellaneous handling
- (void)testProcessCommentWithContextStore_misc_shouldSetIsProcessed {
// setup
GBStore *store = [GBTestObjectsRegistry store];
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
GBComment *comment = [GBComment commentWithStringValue:@""];
// execute
[processor processComment:comment withContext:nil store:store];
// verify
assertThatBool(comment.isProcessed, equalToBool(YES));
}
#pragma mark Private methods testing
- (void)testFindCommentBlockInLinesBlockRangeShortRange_shouldDetectSingleComponent {
[self assertFindCommentWithString:@"line" matchesBlockRange:NSMakeRange(0, 1) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"line1\nline2" matchesBlockRange:NSMakeRange(0, 2) shortRange:NSMakeRange(0, 2)];
[self assertFindCommentWithString:@"para1\n\npara" matchesBlockRange:NSMakeRange(0, 3) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"para1\n\npara2\n\npara3" matchesBlockRange:NSMakeRange(0, 5) shortRange:NSMakeRange(0, 1)];
}
- (void)testFindCommentBlockInLinesBlockRangeShortRange_shouldDetectSingleComponentUpToDirective {
[self assertFindCommentWithString:@"line\n@warning desc" matchesBlockRange:NSMakeRange(0, 1) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"line\n\n@warning desc" matchesBlockRange:NSMakeRange(0, 2) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"para1\n\npara2\n@warning desc" matchesBlockRange:NSMakeRange(0, 3) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"para1\n\npara2\n\n@warning desc" matchesBlockRange:NSMakeRange(0, 4) shortRange:NSMakeRange(0, 1)];
}
- (void)testFindCommentBlockInLinesBlockRangeShortRange_shouldDetectDirectiveComponentUpToEndOfLines {
[self assertFindCommentWithString:@"@warning desc" matchesBlockRange:NSMakeRange(0, 1) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"@warning line1\nline2" matchesBlockRange:NSMakeRange(0, 2) shortRange:NSMakeRange(0, 2)];
[self assertFindCommentWithString:@"@warning para1\n\npara2" matchesBlockRange:NSMakeRange(0, 3) shortRange:NSMakeRange(0, 1)];
}
- (void)testFindCommentBlockInLinesBlockRangeShortRange_shouldDetectDirectiveComponentUpToNextDirective {
[self assertFindCommentWithString:@"@warning desc\n@warning next" matchesBlockRange:NSMakeRange(0, 1) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"@warning desc\n\n@warning next" matchesBlockRange:NSMakeRange(0, 2) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"@warning line1\nline2\n@warning next" matchesBlockRange:NSMakeRange(0, 2) shortRange:NSMakeRange(0, 2)];
[self assertFindCommentWithString:@"@warning line1\nline2\n\n@warning next" matchesBlockRange:NSMakeRange(0, 3) shortRange:NSMakeRange(0, 2)];
[self assertFindCommentWithString:@"@warning para1\n\npara2\n@warning next" matchesBlockRange:NSMakeRange(0, 3) shortRange:NSMakeRange(0, 1)];
[self assertFindCommentWithString:@"@warning para1\n\npara2\n\n@warning next" matchesBlockRange:NSMakeRange(0, 4) shortRange:NSMakeRange(0, 1)];
}
- (void)testFindCommentBlockInLinesBlockRangeShortRange_shouldStopAtAnyDirective {
NSRange blockRange = NSMakeRange(0, 1);
NSRange shortRange = NSMakeRange(0, 1);
[self assertFindCommentWithString:@"line\n@warning desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@bug desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@param name desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@return desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@returns desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@exception name desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@see desc" matchesBlockRange:blockRange shortRange:shortRange];
[self assertFindCommentWithString:@"line\n@sa desc" matchesBlockRange:blockRange shortRange:shortRange];
}
#pragma Creation & assertion methods
- (OCMockObject *)settingsProviderRepeatFirst:(BOOL)repeat {
OCMockObject *result = [GBTestObjectsRegistry mockSettingsProvider];
[[[result stub] andReturnValue:[NSNumber numberWithBool:repeat]] repeatFirstParagraphForMemberDescription];
return result;
}
- (void)assertFindCommentWithString:(NSString *)string matchesBlockRange:(NSRange)b shortRange:(NSRange)s {
// setup
GBCommentsProcessor *processor = [GBCommentsProcessor processorWithSettingsProvider:[GBTestObjectsRegistry realSettingsProvider]];
// execute
NSRange blockRange = NSMakeRange(0, 0);
NSRange shortRange = NSMakeRange(0, 0);
[processor findCommentBlockInLines:[string arrayOfLines] blockRange:&blockRange shortRange:&shortRange];
// verify
assertThatInteger(blockRange.location, equalToInteger(b.location));
assertThatInteger(blockRange.length, equalToInteger(b.length));
assertThatInteger(shortRange.location, equalToInteger(s.location));
assertThatInteger(shortRange.length, equalToInteger(s.length));
}
@end
Jump to Line
Something went wrong with that request. Please try again.